public async Task <ActionResult <CostItemViewModel> > Add([FromBody] CostItemCreateViewModel model) { var entity = new CostItem { Amount = model.Amount, CostTypeId = model.CostTypeId, DateUsed = model.DateUsed, ItemName = model.ItemName }; var costTypes = await _costTypesRepository.GetAll(); if (costTypes.Any(x => x.CostTypeId == model.CostTypeId) == false) { return(NotFound("CostTypeId does not exist")); } var record = await _costItemsRepository.Add(entity); return(CreatedAtRoute("GetById", new { Id = record.CostItemId }, new CostItemViewModel { CostItemId = record.CostItemId, ItemName = record.ItemName, CostType = AdaptToCostTypeViewModel(costTypes, record.CostTypeId), Amount = record.Amount, DateUsed = record.DateUsed })); }
public async Task Add_ShouldReturnResult() { // arrange var costItem = costItemsFaker.Generate(); var costItemCreateViewModel = new CostItemCreateViewModel { Amount = costItem.Amount, CostTypeId = costItem.CostTypeId, DateUsed = costItem.DateUsed, ItemName = costItem.ItemName }; costItemRepositoryMock.Setup(x => x.Add(It.IsAny <CostItem>())).ReturnsAsync(costItem); // act var result = await controller.Add(costItemCreateViewModel); // assert costItemRepositoryMock.Verify(s => s.Add(It.IsAny <CostItem>()), Times.Once()); var createdAtRouteResult = result.Result.Should().BeOfType <CreatedAtRouteResult>().Subject; var viewModel = createdAtRouteResult.Value.Should().BeOfType <CostItemViewModel>().Subject; viewModel.CostItemId.Should().NotBeEmpty(); viewModel.ItemName.Should().Be(costItemCreateViewModel.ItemName); viewModel.CostType.CostTypeId.Should().Be(costItemCreateViewModel.CostTypeId); viewModel.Amount.Should().Be(costItemCreateViewModel.Amount); viewModel.DateUsed.Should().Be(costItemCreateViewModel.DateUsed); createdAtRouteResult.RouteName.Should().Be(nameof(controller.GetById)); createdAtRouteResult.RouteValues.First().Key.Should().Be("Id"); createdAtRouteResult.RouteValues.First().Value.Should().Be(viewModel.CostItemId); }
public void Should_have_error_when_ItemId_is_InValid() { var model = new CostItemCreateViewModel { CostItemId = Guid.Empty }; var result = validator.TestValidate(model); result.ShouldHaveValidationErrorFor(x => x.CostItemId).WhenErrorMessageContains($"must not be equal to '{Guid.Empty}'"); }
public void Should_have_error_when_Amount_is_Invalid() { var model = new CostItemCreateViewModel { Amount = 0.5m }; var result = validator.TestValidate(model); result.ShouldHaveValidationErrorFor(x => x.Amount).WhenErrorMessageContains("must be between 1 and 10000"); }
public void Should_have_error_when_DateUsed_is_InTheFuture() { var model = new CostItemCreateViewModel { DateUsed = DateTime.Now.AddDays(1) }; var result = validator.TestValidate(model); result.ShouldHaveValidationErrorFor(x => x.DateUsed).ContainsErrorMessage(nameof(CostItemCreateViewModel.DateUsed), "must be less than"); }
public void Should_have_error_when_properties_are_empty() { var model = new CostItemCreateViewModel(); var result = validator.TestValidate(model); result.ShouldHaveValidationErrorFor(x => x.ItemName); result.ShouldHaveValidationErrorFor(x => x.Amount); result.ShouldHaveValidationErrorFor(x => x.CostTypeId); result.ShouldHaveValidationErrorFor(x => x.DateUsed); }
public async Task Add_ShouldReturnNotFoundForNonExistingCostTypeId() { // arrange var costItem = costItemsFaker.Generate(); var costItemViewModel = new CostItemCreateViewModel { CostItemId = costItem.CostItemId, Amount = costItem.Amount, CostTypeId = Guid.NewGuid(), DateUsed = costItem.DateUsed, ItemName = costItem.ItemName }; // act var result = await controller.Add(costItemViewModel); // assert var notFoundObjectResult = result.Result.Should().BeOfType <NotFoundObjectResult>(); notFoundObjectResult.Subject.Value.ToString().Should().Contain("CostTypeId"); }