public static async Task PublishUserStripePaymentIntentPaymentFailedIntegrationEventAsync( this IServiceBusPublisher publisher, UserId userId, TransactionId transactionId ) { var integrationEvent = new UserStripePaymentIntentPaymentFailedIntegrationEvent { UserId = userId, TransactionId = transactionId }; await publisher.PublishAsync(integrationEvent); }
public async Task HandleAsync_WhenUserDepositFailedIntegrationEventIsValid_ShouldBeCompletedTask() { // Arrange var userId = new UserId(); var account = new MoneyAccountDecorator(new Account(userId, new List <Transaction>())); var transaction = account.Deposit(Money.OneHundred); transaction.MarkAsFailed(); var mockLogger = new MockLogger <UserStripePaymentIntentPaymentFailedIntegrationEventHandler>(); TestMock.AccountService.Setup(accountRepository => accountRepository.AccountExistsAsync(userId)).ReturnsAsync(true).Verifiable(); TestMock.AccountService.Setup(accountRepository => accountRepository.FindAccountAsync(userId)).ReturnsAsync(account).Verifiable(); TestMock.AccountService .Setup(accountService => accountService.MarkAccountTransactionAsFailedAsync(account, transaction.Id, It.IsAny <CancellationToken>())) .ReturnsAsync(account.Transactions.First().Cast <Transaction>()) .Verifiable(); var handler = new UserStripePaymentIntentPaymentFailedIntegrationEventHandler( TestMock.AccountService.Object, TestMapper, TestMock.ServiceBusPublisher.Object, mockLogger.Object); var integrationEvent = new UserStripePaymentIntentPaymentFailedIntegrationEvent { UserId = userId, TransactionId = transaction.Id }; // Act await handler.HandleAsync(integrationEvent); // Assert TestMock.AccountService.Verify(accountRepository => accountRepository.AccountExistsAsync(userId), Times.Once); TestMock.AccountService.Verify(accountRepository => accountRepository.FindAccountAsync(userId), Times.Once); TestMock.AccountService.Verify( accountService => accountService.MarkAccountTransactionAsFailedAsync(account, transaction.Id, It.IsAny <CancellationToken>()), Times.Once); mockLogger.Verify(Times.Once()); }