public async Task Process_ShouldReturn200StatusCode_WhenPaymentIsSuccessfullyProcessed()
        {
            await StubAdminClient.ResetRequestsAsync();

            var response = await paymentClient.Process(new Payment
            {
                CardNumber  = "1234-1234-1234-1234",
                Amount      = 1000m,
                Currency    = "GBP",
                Cvv         = "123",
                ExpiryMonth = "Dec",
                ExpiryYear  = "2022"
            });

            var result       = (await response.EnsureSuccessStatusCodeAsync()).Content;
            var requestsMade = await StubAdminClient.GetRequestsAsync();

            result.ShouldNotBeNull();
            result.TransactionId.ShouldNotBeNull();
            result.Status.ShouldNotBeNull();
            result.Reason.ShouldBeNull();

            requestsMade
            .Count(x => x.Request.AbsolutePath == "/payment" && x.Response.StatusCode.Equals(200L))
            .ShouldBe(1);
        }
        public async Task MakingTwoApiRequests_GetsTokenOnlyOnce_WhenTokenIsNotExpired()
        {
            await StubAdminClient.PutMappingAsync(Guid.Parse("425db3ef-06ca-4a69-b5c9-a9384cabc34e"), GetAuthMapping());

            await StubAdminClient.ResetRequestsAsync();

            await bankClient.Payment.Process(payment);

            var requestsMade = await StubAdminClient.GetRequestsAsync();

            requestsMade.Count(r => r.Request.AbsolutePath == TokenPath && r.Response.StatusCode.Equals(200L))
            .ShouldBe(1);
        }
        public async Task Process_ShouldReturn400StatusCode_WhenPaymentProcessHasFailed()
        {
            await StubAdminClient.ResetRequestsAsync();

            var response = await paymentClient.Process(new Payment
            {
                CardNumber  = "9999-9999-9999-9999",
                Amount      = 1000m,
                Currency    = "GBP",
                Cvv         = "123",
                ExpiryMonth = "Dec",
                ExpiryYear  = "2022"
            }).ShouldThrowAsync <BankApiHttpException>();
        }
        public async Task MakingTwoApiRequests_GetsNewToken_WhenTokenIsExpired()
        {
            await StubAdminClient.ResetRequestsAsync();

            payment = new Payment
            {
                CardNumber  = "1234-1234-1234-1234",
                Amount      = 1000m,
                Currency    = "GBP",
                Cvv         = "123",
                ExpiryMonth = "Dec",
                ExpiryYear  = "2022"
            };

            await bankClient.Payment.Process(payment);

            await bankClient.Payment.Process(payment);

            var requestsMade = await StubAdminClient.GetRequestsAsync();

            requestsMade.Count(x => x.Request.AbsolutePath == TokenPath &&
                               x.Response.StatusCode.Equals(200L))
            .ShouldBe(2);
        }