示例#1
0
        public async Task RegisterCustomerAsync_requests_proper_api()
        {
            // arrange
            var aRequest = new CustomerRegistration
            {
                AuthenticationNumber = "123456",
                CardNumber           = "1234-1234-1234-1234",
                Expiry          = "2200-12",
                Id              = Guid.NewGuid().ToString(),
                PartialPassword = "******",
            };
            var expectedResult = new IamportResponse <Customer>
            {
                HttpStatusCode = HttpStatusCode.OK,
                Content        = new Customer
                {
                    Id           = aRequest.Id,
                    InsertedTime = DateTime.UtcNow,
                }
            };
            var client = GetMockClient(aRequest, expectedResult);
            var sut    = new SubscribeApi(client);

            // act
            var result = await sut.RegisterCustomerAsync(aRequest);

            // assert
            Mock.Get(client)
            .Verify(mocked =>
                    mocked.RequestAsync <CustomerRegistration, Customer>(
                        It.Is <IamportRequest <CustomerRegistration> >(req =>
                                                                       req.Method == HttpMethod.Post &&
                                                                       req.Content == aRequest &&
                                                                       req.ApiPathAndQueryString.EndsWith($"subscribe/customers/{aRequest.Id}"))));
        }
示例#2
0
        public async Task DoDirectPaymentAsync_by_customerId_requests_proper_api()
        {
            // arrange
            var aRequest = new CustomerDirectPaymentRequest
            {
                Amount        = 1024,
                TransactionId = Guid.NewGuid().ToString(),
                CustomerId    = Guid.NewGuid().ToString(),
            };
            var expectedResult = new IamportResponse <Payment>
            {
                HttpStatusCode = HttpStatusCode.OK,
                Content        = new Payment
                {
                    TransactionId = aRequest.TransactionId,
                    Amount        = aRequest.Amount,
                }
            };
            var client = GetMockClient(aRequest, expectedResult);
            var sut    = new SubscribeApi(client);

            // act
            var result = await sut.DoDirectPaymentAsync(aRequest);

            // assert
            Mock.Get(client)
            .Verify(mocked =>
                    mocked.RequestAsync <CustomerDirectPaymentRequest, Payment>(
                        It.Is <IamportRequest <CustomerDirectPaymentRequest> >(req =>
                                                                               req.Method == HttpMethod.Post &&
                                                                               req.Content == aRequest &&
                                                                               req.ApiPathAndQueryString.EndsWith($"subscribe/payments/again"))));
        }
示例#3
0
        public async Task UnschedulePaymentsAsync_requests_proper_api()
        {
            // arrange
            var aRequest = new UnschedulePaymentsRequest
            {
                CustomerId     = Guid.NewGuid().ToString(),
                TransactionIds = new string[]
                {
                    Guid.NewGuid().ToString(),
                Guid.NewGuid().ToString()
                },
            };
            var expectedResult = new IamportResponse <ScheduledPayment[]>
            {
                HttpStatusCode = HttpStatusCode.OK,
                Content        = new ScheduledPayment[] { }
            };
            var client = GetMockClient(aRequest, expectedResult);
            var sut    = new SubscribeApi(client);

            // act
            var result = await sut.UnschedulePaymentsAsync(aRequest);

            // assert
            Mock.Get(client)
            .Verify(mocked =>
                    mocked.RequestAsync <UnschedulePaymentsRequest, ScheduledPayment[]>(
                        It.Is <IamportRequest <UnschedulePaymentsRequest> >(req =>
                                                                            req.Method == HttpMethod.Post &&
                                                                            req.Content == aRequest &&
                                                                            req.ApiPathAndQueryString.EndsWith($"subscribe/payments/unschedule"))));
        }
示例#4
0
        public async Task PreparationAsync_requests_proper_uri()
        {
            // arrange
            var expectedRequest = new PaymentPreparation
            {
                Amount        = 1000,
                TransactionId = Guid.NewGuid().ToString(),
            };
            var expectedResult = new IamportResponse <PaymentPreparation>
            {
                HttpStatusCode = HttpStatusCode.OK,
                Content        = new PaymentPreparation
                {
                    TransactionId = expectedRequest.TransactionId,
                    Amount        = expectedRequest.Amount,
                }
            };
            var expectedPath = $"payments/prepare";
            var client       = GetMockClient(expectedRequest, expectedResult);
            var sut          = new PaymentsApi(client);

            // act
            var result = await sut.PrepareAsync(expectedRequest);

            // assert
            Mock.Get(client)
            .Verify(mocked =>
                    mocked.RequestAsync <PaymentPreparation, PaymentPreparation>(
                        It.Is <IamportRequest <PaymentPreparation> >(req =>
                                                                     req.ApiPathAndQueryString.EndsWith(expectedPath))));
        }
示例#5
0
        public async Task DeleteCustomerAsync_requests_proper_api()
        {
            // arrange
            var customerId     = Guid.NewGuid().ToString();
            var expectedResult = new IamportResponse <Customer>
            {
                HttpStatusCode = HttpStatusCode.OK,
                Content        = new Customer
                {
                    Id           = customerId,
                    InsertedTime = DateTime.UtcNow,
                }
            };
            var client = GetMockClient(expectedResult);
            var sut    = new SubscribeApi(client);

            // act
            var result = await sut.DeleteCustomerAsync(customerId);

            // assert
            Mock.Get(client)
            .Verify(mocked =>
                    mocked.RequestAsync <object, Customer>(
                        It.Is <IamportRequest>(req =>
                                               req.Method == HttpMethod.Delete &&
                                               req.Content == null &&
                                               req.ApiPathAndQueryString.EndsWith($"subscribe/customers/{customerId}"))));
        }
示例#6
0
        public async Task GetAsync_requests_proper_uri(PaymentQueryState state, int page, string expectedPath)
        {
            // arrange
            var expectedRequest = new PaymentPageQuery
            {
                State = state,
                Page  = page,
            };
            var expectedResult = new IamportResponse <PagedResult <Payment> >
            {
                HttpStatusCode = HttpStatusCode.OK,
            };
            var client = GetMockClient(expectedResult);
            var sut    = new PaymentsApi(client);

            // act
            var result = await sut.GetAsync(expectedRequest);

            // assert
            Mock.Get(client)
            .Verify(mocked =>
                    mocked.RequestAsync <object, PagedResult <Payment> >(
                        It.Is <IamportRequest>(req =>
                                               req.ApiPathAndQueryString.EndsWith(expectedPath))));
        }
示例#7
0
        public async Task CancelAsync_requests_proper_uri()
        {
            // arrange
            var expectedRequest = new PaymentCancellation
            {
                IamportId = Guid.NewGuid().ToString(),
            };
            var expectedResult = new IamportResponse <Payment>
            {
                HttpStatusCode = HttpStatusCode.OK,
                Content        = new Payment
                {
                    IamportId = expectedRequest.IamportId,
                }
            };
            var client = GetMockClient(expectedRequest, expectedResult);
            var sut    = new PaymentsApi(client);

            // act
            var result = await sut.CancelAsync(expectedRequest);

            // assert
            Mock.Get(client)
            .Verify(mocked =>
                    mocked.RequestAsync <PaymentCancellation, Payment>(
                        It.Is <IamportRequest <PaymentCancellation> >(req =>
                                                                      req.ApiPathAndQueryString.EndsWith("payments/cancel"))));
        }
示例#8
0
        public async Task SchedulePaymentsAsync_requests_proper_api()
        {
            // arrange
            var aRequest = new SchedulePaymentsRequest
            {
                CustomerId = Guid.NewGuid().ToString(),
                Schedules  = new PaymentSchedule[]
                {
                    new PaymentSchedule
                    {
                        Amount        = 1024,
                        ScheduleAt    = DateTime.UtcNow.AddDays(30),
                        TransactionId = Guid.NewGuid().ToString(),
                    },
                    new PaymentSchedule
                    {
                        Amount        = 1024,
                        ScheduleAt    = DateTime.UtcNow.AddDays(60),
                        TransactionId = Guid.NewGuid().ToString(),
                    },
                }
            };
            var expectedResult = new IamportResponse <ScheduledPayment[]>
            {
                HttpStatusCode = HttpStatusCode.OK,
                Content        = new ScheduledPayment[]
                {
                    new ScheduledPayment
                    {
                        TransactionId = aRequest.Schedules[0].TransactionId,
                        Amount        = aRequest.Schedules[0].Amount,
                        ScheduleAt    = aRequest.Schedules[0].ScheduleAt,
                    },
                    new ScheduledPayment
                    {
                        TransactionId = aRequest.Schedules[1].TransactionId,
                        Amount        = aRequest.Schedules[1].Amount,
                        ScheduleAt    = aRequest.Schedules[1].ScheduleAt,
                    },
                }
            };
            var client = GetMockClient(aRequest, expectedResult);
            var sut    = new SubscribeApi(client);

            // act
            var result = await sut.SchedulePaymentsAsync(aRequest);

            // assert
            Mock.Get(client)
            .Verify(mocked =>
                    mocked.RequestAsync <SchedulePaymentsRequest, ScheduledPayment[]>(
                        It.Is <IamportRequest <SchedulePaymentsRequest> >(req =>
                                                                          req.Method == HttpMethod.Post &&
                                                                          req.Content == aRequest &&
                                                                          req.ApiPathAndQueryString.EndsWith($"subscribe/payments/schedule"))));
        }
 private IIamportClient GetMockClient<TResult>(
     IamportResponse<TResult> expectedResponse)
 {
     var mock = new Mock<IIamportClient>();
     mock.Setup(client =>
         client.RequestAsync<object, TResult>(
             It.IsNotNull<IamportRequest>()))
     .ReturnsAsync(expectedResponse);
     return mock.Object;
 }
 private IIamportClient GetMockClient<TRequestContent, TResult>(
     TRequestContent expectedContent,
     IamportResponse<TResult> expectedResponse)
 {
     var mock = new Mock<IIamportClient>();
     mock.Setup(client =>
         client.RequestAsync<TRequestContent, TResult>(
             It.Is<IamportRequest<TRequestContent>>(
                 request => request.Content.Equals(expectedContent))))
     .ReturnsAsync(expectedResponse);
     return mock.Object;
 }
示例#11
0
        public async Task PreparationAsync_throws_ValidationException(decimal amount, string transactionId)
        {
            // arrange
            var expectedRequest = new PaymentPreparation
            {
                Amount        = amount,
                TransactionId = transactionId,
            };
            var expectedResult = new IamportResponse <PaymentPreparation>();
            var client         = GetMockClient(expectedRequest, expectedResult);
            var sut            = new PaymentsApi(client);

            // act/assert
            await Assert.ThrowsAsync <ValidationException>(
                () => sut.PrepareAsync(expectedRequest));
        }
示例#12
0
        public async Task CancelAsync_throws_ValidationException(string iamportId, string transactionId)
        {
            // arrange
            var expectedRequest = new PaymentCancellation
            {
                IamportId     = iamportId,
                TransactionId = transactionId,
            };
            var expectedResult = new IamportResponse <Payment>();
            var client         = GetMockClient(expectedRequest, expectedResult);
            var sut            = new PaymentsApi(client);

            // act/assert
            await Assert.ThrowsAsync <ValidationException>(
                () => sut.CancelAsync(expectedRequest));
        }
示例#13
0
        public async Task GetPreparationAsync_throws_IamportResponseException_when_response_code_is_not_success()
        {
            // arrange
            var expectedRequest = Guid.NewGuid().ToString();
            var expectedResult  = new IamportResponse <PaymentPreparation>
            {
                Code           = -1,
                HttpStatusCode = HttpStatusCode.InternalServerError,
            };
            var client = GetMockClient(expectedResult);
            var sut    = new PaymentsApi(client);

            // act/assert
            await Assert.ThrowsAsync <IamportResponseException>(
                () => sut.GetPreparationAsync(expectedRequest));
        }
示例#14
0
        public async Task CancelAsync_doesnt_accept_longer_than_4characters_of_RefundAccountBank()
        {
            // arrange
            var expectedRequest = new PaymentCancellation
            {
                IamportId         = Guid.NewGuid().ToString(),
                RefundAccountBank = "ABCDE",
            };
            var expectedResult = new IamportResponse <Payment>
            {
                Code           = -1,
                HttpStatusCode = HttpStatusCode.InternalServerError,
            };
            var client = GetMockClient(expectedRequest, expectedResult);
            var sut    = new PaymentsApi(client);

            // act/assert
            await Assert.ThrowsAsync <ValidationException>(
                () => sut.CancelAsync(expectedRequest));
        }
示例#15
0
        public async Task GetByTransactionIdAsync_requests_proper_uri(string transactionId)
        {
            // arrange
            var expectedResult = new IamportResponse <Payment>
            {
                HttpStatusCode = HttpStatusCode.OK,
            };
            var expectedPath = $"payments/find/{WebUtility.UrlEncode(transactionId)}";
            var client       = GetMockClient(expectedResult);
            var sut          = new PaymentsApi(client);

            // act
            var result = await sut.GetByTransactionIdAsync(transactionId);

            // assert
            Mock.Get(client)
            .Verify(mocked =>
                    mocked.RequestAsync <object, Payment>(
                        It.Is <IamportRequest>(req =>
                                               req.ApiPathAndQueryString.EndsWith(expectedPath))));
        }
示例#16
0
        public async Task GetPreparationAsync_requests_proper_uri()
        {
            // arrange
            var expectedRequest = Guid.NewGuid().ToString();
            var expectedResult  = new IamportResponse <PaymentPreparation>
            {
                HttpStatusCode = HttpStatusCode.OK,
            };
            var expectedPath = $"payments/prepare/{expectedRequest}";
            var client       = GetMockClient(expectedResult);
            var sut          = new PaymentsApi(client);

            // act
            var result = await sut.GetPreparationAsync(expectedRequest);

            // assert
            Mock.Get(client)
            .Verify(mocked =>
                    mocked.RequestAsync <object, PaymentPreparation>(
                        It.Is <IamportRequest>(req =>
                                               req.ApiPathAndQueryString.EndsWith(expectedPath))));
        }
示例#17
0
        public async Task DoDirectPaymentAsync_requests_proper_api()
        {
            // arrange
            var aRequest = new DirectPaymentRequest
            {
                Amount               = 1024,
                TransactionId        = Guid.NewGuid().ToString(),
                AuthenticationNumber = "123456",
                CardNumber           = "1234-1234-1234-1234",
                Expiry               = "2200-12",
                PartialPassword      = "******",
            };
            var expectedResult = new IamportResponse <Payment>
            {
                HttpStatusCode = HttpStatusCode.OK,
                Content        = new Payment
                {
                    TransactionId = aRequest.TransactionId,
                    Amount        = aRequest.Amount,
                }
            };
            var client = GetMockClient(aRequest, expectedResult);
            var sut    = new SubscribeApi(client);

            // act
            var result = await sut.DoDirectPaymentAsync(aRequest);

            // assert
            Mock.Get(client)
            .Verify(mocked =>
                    mocked.RequestAsync <DirectPaymentRequest, Payment>(
                        It.Is <IamportRequest <DirectPaymentRequest> >(req =>
                                                                       req.Method == HttpMethod.Post &&
                                                                       req.Content == aRequest &&
                                                                       req.ApiPathAndQueryString.EndsWith($"subscribe/payments/onetime"))));
        }