public void PurchaseService_AddItemAsync_DeveAdicionarOsItensQuandoEmEstadoValido() { // Arange int totalItens = 5; Purchase purchase = PurchaseFaker.GenerateFaker().Generate(); IList <PurchaseItem> purchaseItens = PurchaseItemFaker.GenerateFaker(purchase).Generate(totalItens); ConfigureMock(); FactoryService(); // Act foreach (PurchaseItem purchaseItem in purchaseItens) { _purchaseService.AddItemAsync(purchase, purchaseItem); } // Assert purchase.Items.Should().HaveCount(totalItens); purchase.TotalValue.Should().Be(purchaseItens.Sum(x => x.CalculteValue())); _purchaseRepositoryMock.Verify(x => x.Update(It.IsAny <Purchase>()), Times.Exactly(totalItens)); _unitOfWork.Verify(x => x.CommitAsync(), Times.Exactly(totalItens)); _busHandlerMock.Verify(x => x.PublishDomainEvent(It.IsAny <PurchaseItemAdded>()), Times.Exactly(totalItens)); }
public async Task <ApplicationDataResult <PurchaseItemDto> > AddItemAsync(Guid purchaseId, AddOrUpdatePurchaseItemDto data) { ValidationResult validationResult = await _validatorPurchaseItem.ValidateAsync(data); if (validationResult.IsValid is false) { return(FactoryFromValidationResult <PurchaseItemDto>(validationResult)); } Purchase purchase = await _purchaseRepository.FindAsync(purchaseId); if (purchase is null) { throw ExceptionsFactory.FactoryNotFoundException <Purchase>(purchaseId); } Product product = await _productRepository.FindAsync(data.ProductId); if (product is null) { throw ExceptionsFactory.FactoryNotFoundException <Product>(purchaseId); } PurchaseItem purchaseItem = new(data.Amount, data.Value, purchase, product); await _purchaseService.AddItemAsync(purchase, purchaseItem); return(FactoryResultFromData(_mapper.Map <PurchaseItemDto>(purchaseItem))); }