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); }
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>(); }