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>());
        }
예제 #2
0
        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);
        }