public async Task <MovimentationOutputModel> Post([FromBody] MovimentationInputModel movimentationInputModel, CancellationToken cancellationToken) { movimentationInputModel.UserId = HttpContext.GetLoggedUserId(); var result = await movimentationService.AddMovimentation(movimentationInputModel, cancellationToken); return(result); }
public async Task MovimentationModelIsValid_MovimentationHasBeenInsertedAndInventoryUpdated_ReturnsMovimentationOutputAsResultMessage() { //arrange var product = new Product("Skol lata", 2.39M); var user = new User("Vinicius Santana", "11155863437", new Credentials()); var movimentation = new Movimentation(MovimentationType.Buy, 100, product, user); var movimentationInput = new MovimentationInputModel(Guid.NewGuid(), MovimentationType.Buy, 100, 2.39M) { UserId = Guid.NewGuid() }; var movimentationOutput = new MovimentationOutputModel(Guid.NewGuid(), 100) { User = "******", Product = "Skol lata", Type = "Cerveja" }; var inventory = new Inventory(product, 100); var mockInventoryService = new Mock <IInventoryService>(); mockInventoryService.Setup(x => x.UpdateInventory(It.IsAny <MovimentationInputModel>(), It.IsAny <CancellationToken>())).Returns(Task.CompletedTask); var mockMovimentationRepository = new Mock <IMovimentationRepository>(); mockMovimentationRepository.Setup(x => x.Add(It.IsAny <Movimentation>(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(movimentation)); var mockProductRepository = new Mock <IProductRepository>(); mockProductRepository.Setup(x => x.Get(It.IsAny <Expression <Func <Product, bool> > >(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(product)); var mockUserRepository = new Mock <IUserRepository>(); mockUserRepository.Setup(x => x.Get(It.IsAny <Expression <Func <User, bool> > >(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(user)); var mockMapper = new Mock <IMapper>(); mockMapper.Setup(x => x.Map <Movimentation>(It.IsAny <MovimentationInputModel>())).Returns(movimentation); mockMapper.Setup(x => x.Map <MovimentationOutputModel>(It.IsAny <Movimentation>())).Returns(movimentationOutput); var inventoryService = new MovimentationService(mockProductRepository.Object, mockUserRepository.Object, mockMovimentationRepository.Object, mockInventoryService.Object, mockMapper.Object); //act var result = await inventoryService.AddMovimentation(movimentationInput, new CancellationToken()); //assert Assert.NotNull(result); Assert.Equal(result.Quantity, movimentationOutput.Quantity); Assert.Equal(result.Product, movimentationOutput.Product); Assert.Equal(result.User, movimentationOutput.User); }
public async Task <MovimentationOutputModel> AddMovimentation(MovimentationInputModel movimentationModel, CancellationToken cancellationToken) { var movimentation = mapper.Map <Movimentation>(movimentationModel); movimentation.Product = await productRepository.Get(e => e.Id.Equals(movimentationModel.ProductId), cancellationToken); movimentation.User = await userRepository.Get(e => e.Id.Equals(movimentationModel.UserId), cancellationToken); await inventoryService.UpdateInventory(movimentationModel, cancellationToken); var result = await movimentationRepository.Add(movimentation, cancellationToken); return(mapper.Map <MovimentationOutputModel>(result)); }
public async Task UpdateInventory(MovimentationInputModel movimentationModel, CancellationToken cancellationToken) { var quantity = 0; var inventory = await inventoryRepository.Get(e => e.Product.Id.Equals(movimentationModel.ProductId), cancellationToken) ?? throw new NotFoundException("Não foi possível encontrar o estoque do produto informado!"); if (movimentationModel.Type.Equals(MovimentationType.Buy)) { quantity = inventory.Quantity + movimentationModel.Quantity; } else { quantity = inventory.Quantity - movimentationModel.Quantity; } inventory.ChangeQuantity(quantity); await inventoryRepository.Update(inventory, cancellationToken); }