コード例 #1
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"))));
        }
コード例 #2
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}"))));
        }
コード例 #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 DoDirectPaymentAsync_throws_ValidationException(
            decimal amount,
            string transactionId,
            string cardNumber,
            string expiry,
            string authentication,
            string partialPassword)
        {
            // arrange
            var aRequest = new DirectPaymentRequest
            {
                Amount               = amount,
                TransactionId        = transactionId,
                AuthenticationNumber = authentication,
                CardNumber           = cardNumber,
                Expiry               = expiry,
                PartialPassword      = partialPassword,
            };
            var client = Mock.Of <IIamportClient>();
            var sut    = new SubscribeApi(client);

            // act/assert
            await Assert.ThrowsAsync <ValidationException>(
                () => sut.DoDirectPaymentAsync(aRequest));
        }
コード例 #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 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"))));
        }
コード例 #7
0
        public async Task DoDirectPaymentAsync_by_customerId_throws_ValidationException(
            decimal amount,
            string transactionId,
            string customerId)
        {
            // arrange
            var aRequest = new CustomerDirectPaymentRequest
            {
                Amount        = amount,
                TransactionId = transactionId,
                CustomerId    = customerId,
            };
            var client = Mock.Of <IIamportClient>();
            var sut    = new SubscribeApi(client);

            // act/assert
            await Assert.ThrowsAsync <ValidationException>(
                () => sut.DoDirectPaymentAsync(aRequest));
        }
コード例 #8
0
        public async Task RegisterCustomerAsync_throws_ValidationException(
            string id,
            string cardNumber,
            string expiry,
            string authentication,
            string partialPassword)
        {
            // arrange
            var aRequest = new CustomerRegistration
            {
                Id                   = id,
                CardNumber           = cardNumber,
                Expiry               = expiry,
                AuthenticationNumber = authentication,
                PartialPassword      = partialPassword,
            };
            var client = Mock.Of <IIamportClient>();
            var sut    = new SubscribeApi(client);

            // act/assert
            await Assert.ThrowsAsync <ValidationException>(
                () => sut.RegisterCustomerAsync(aRequest));
        }
コード例 #9
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"))));
        }
コード例 #10
0
 public async Task UnschedulePaymentsAsync_GuardClause()
 {
     var sut = new SubscribeApi(GetEmptyMockClient());
     await Assert.ThrowsAsync <ArgumentNullException>(
         () => sut.UnschedulePaymentsAsync(null));
 }
コード例 #11
0
 public async Task DoDirectPaymentAsync_again_GuardClause()
 {
     var sut = new SubscribeApi(GetEmptyMockClient());
     await Assert.ThrowsAsync <ArgumentNullException>(
         () => sut.DoDirectPaymentAsync((CustomerDirectPaymentRequest)null));
 }
コード例 #12
0
 public async Task DeleteCustomerAsync_GuardClause(string id)
 {
     var sut = new SubscribeApi(GetEmptyMockClient());
     await Assert.ThrowsAsync <ArgumentNullException>(
         () => sut.DeleteCustomerAsync(id));
 }
コード例 #13
0
 public async Task RegisterCustomerAsync_GuardClause()
 {
     var sut = new SubscribeApi(GetEmptyMockClient());
     await Assert.ThrowsAsync <ArgumentNullException>(
         () => sut.RegisterCustomerAsync(null));
 }