Esempio n. 1
0
        public async Task CreateTokenTransactionAsync_WithTypeCharge_ShouldBeOfTypeValidationResult()
        {
            // Arrange
            var mockOptionsSnapshot = new Mock <IOptionsSnapshot <CashierApiOptions> >();

            var account      = new Account(new UserId());
            var tokenAccount = new TokenAccountDecorator(account);
            var transaction  = tokenAccount.Deposit(Token.TwoThousandFiveHundred);

            transaction.MarkAsSucceeded();

            TestMock.AccountRepository.Setup(accountRepository => accountRepository.CommitAsync(true, It.IsAny <CancellationToken>()))
            .Returns(Task.CompletedTask)
            .Verifiable();

            mockOptionsSnapshot.Setup(x => x.Value).Returns(new CashierApiOptions());

            var service = new AccountService(TestMock.AccountRepository.Object, mockOptionsSnapshot.Object);

            // Act
            var result = await service.CreateTransactionAsync(
                tokenAccount,
                Token.FiveHundred.Amount,
                CurrencyType.Token,
                TransactionType.Charge);

            // Assert
            result.Should().BeOfType <DomainValidationResult <ITransaction> >();

            TestMock.AccountRepository.Verify(accountRepository => accountRepository.CommitAsync(true, It.IsAny <CancellationToken>()), Times.Once);
        }
        public void Charge_WhenBalanceIsZero_ShouldThrowInvalidOperationException()
        {
            // Arrange
            var userId  = new UserId();
            var account = new Account(userId);
            var tokenAccountDecorator = new TokenAccountDecorator(account);

            // Act Assert
            var action = new Action(() => tokenAccountDecorator.Charge(new Token(100000)));

            action.Should().Throw <InvalidOperationException>();
        }
        public void Promotion_WhenEmptyTransaction_ShouldHaveTransactionCountOfOne()
        {
            // Arrange
            var userId  = new UserId();
            var account = new Account(userId);
            var tokenAccountDecorator = new TokenAccountDecorator(account);

            // Act
            tokenAccountDecorator.Promotion(new Token(100000));

            // Assert
            tokenAccountDecorator.Transactions.Count.Should().Be(1);
        }
Esempio n. 4
0
        public async Task DepositAsync_WithCurrencyTokenWithDepositPresent_ShouldBeOfTypeValidationResultWithErrors()
        {
            // Arrange
            var account      = new Account(new UserId());
            var tokenAccount = new TokenAccountDecorator(account);
            var transaction  = tokenAccount.Deposit(Token.FiveHundred);

            transaction.MarkAsSucceeded();

            var service = new AccountService(TestMock.AccountRepository.Object, TestValidator);

            // Act
            var result = await service.CreateTransactionAsync(
                tokenAccount,
                Token.FiveHundred.Amount,
                CurrencyType.Token,
                TransactionType.Deposit);

            // Assert
            result.Should().BeOfType <DomainValidationResult <ITransaction> >();

            result.Errors.Should().NotBeEmpty();
        }
        public void Deposit_WhenDepositRightBefore_ShouldThrowInvalidOperationException()
        {
            // Arrange
            var userId  = new UserId();
            var account = new Account(userId);
            var tokenAccountDecorator = new TokenAccountDecorator(account);

            var transaction = new Transaction(
                new Token(100000),
                new TransactionDescription("Test"),
                TransactionType.Deposit,
                new UtcNowDateTimeProvider());

            transaction.MarkAsSucceeded();

            tokenAccountDecorator.CreateTransaction(transaction);

            var token = new Token(50000);

            // Act Assert
            var action = new Action(() => tokenAccountDecorator.Deposit(token));

            action.Should().Throw <InvalidOperationException>();
        }