コード例 #1
0
        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
            }));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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}'");
        }
コード例 #4
0
        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");
        }
コード例 #5
0
        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");
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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");
        }