public async Task WithdrawByIdAsync_ShouldReturnView() { // Arrange var card = SampleData.CREDITCARDS.First(); int cardId = card.Id; decimal amount = card.Balance; var expectedView = new WithdrawalResultViewModel { Number = card.Number, RemainingBalance = 0, WithdrawalAmount = amount }; int actionResultCalls = 0; int editCalls = 0; var loggerMock = GetActionRepoMock(() => { actionResultCalls++; }); var cardRepoMock = GetCardRepoMock(); cardRepoMock.Setup(p => p.EditAsync(It.IsAny <CreditCard>())).Callback(() => { editCalls++; }); var terminalService = new TerminalService(cardRepoMock.Object, loggerMock.Object, null); // Act var result = await terminalService.WithdrawByIdAsync(cardId, amount); // Assert Assert.Equal(expectedView.Number, result.Number); Assert.Equal(expectedView.RemainingBalance, result.RemainingBalance); Assert.Equal(expectedView.WithdrawalAmount, result.WithdrawalAmount); Assert.True(actionResultCalls > 0); Assert.True(editCalls > 0); }
public async Task <IActionResult> Withdraw(decimal withdrawalAmount) { int cardId = _sessionManager.GetSessionCardId(HttpContext).Value; var result = await _terminalService.WithdrawByIdAsync(cardId, withdrawalAmount); return(RedirectToAction(nameof(WithdrawalResult), result)); }
public async Task WithdrawByIdAsync_ShouldThrowArgNullEx() { // Arrange int? cardId = new int?(); decimal amount = 1.00M; var terminalService = new TerminalService(GetCardRepoMock().Object, null, null); // Act Func <Task> action = async() => await terminalService.WithdrawByIdAsync(cardId, amount); // Assert Exception ex = await Assert.ThrowsAsync <ArgumentNullException>(action); }
public async Task WithdrawByIdAsync_ShouldThrowInvalOpEx() { // Arrange int cardId = SampleData.CREDITCARDS.First(c => !c.IsValid).Id; decimal amount = 1.00M; var terminalService = new TerminalService(GetCardRepoMock().Object, null, null); // Act Func <Task> action = async() => await terminalService.WithdrawByIdAsync(cardId, amount); // Assert Exception ex = await Assert.ThrowsAsync <InvalidOperationException>(action); Assert.Equal("Card is invalid", ex.Message); }
public async Task WithdrawByIdAsync_ShouldThrowArgEx() { // Arrange int cardId = SampleData.CARD_NOT_ON_THE_LIST.Id; decimal amount = 1.00M; var terminalService = new TerminalService(GetCardRepoMock().Object, null, null); // Act Func <Task> action = async() => await terminalService.WithdrawByIdAsync(cardId, amount); // Assert Exception ex = await Assert.ThrowsAsync <ArgumentException>(action); Assert.Equal("Card with this ID doesn't exist", ex.Message); }
public async Task WithdrawByIdAsync_ShouldThrowInvalOpEx_InsufficientFunds() { // Arrange var card = SampleData.CREDITCARDS.First(c => c.IsValid); int cardId = card.Id; decimal amount = card.Balance + 1M; var terminalService = new TerminalService(GetCardRepoMock().Object, null, null); // Act Func <Task> action = async() => await terminalService.WithdrawByIdAsync(cardId, amount); // Assert Exception ex = await Assert.ThrowsAsync <InvalidOperationException>(action); Assert.Equal("Insufficient funds", ex.Message); }