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)); }
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)); }
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)); }