public async Task Integration_CreateNewPayment_ExpectPaymentInResultAndRepository() { Account newAccount = new Account { Name = "Test Account" }; _context.Accounts.Add(newAccount); _context.SaveChanges(); // 10 Deposits of 1000 for (int i = 0; i < 10; i++) { _context.Transactions.Add(new Transaction { AccountId = newAccount.Id, Amount = 1000, TransactionStatus = TransactionStatusEnum.Processed, TransactionType = TransactionTypeEnum.Deposit, Date = new DateTime(2020, 1, 1), CreationDate = new DateTime(2020, 1, 1), LastUpdateDate = new DateTime(2020, 1, 1) }); } _context.SaveChanges(); TransactionInsertDto payment = new TransactionInsertDto { AccountId = newAccount.Id, Amount = 1000, Date = new DateTime(2020, 1, 1) }; var content = JsonConvert.SerializeObject(payment); var stringContent = new StringContent(content, Encoding.UTF8, "application/json"); var response = await _client.PostAsync("/api/payment/create", stringContent); response.StatusCode.Should().Be(System.Net.HttpStatusCode.Created); var responseString = await response.Content.ReadAsStringAsync(); TransactionResultDto PaymentResult = JsonConvert.DeserializeObject <TransactionResultDto>(responseString); PaymentResult.Should().NotBeNull(); PaymentResult.AccountId.Should().Be(newAccount.Id); PaymentResult.Amount.Should().Be(payment.Amount); PaymentResult.Date.Should().Be((DateTime)payment.Date); PaymentResult.ClosedReason.Should().BeNull(); PaymentResult.TransactionStatus.Should().Be(TransactionStatusEnum.Pending.ToString()); Transaction PaymentFromDb = _context.Transactions.Find(PaymentResult.Id); PaymentFromDb.Should().NotBeNull(); PaymentFromDb.Amount.Should().Be(payment.Amount); PaymentFromDb.Date.Should().Be((DateTime)payment.Date); PaymentFromDb.Id.Should().Be(PaymentResult.Id); PaymentFromDb.TransactionStatus.Should().Be(TransactionStatusEnum.Pending); PaymentFromDb.TransactionType.Should().Be(TransactionTypeEnum.Withdrawal); }
public async Task Integration_CreateNewPayment_NoBalance_ExpectCreated_ButTransactionCreatedAndClosed() { Account newAccount = new Account { Name = "Test Account" }; _context.Accounts.Add(newAccount); _context.SaveChanges(); TransactionInsertDto payment = new TransactionInsertDto { AccountId = newAccount.Id, Date = new DateTime(2020, 1, 1), Amount = 1000 }; var content = JsonConvert.SerializeObject(payment); var stringContent = new StringContent(content, Encoding.UTF8, "application/json"); var response = await _client.PostAsync("/api/payment/create", stringContent); response.StatusCode.Should().Be(System.Net.HttpStatusCode.Created); var responseString = await response.Content.ReadAsStringAsync(); TransactionResultDto PaymentResult = JsonConvert.DeserializeObject <TransactionResultDto>(responseString); PaymentResult.Should().NotBeNull(); PaymentResult.AccountId.Should().Be(newAccount.Id); PaymentResult.Amount.Should().Be(payment.Amount); PaymentResult.Date.Should().Be((DateTime)payment.Date); PaymentResult.ClosedReason.Should().Be(Messages.Payment_NotEnoughFundsReason); PaymentResult.TransactionStatus.Should().Be(TransactionStatusEnum.Closed.ToString()); Transaction PaymentFromDb = _context.Transactions.Find(PaymentResult.Id); PaymentFromDb.Should().NotBeNull(); PaymentFromDb.Amount.Should().Be(payment.Amount); PaymentFromDb.Date.Should().Be((DateTime)payment.Date); PaymentFromDb.Id.Should().Be(PaymentResult.Id); PaymentFromDb.TransactionStatus.Should().Be(TransactionStatusEnum.Closed); PaymentFromDb.TransactionType.Should().Be(TransactionTypeEnum.Withdrawal); PaymentFromDb.ClosedReason.Should().Be(Messages.Payment_NotEnoughFundsReason); }
public async Task Integration_CreateNewDeposit_ExpectAccountInResultAndRepository() { Account newAccount = new Account { Name = "Test Account" }; _context.Accounts.Add(newAccount); _context.SaveChanges(); TransactionInsertDto deposit = new TransactionInsertDto { AccountId = newAccount.Id, Amount = 1000, Date = new DateTime(2020, 1, 1) }; var content = JsonConvert.SerializeObject(deposit); var stringContent = new StringContent(content, Encoding.UTF8, "application/json"); var response = await _client.PostAsync("/api/deposit/create", stringContent); response.StatusCode.Should().Be(System.Net.HttpStatusCode.Created); var responseString = await response.Content.ReadAsStringAsync(); TransactionResultDto depositResult = JsonConvert.DeserializeObject <TransactionResultDto>(responseString); depositResult.Should().NotBeNull(); depositResult.AccountId.Should().Be(newAccount.Id); Transaction depositFromDb = _context.Transactions.Find(depositResult.Id); depositFromDb.Should().NotBeNull(); depositFromDb.Amount.Should().Be(deposit.Amount); depositFromDb.Date.Should().Be((DateTime)deposit.Date); depositFromDb.Id.Should().Be(depositResult.Id); depositFromDb.TransactionStatus.Should().Be(TransactionStatusEnum.Processed); depositFromDb.TransactionType.Should().Be(TransactionTypeEnum.Deposit); }
public async Task <IActionResult> CreateNewPayment([FromBody] TransactionInsertDto objDto) { TransactionCreatorService creator = new TransactionCreatorService(_logger, _mapper, (int)objDto.AccountId, (decimal)objDto.Amount, (DateTime)objDto.Date, _accountRepo, _transRepo, TransactionStatusEnum.Pending, TransactionTypeEnum.Withdrawal, Messages.Payment_FailedToCreate); return(this.GetActionResultFromServiceResult(await creator.CreateTransaction())); }
public async Task Integration_CreateNewDeposit_EmptyOrNullFields_ExpectBadRequest(TransactionInsertDto objDto) { var content = JsonConvert.SerializeObject(objDto); var stringContent = new StringContent(content, Encoding.UTF8, "application/json"); var response = await _client.PostAsync("/api/deposit/create", stringContent); response.StatusCode.Should().Be(System.Net.HttpStatusCode.BadRequest); var responseString = await response.Content.ReadAsStringAsync(); responseString.Should().Contain("The AccountId field is required"); responseString.Should().Contain("The Amount field is required"); responseString.Should().Contain("The Date field is required"); }