예제 #1
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))));
        }
        /// <summary>
        /// 주어진 정보로 결제를 준비합니다.
        /// 준비된 결제는 동일한 거래 ID에 대해 단 한번만 결제를 진행할 수 있으며,
        /// 결제 진행중 등록된 금액과 다를 경우 결제에 실패합니다.
        /// </summary>
        /// <param name="preparation">결제 준비 정보</param>
        /// <seealso>https://api.iamport.kr/#!/payments.validation/preparePayment</seealso>
        /// <returns>결제 준비 정보</returns>
        public async Task <PaymentPreparation> PrepareAsync(PaymentPreparation preparation)
        {
            if (preparation == null)
            {
                throw new ArgumentNullException(nameof(preparation));
            }
            ValidateObject(preparation);
            var request = new IamportRequest <PaymentPreparation>
            {
                ApiPathAndQueryString = GetPathAndQuerystring($"prepare"),
                Method  = HttpMethod.Post,
                Content = preparation
            };

            return(await SendRequestAsync <PaymentPreparation, PaymentPreparation>(request));
        }
예제 #3
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));
        }
예제 #4
0
        public async Task PreparationAsync_throws_IamportResponseException_when_response_code_is_not_success()
        {
            // arrange
            var expectedRequest = new PaymentPreparation
            {
                Amount        = 1000,
                TransactionId = Guid.NewGuid().ToString(),
            };
            var expectedResult = new IamportResponse <PaymentPreparation>
            {
                Code           = -1,
                HttpStatusCode = HttpStatusCode.InternalServerError,
            };
            var client = GetMockClient(expectedRequest, expectedResult);
            var sut    = new PaymentsApi(client);

            // act/assert
            await Assert.ThrowsAsync <IamportResponseException>(
                () => sut.PrepareAsync(expectedRequest));
        }