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