public async Task <IActionResult> Patch([FromBody] SaveAmountRecordRequest request) { var amountRecords = request.AmountRecords.Select(x => AmountRecord.Load(x.Id, x.Description, x.Amount)); SaveAmountRecordResult result = await _useCase.Execute <Income>(request.AccountId, request.Id, amountRecords); return(Ok(result)); }
public async Task Should_Add_Amount_Record_To_Expenses() { Guid accountId = Guid.NewGuid(); Guid expenseId = Guid.NewGuid(); AmountRecord[] amountRecords = new AmountRecord[] { new AmountRecord(700), new AmountRecord(300) }; Account account = AccountBuilder .New .WithId(accountId) .WithExpenses(expenseId, 700, 600, 500) .WithIncomes(5000m) .Build(); _accountReadOnlyRepository .Setup(x => x.Get(accountId)) .ReturnsAsync(account); _accountWriteOnlyRepository .Setup(x => x.Update(account, It.IsAny <IFinanceStatement>())); var result = await _saveAmountRecordUseCase.Execute <Expense>(accountId, expenseId, amountRecords); decimal expectedTotal = 1_000m; decimal expectedExpenseTotal = 2_100m; double expectedPercentage = 47.62; double expectedExpensePercentage = 42; Assert.Equal(expenseId, result.Id); Assert.Equal(expectedTotal, result.Total); Assert.Equal(expectedPercentage, Math.Round(result.Percentage * 100, 2)); Assert.Equal(expectedExpenseTotal, result.Expense.Total); Assert.Equal(expectedExpensePercentage, Math.Round(result.Expense.Percentage * 100, 2)); Assert.NotEmpty(result.AmountRecords); _accountReadOnlyRepository.Verify(x => x.Get(accountId), Times.Once); _accountWriteOnlyRepository.Verify(x => x.Update(account, It.IsAny <IFinanceStatement>()), Times.Once); }