//Loop thorugh and copy values for all non null properties to the ITransformer object void UpdateMatchingProperties(TransformerUpdateViewModel model, Transformer transformer) { var modelProperties = model.GetType().GetProperties(); foreach (var property in modelProperties) { var valueToCopy = property.GetValue(model); if (valueToCopy != null) { var propertyToUpdate = transformer.GetType().GetProperty(property.Name); propertyToUpdate.SetValue(transformer, valueToCopy); } } }
public async Task <IActionResult> UpdateTransformer(int transformerid, [FromBody] TransformerUpdateViewModel updatedTransformerViewModel) { if (ModelState.IsValid) { var transformerObject = await GetTransformer(transformerid); var transformer = GetTransformerObjectFromActionResult(transformerObject); if (transformer != null) { var updatedTransformerObject = _factory.UpdateTransformer(updatedTransformerViewModel, transformer as Transformer); var result = await _datastore.UpdateTransformerAsync(transformerid, updatedTransformerObject); return(Ok(result)); } } return(BadRequest(Responses.INVALID_TRANSFORMER_ID)); }
public async void UpdateOperation_ValidID_Success() { SetupMockTransformerLookup(1, "Grimlock", 7); var transformerUpdateViewModel = new TransformerUpdateViewModel { Name = "Grimlock1", Rank = 8 }; _mockDataStore.Setup(x => x.UpdateTransformerAsync(1, It.IsAny <ITransformer>())) .ReturnsAsync(new Transformer { Name = "Grimlock1", Rank = 8, ID = 1 }); var result = await _sut.UpdateTransformer(1, transformerUpdateViewModel); Assert.IsType <OkObjectResult>(result); Assert.IsAssignableFrom <ITransformer>(((OkObjectResult)result).Value); Assert.Equal(1, ((ITransformer)((OkObjectResult)result).Value).ID); Assert.Equal("Grimlock1", ((ITransformer)((OkObjectResult)result).Value).Name); Assert.Equal(8, ((ITransformer)((OkObjectResult)result).Value).Rank); }
//Update the ITransformer object based on partial updates, simulating a PATCH operation. public ITransformer UpdateTransformer(TransformerUpdateViewModel model, Transformer transformer) { UpdateMatchingProperties(model, transformer); return(transformer); }