コード例 #1
0
        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);
        }
コード例 #2
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));
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }