public void GivenPaymentRepositoryThrowsAPaymentRepositoryException_WhenTryingToGetThePaymentRecord_ThenItReturnsABadRequestResponse() { // Given var mockedLogger = Substitute.For <ILogger <PaymentRetrievalController> >(); var mockedPaymentRepository = Substitute.For <IPaymentRepository>(); var realPaymentRetrievalController = new PaymentRetrievalController(mockedLogger, mockedPaymentRepository); var exception = new PaymentRepositoryException("Test"); mockedPaymentRepository .Get(Arg.Any <Guid>()) .Throws(exception); // When var response = realPaymentRetrievalController.Get(Guid.NewGuid().ToString()).GetAwaiter().GetResult(); // Then response.Should().NotBeNull(); response.Should().BeOfType <BadRequestObjectResult>(); response.As <BadRequestObjectResult>().Value.As <PaymentRetrievalFailedResponse>().Success.Should().BeFalse(); response.As <BadRequestObjectResult>().Value.As <PaymentRetrievalFailedResponse>().Message.Should().Be($"An error has occurred when getting the payment record. Details: {exception.Message}"); mockedPaymentRepository.Received(1).Get(Arg.Any <Guid>()); }
public void GivenAPaymentRepositoryExceptionIsThrown_WhenHandlingIt_ThenItReturnsAPaymentProcessingException() { // Given var mockedLogger = Substitute.For <ILogger <PaymentHandler> >(); var mockedBankingHandler = Substitute.For <IBankingHandler>(); var mockedPaymentRepository = Substitute.For <IPaymentRepository>(); var realPaymentHandler = new PaymentHandler(mockedLogger, mockedBankingHandler, mockedPaymentRepository); var request = new PaymentProcessingRequest(); var exception = new PaymentRepositoryException("test"); mockedPaymentRepository .Upsert(Arg.Any <PaymentRecord>()) .Throws(exception); // When var response = Assert.Throws <PaymentProcessingException>(() => realPaymentHandler.Handle(request).GetAwaiter().GetResult()); // Then response.Should().NotBeNull(); response.Should().BeOfType <PaymentProcessingException>(); response.Message.Should().Be($"There was an issue when saving the request. Details: {exception.Message}"); mockedPaymentRepository.Received(1).Upsert(Arg.Any <PaymentRecord>()); mockedBankingHandler.Received(0).Handle(request); }