InvoicesTest.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. <?php
  2. namespace Srmklive\PayPal\Tests\Unit\Client;
  3. use GuzzleHttp\Utils;
  4. use PHPUnit\Framework\Attributes\Test;
  5. use PHPUnit\Framework\TestCase;
  6. use Srmklive\PayPal\Tests\MockClientClasses;
  7. use Srmklive\PayPal\Tests\MockRequestPayloads;
  8. use Srmklive\PayPal\Tests\MockResponsePayloads;
  9. class InvoicesTest extends TestCase
  10. {
  11. use MockClientClasses;
  12. use MockRequestPayloads;
  13. use MockResponsePayloads;
  14. #[Test]
  15. public function it_can_generate_unique_invoice_number(): void
  16. {
  17. $expectedResponse = $this->mockGenerateInvoiceNumberResponse();
  18. $expectedEndpoint = 'https://api-m.sandbox.paypal.com/v2/invoicing/generate-next-invoice-number';
  19. $expectedParams = [
  20. 'headers' => [
  21. 'Accept' => 'application/json',
  22. 'Accept-Language' => 'en_US',
  23. 'Authorization' => 'Bearer some-token',
  24. ],
  25. ];
  26. $mockHttpClient = $this->mock_http_request(Utils::jsonEncode($expectedResponse), $expectedEndpoint, $expectedParams, 'post');
  27. $this->assertEquals($expectedResponse, Utils::jsonDecode($mockHttpClient->post($expectedEndpoint, $expectedParams)->getBody(), true));
  28. }
  29. #[Test]
  30. public function it_can_create_a_draft_invoice(): void
  31. {
  32. $expectedResponse = $this->mockCreateInvoicesResponse();
  33. $expectedEndpoint = 'https://api-m.sandbox.paypal.com/v2/invoicing/invoices';
  34. $expectedParams = [
  35. 'headers' => [
  36. 'Accept' => 'application/json',
  37. 'Accept-Language' => 'en_US',
  38. 'Authorization' => 'Bearer some-token',
  39. ],
  40. 'json' => $this->createInvoiceParams(),
  41. ];
  42. $mockHttpClient = $this->mock_http_request(Utils::jsonEncode($expectedResponse), $expectedEndpoint, $expectedParams, 'post');
  43. $this->assertEquals($expectedResponse, Utils::jsonDecode($mockHttpClient->post($expectedEndpoint, $expectedParams)->getBody(), true));
  44. }
  45. #[Test]
  46. public function it_can_list_current_invoices(): void
  47. {
  48. $expectedResponse = $this->mockListInvoicesResponse();
  49. $expectedEndpoint = 'https://api-m.sandbox.paypal.com/v2/invoicing/invoices?total_required=true';
  50. $expectedParams = [
  51. 'headers' => [
  52. 'Accept' => 'application/json',
  53. 'Accept-Language' => 'en_US',
  54. 'Authorization' => 'Bearer some-token',
  55. ],
  56. ];
  57. $mockHttpClient = $this->mock_http_request(Utils::jsonEncode($expectedResponse), $expectedEndpoint, $expectedParams, 'get');
  58. $this->assertEquals($expectedResponse, Utils::jsonDecode($mockHttpClient->get($expectedEndpoint, $expectedParams)->getBody(), true));
  59. }
  60. #[Test]
  61. public function it_can_delete_an_invoice(): void
  62. {
  63. $expectedResponse = '';
  64. $expectedEndpoint = 'https://api-m.sandbox.paypal.com/v2/invoicing/invoices/INV2-Z56S-5LLA-Q52L-CPZ5';
  65. $expectedParams = [
  66. 'headers' => [
  67. 'Accept' => 'application/json',
  68. 'Accept-Language' => 'en_US',
  69. 'Authorization' => 'Bearer some-token',
  70. ],
  71. ];
  72. $mockHttpClient = $this->mock_http_request(Utils::jsonEncode($expectedResponse), $expectedEndpoint, $expectedParams, 'delete');
  73. $this->assertEquals($expectedResponse, Utils::jsonDecode($mockHttpClient->delete($expectedEndpoint, $expectedParams)->getBody(), true));
  74. }
  75. #[Test]
  76. public function it_can_update_an_invoice(): void
  77. {
  78. $expectedResponse = $this->mockUpdateInvoicesResponse();
  79. $expectedEndpoint = 'https://api-m.sandbox.paypal.com/v2/invoicing/invoices/INV2-Z56S-5LLA-Q52L-CPZ5';
  80. $expectedParams = [
  81. 'headers' => [
  82. 'Accept' => 'application/json',
  83. 'Accept-Language' => 'en_US',
  84. 'Authorization' => 'Bearer some-token',
  85. ],
  86. 'json' => $this->updateInvoiceParams(),
  87. ];
  88. $mockHttpClient = $this->mock_http_request(Utils::jsonEncode($expectedResponse), $expectedEndpoint, $expectedParams, 'put');
  89. $this->assertEquals($expectedResponse, Utils::jsonDecode($mockHttpClient->put($expectedEndpoint, $expectedParams)->getBody(), true));
  90. }
  91. #[Test]
  92. public function it_can_show_details_for_an_invoice(): void
  93. {
  94. $expectedResponse = $this->mockGetInvoicesResponse();
  95. $expectedEndpoint = 'https://api-m.sandbox.paypal.com/v2/invoicing/invoices/INV2-Z56S-5LLA-Q52L-CPZ5';
  96. $expectedParams = [
  97. 'headers' => [
  98. 'Accept' => 'application/json',
  99. 'Accept-Language' => 'en_US',
  100. 'Authorization' => 'Bearer some-token',
  101. ],
  102. ];
  103. $mockHttpClient = $this->mock_http_request(Utils::jsonEncode($expectedResponse), $expectedEndpoint, $expectedParams, 'get');
  104. $this->assertEquals($expectedResponse, Utils::jsonDecode($mockHttpClient->get($expectedEndpoint, $expectedParams)->getBody(), true));
  105. }
  106. #[Test]
  107. public function it_can_cancel_an_invoice(): void
  108. {
  109. $expectedResponse = '';
  110. $expectedEndpoint = 'https://api-m.sandbox.paypal.com/v2/invoicing/invoices/INV2-Z56S-5LLA-Q52L-CPZ5/cancel';
  111. $expectedParams = [
  112. 'headers' => [
  113. 'Accept' => 'application/json',
  114. 'Accept-Language' => 'en_US',
  115. 'Authorization' => 'Bearer some-token',
  116. ],
  117. 'json' => $this->cancelInvoiceParams(),
  118. ];
  119. $mockHttpClient = $this->mock_http_request(Utils::jsonEncode($expectedResponse), $expectedEndpoint, $expectedParams, 'post');
  120. $this->assertEquals($expectedResponse, Utils::jsonDecode($mockHttpClient->post($expectedEndpoint, $expectedParams)->getBody(), true));
  121. }
  122. #[Test]
  123. public function it_can_generate_qr_code_for_invoice(): void
  124. {
  125. $expectedResponse = $this->mockGenerateInvoiceNumberResponse();
  126. $expectedEndpoint = 'https://api-m.sandbox.paypal.com/v2/invoicing/invoices/INV2-Z56S-5LLA-Q52L-CPZ5/generate-qr-code';
  127. $expectedParams = [
  128. 'headers' => [
  129. 'Accept' => 'application/json',
  130. 'Accept-Language' => 'en_US',
  131. 'Authorization' => 'Bearer some-token',
  132. ],
  133. 'json' => $this->generateQRCodeInvoiceParams(),
  134. ];
  135. $mockHttpClient = $this->mock_http_request(Utils::jsonEncode($expectedResponse), $expectedEndpoint, $expectedParams, 'post');
  136. $this->assertEquals($expectedResponse, Utils::jsonDecode($mockHttpClient->post($expectedEndpoint, $expectedParams)->getBody(), true));
  137. }
  138. #[Test]
  139. public function it_can_register_payment_for_invoice(): void
  140. {
  141. $expectedResponse = $this->mockInvoiceRegisterPaymentResponse();
  142. $expectedEndpoint = 'https://api-m.sandbox.paypal.com/v2/invoicing/invoices/INV2-Z56S-5LLA-Q52L-CPZ5/payments';
  143. $expectedParams = [
  144. 'headers' => [
  145. 'Accept' => 'application/json',
  146. 'Accept-Language' => 'en_US',
  147. 'Authorization' => 'Bearer some-token',
  148. ],
  149. 'json' => $this->registerInvoicePaymentParams(),
  150. ];
  151. $mockHttpClient = $this->mock_http_request(Utils::jsonEncode($expectedResponse), $expectedEndpoint, $expectedParams, 'post');
  152. $this->assertEquals($expectedResponse, Utils::jsonDecode($mockHttpClient->post($expectedEndpoint, $expectedParams)->getBody(), true));
  153. }
  154. #[Test]
  155. public function it_can_delete_payment_for_invoice(): void
  156. {
  157. $expectedResponse = '';
  158. $expectedEndpoint = 'https://api-m.sandbox.paypal.com/v2/invoicing/invoices/INV2-Z56S-5LLA-Q52L-CPZ5/payments/EXTR-86F38350LX4353815';
  159. $expectedParams = [
  160. 'headers' => [
  161. 'Accept' => 'application/json',
  162. 'Accept-Language' => 'en_US',
  163. 'Authorization' => 'Bearer some-token',
  164. ],
  165. ];
  166. $mockHttpClient = $this->mock_http_request(Utils::jsonEncode($expectedResponse), $expectedEndpoint, $expectedParams, 'delete');
  167. $this->assertEquals($expectedResponse, Utils::jsonDecode($mockHttpClient->delete($expectedEndpoint, $expectedParams)->getBody(), true));
  168. }
  169. #[Test]
  170. public function it_can_refund_payment_for_invoice(): void
  171. {
  172. $expectedResponse = $this->mockInvoiceRefundPaymentResponse();
  173. $expectedEndpoint = 'https://api-m.sandbox.paypal.com/v2/invoicing/invoices/INV2-Z56S-5LLA-Q52L-CPZ5/refunds';
  174. $expectedParams = [
  175. 'headers' => [
  176. 'Accept' => 'application/json',
  177. 'Accept-Language' => 'en_US',
  178. 'Authorization' => 'Bearer some-token',
  179. ],
  180. 'json' => $this->refundInvoicePaymentParams(),
  181. ];
  182. $mockHttpClient = $this->mock_http_request(Utils::jsonEncode($expectedResponse), $expectedEndpoint, $expectedParams, 'post');
  183. $this->assertEquals($expectedResponse, Utils::jsonDecode($mockHttpClient->post($expectedEndpoint, $expectedParams)->getBody(), true));
  184. }
  185. #[Test]
  186. public function it_can_delete_refund_for_invoice(): void
  187. {
  188. $expectedResponse = '';
  189. $expectedEndpoint = 'https://api-m.sandbox.paypal.com/v2/invoicing/invoices/INV2-333R-YUQL-YNNN-D7WF/refunds/EXTR-2LG703375E477444T';
  190. $expectedParams = [
  191. 'headers' => [
  192. 'Accept' => 'application/json',
  193. 'Accept-Language' => 'en_US',
  194. 'Authorization' => 'Bearer some-token',
  195. ],
  196. ];
  197. $mockHttpClient = $this->mock_http_request(Utils::jsonEncode($expectedResponse), $expectedEndpoint, $expectedParams, 'delete');
  198. $this->assertEquals($expectedResponse, Utils::jsonDecode($mockHttpClient->delete($expectedEndpoint, $expectedParams)->getBody(), true));
  199. }
  200. #[Test]
  201. public function it_can_send_an_invoice(): void
  202. {
  203. $expectedResponse = '';
  204. $expectedEndpoint = 'https://api-m.sandbox.paypal.com/v2/invoicing/invoices/INV2-EHNV-LJ5S-A7DZ-V6NJ/send';
  205. $expectedParams = [
  206. 'headers' => [
  207. 'Accept' => 'application/json',
  208. 'Accept-Language' => 'en_US',
  209. 'Authorization' => 'Bearer some-token',
  210. ],
  211. 'json' => $this->sendInvoiceParams(),
  212. ];
  213. $mockHttpClient = $this->mock_http_request(Utils::jsonEncode($expectedResponse), $expectedEndpoint, $expectedParams, 'post');
  214. $this->assertEquals($expectedResponse, Utils::jsonDecode($mockHttpClient->post($expectedEndpoint, $expectedParams)->getBody(), true));
  215. }
  216. #[Test]
  217. public function it_can_send_reminder_for_an_invoice(): void
  218. {
  219. $expectedResponse = '';
  220. $expectedEndpoint = 'https://api-m.sandbox.paypal.com/v2/invoicing/invoices/INV2-Z56S-5LLA-Q52L-CPZ5/remind';
  221. $expectedParams = [
  222. 'headers' => [
  223. 'Accept' => 'application/json',
  224. 'Accept-Language' => 'en_US',
  225. 'Authorization' => 'Bearer some-token',
  226. ],
  227. 'json' => $this->sendInvoiceReminderParams(),
  228. ];
  229. $mockHttpClient = $this->mock_http_request(Utils::jsonEncode($expectedResponse), $expectedEndpoint, $expectedParams, 'post');
  230. $this->assertEquals($expectedResponse, Utils::jsonDecode($mockHttpClient->post($expectedEndpoint, $expectedParams)->getBody(), true));
  231. }
  232. }