public async Task TransferMoney_TransferConcurrentData_ReturnsBadRequest() { var isWithBadRequest = false; List <HttpResponseMessage> responses = new List <HttpResponseMessage>(); var sourceUser = new userForRegisterDTO() { Username = "******", FirstName = "sourceuser", LastName = "sourceuser", Password = "******", InitialBalance = 10 }; var destinationUser = new userForRegisterDTO() { Username = "******", FirstName = "destinationuser", LastName = "destinationuser", Password = "******", InitialBalance = 0 }; var sourceUserCreated = await CreateUser(sourceUser); var sourceUserID = await sourceUserCreated.Content.ReadAsAsync <Guid>(); var destinationUserCreated = await CreateUser(destinationUser); var destinationUserID = await destinationUserCreated.Content.ReadAsAsync <Guid>(); var transferMoney = new transferMoneyDTO() { SourceAccountID = sourceUserID, DestinationAccountID = destinationUserID, Amount = 1 }; List <Task> tasks = new List <Task>(); for (int i = 1; i <= 11; i++) { tasks.Add(Task.Run(() => { var response = TransferMoney(transferMoney); responses.Add(response.Result); })); } Task.WaitAll(tasks.ToArray()); foreach (HttpResponseMessage httpResponse in responses) { if (httpResponse.StatusCode == HttpStatusCode.BadRequest) { isWithBadRequest = true; } } Assert.That(isWithBadRequest, Is.EqualTo(true)); }
public async Task TransferMoney_TransferGreaterAmountThanYourBalance_ReturnsCannotTransferGreaterThanYourAmount() { //Arrange var expectedResult = "You cannot transfer money greater than your balance"; var sourceUser = new userForRegisterDTO() { Username = "******", FirstName = "sourceuser1", LastName = "sourceuser1", Password = "******", InitialBalance = 10 }; var destinationUser = new userForRegisterDTO() { Username = "******", FirstName = "destinationuser1", LastName = "destinationuser1", Password = "******", InitialBalance = 0 }; var sourceUserCreated = await CreateUser(sourceUser); var sourceUserID = await sourceUserCreated.Content.ReadAsAsync <Guid>(); var destinationUserCreated = await CreateUser(destinationUser); var destinationUserID = await destinationUserCreated.Content.ReadAsAsync <Guid>(); //await AuthenticateAsync(); //Act var transferMoney = new transferMoneyDTO() { SourceAccountID = sourceUserID, DestinationAccountID = destinationUserID, Amount = 11 }; var response = await TransferMoney(transferMoney); string responseMessage = response.Content.ReadAsStringAsync().Result; // Assert Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest)); Assert.That(expectedResult, Is.EqualTo(responseMessage)); }
public async Task <IActionResult> TransferMoney(transferMoneyDTO transfer) { if (transfer.SourceAccountID == transfer.DestinationAccountID) { return(BadRequest("You cannot transfer money to same account")); } if (!await _services.isAvailableToTransfer(transfer.SourceAccountID, transfer.Amount)) { return(BadRequest("You cannot transfer money greater than your balance")); } var newTransaction = await _services.TransferMoney(transfer.SourceAccountID, transfer.DestinationAccountID, transfer.Amount); if (newTransaction == null || newTransaction.Id == Guid.Empty) { return(BadRequest("Unavailable to process your transaction")); } return(Ok(newTransaction.Id)); }
public async Task TransferMoney_TransferToSameSourceAccountID_ReturnsCannotTransferToSameAccount() { //Arrange var expectedResult = "You cannot transfer money to same account"; var sourceUser = new userForRegisterDTO() { Username = "******", FirstName = "sourceuser2", LastName = "sourceuser2", Password = "******", InitialBalance = 10 }; var sourceUserCreated = await CreateUser(sourceUser); var sourceUserID = await sourceUserCreated.Content.ReadAsAsync <Guid>(); //await AuthenticateAsync(); //Act var transferMoney = new transferMoneyDTO() { SourceAccountID = sourceUserID, DestinationAccountID = sourceUserID, Amount = 10 }; var result = await TransferMoney(transferMoney); string responseMessage = result.Content.ReadAsStringAsync().Result; // Assert //result.Should().BeOfType<BadRequestResult>(); Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest)); Assert.That(expectedResult, Is.EqualTo(responseMessage)); }
protected async Task <HttpResponseMessage> TransferMoney(transferMoneyDTO transferMoney) { return(await TestClient.PostAsJsonAsync(ApiRoutes.User.TransferMoney, transferMoney)); }