public async Task Handler_GivenValidRequest_ShouldStorePaymentDetails() { // Arrange var paymentId = Guid.NewGuid(); var bankClientMock = new Mock <IBankClient>(); bankClientMock.Setup(x => x.ProcessPayment(It.IsAny <int>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <decimal>(), It.IsAny <string>())) .Returns(new PaymentResult { Status = "Success", PaymentId = paymentId }); var bankClientFactoryMock = new Mock <IBankClientFactory>(); bankClientFactoryMock.Setup(x => x.Create(It.IsAny <string>())) .Returns(bankClientMock.Object); var sut = new CreatePaymentCommand.Handler(DbContext, bankClientFactoryMock.Object); // Act await sut.Handle(Command, CancellationToken.None); // Assert var entity = await DbContext.Payments.SingleOrDefaultAsync(x => x.Id == paymentId); entity.ShouldNotBeNull(); }
public async Task Handler_GivenValidRequest_ShouldUseBankClientToProcessPayment() { // Arrange var bankClientMock = new Mock <IBankClient>(); bankClientMock.Setup(x => x.ProcessPayment(It.IsAny <int>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <decimal>(), It.IsAny <string>())) .Returns(new PaymentResult { Status = "Success", PaymentId = Guid.NewGuid() }); var bankClientFactoryMock = new Mock <IBankClientFactory>(); bankClientFactoryMock.Setup(x => x.Create(It.IsAny <string>())) .Returns(bankClientMock.Object); var sut = new CreatePaymentCommand.Handler(DbContext, bankClientFactoryMock.Object); // Act await sut.Handle(Command, CancellationToken.None); // Assert bankClientMock.Verify(x => x.ProcessPayment(It.IsAny <int>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <decimal>(), It.IsAny <string>()), Times.Once); }
public async Task Handler_WhenBankReturnsError_ShouldRaisePaymentNotAcceptedException() { // Arrange var bankClientMock = new Mock <IBankClient>(); bankClientMock.Setup(x => x.ProcessPayment(It.IsAny <int>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <decimal>(), It.IsAny <string>())) .Returns(new PaymentResult { Status = "Card number invalid" }); var bankClientFactoryMock = new Mock <IBankClientFactory>(); bankClientFactoryMock.Setup(x => x.Create(It.IsAny <string>())) .Returns(bankClientMock.Object); var sut = new CreatePaymentCommand.Handler(DbContext, bankClientFactoryMock.Object); // Act & Assert await Should.ThrowAsync <PaymentNotAcceptedException>(() => sut.Handle(Command, CancellationToken.None)); }
public async Task CreatePayment_GivenValidInput_ShouldSaveAPayment() { var command = new CreatePaymentCommand { MerchantId = 1, CardHolderName = "Jake Ryu", CardNumber = "1111-2222-3333-4444", CardExpiryDate = "05/24", Cvv = "978", Amount = 150 }; var sut = new CreatePaymentCommand.Handler(Context); await sut.Handle(command, CancellationToken.None); var payment = await Context.Payments.FirstAsync(); payment.MerchantId.Should().Be(1); payment.CardHolderName.Should().Be("Jake Ryu"); payment.CardNumber.OriginalValue.Should().Be("1111-2222-3333-4444"); payment.CardExpiryDate.Value.Should().Be(new DateTime(2024, 5, 31)); payment.Cvv.Should().Be("978"); payment.Amount.Should().Be(150); }