From c6acde30f5582e26f24da37f77ead346b6293520 Mon Sep 17 00:00:00 2001 From: AntoineLemaire Date: Fri, 26 Jun 2020 21:23:39 +0200 Subject: [PATCH] Add FetchSubscriptionSchedulesRequest --- .../FetchSubscriptionSchedulesRequest.php | 53 +++++++++++++++ src/Message/Response.php | 14 ++++ .../FetchSubscriptionSchedulesRequestTest.php | 43 ++++++++++++ .../FetchSubscriptionSchedulesFailure.txt | 17 +++++ .../FetchSubscriptionSchedulesSuccess.txt | 68 +++++++++++++++++++ 5 files changed, 195 insertions(+) create mode 100644 src/Message/FetchSubscriptionSchedulesRequest.php create mode 100644 tests/Message/FetchSubscriptionSchedulesRequestTest.php create mode 100644 tests/Mock/FetchSubscriptionSchedulesFailure.txt create mode 100644 tests/Mock/FetchSubscriptionSchedulesSuccess.txt diff --git a/src/Message/FetchSubscriptionSchedulesRequest.php b/src/Message/FetchSubscriptionSchedulesRequest.php new file mode 100644 index 00000000..c41006c3 --- /dev/null +++ b/src/Message/FetchSubscriptionSchedulesRequest.php @@ -0,0 +1,53 @@ +getParameter('subscriptionSchedulesReference'); + } + + /** + * Set the subscription reference. + * + * @param $value + * @return \Omnipay\Common\Message\AbstractRequest|FetchSubscriptionRequest + */ + public function setSubscriptionSchedulesReference($value) + { + return $this->setParameter('subscriptionSchedulesReference', $value); + } + + public function getData() + { + $this->validate('subscriptionSchedulesReference'); + + return array(); + } + + public function getEndpoint() + { + return $this->endpoint.'/subscription_schedules/'.$this->getSubscriptionSchedulesReference(); + } + + public function getHttpMethod() + { + return 'GET'; + } +} diff --git a/src/Message/Response.php b/src/Message/Response.php index 476ecd0f..6ac0ce59 100644 --- a/src/Message/Response.php +++ b/src/Message/Response.php @@ -261,6 +261,20 @@ public function getSubscriptionReference() return null; } + /** + * Get the subscription schedule reference from the response of FetchSubscriptionSchedulesRequest. + * + * @return array|null + */ + public function getSubscriptionSchedulesReference() + { + if (isset($this->data['object']) && $this->data['object'] == 'subscription_schedule') { + return $this->data['id']; + } + + return null; + } + /** * Get the event reference from the response of FetchEventRequest. * diff --git a/tests/Message/FetchSubscriptionSchedulesRequestTest.php b/tests/Message/FetchSubscriptionSchedulesRequestTest.php new file mode 100644 index 00000000..67d854b3 --- /dev/null +++ b/tests/Message/FetchSubscriptionSchedulesRequestTest.php @@ -0,0 +1,43 @@ +request = new FetchSubscriptionSchedulesRequest($this->getHttpClient(), $this->getHttpRequest()); + $this->request->setSubscriptionSchedulesReference('sub_sched_1GagVZKscivsTrcFhfMufnWP'); + } + + public function testEndpoint() + { + $endpoint = 'https://api.stripe.com/v1/subscription_schedules/sub_sched_1GagVZKscivsTrcFhfMufnWP'; + $this->assertSame($endpoint, $this->request->getEndpoint()); + } + + public function testSendSuccess() + { + $this->setMockHttpResponse('FetchSubscriptionSchedulesSuccess.txt'); + $response = $this->request->send(); + + $this->assertTrue($response->isSuccessful()); + $this->assertFalse($response->isRedirect()); + $this->assertSame('sub_sched_1GagVZKscivsTrcFhfMufnWP', $response->getSubscriptionSchedulesReference()); + $this->assertNull($response->getMessage()); + } + + public function testSendFailure() + { + $this->setMockHttpResponse('FetchSubscriptionSchedulesFailure.txt'); + $response = $this->request->send(); + + $this->assertFalse($response->isSuccessful()); + $this->assertFalse($response->isRedirect()); + $this->assertNull($response->getSubscriptionReference()); + $message = 'No such subscription schedule: sub_sched_1GagVZKscivsTrcFhfMufnWP'; + $this->assertSame($message, $response->getMessage()); + } +} diff --git a/tests/Mock/FetchSubscriptionSchedulesFailure.txt b/tests/Mock/FetchSubscriptionSchedulesFailure.txt new file mode 100644 index 00000000..3a0ef437 --- /dev/null +++ b/tests/Mock/FetchSubscriptionSchedulesFailure.txt @@ -0,0 +1,17 @@ +HTTP/1.1 404 Not Found +Server: nginx +Date: Mon, 26 Jun 2020 13:41:33 GMT +Content-Type: application/json +Content-Length: 188 +Connection: keep-alive +Cache-Control: no-cache, no-store + +{ + "error": { + "code": "resource_missing", + "doc_url": "https://stripe.com/docs/error-codes/resource-missing", + "message": "No such subscription schedule: sub_sched_1GagVZKscivsTrcFhfMufnWP", + "param": "id", + "type": "invalid_request_error" + } +} diff --git a/tests/Mock/FetchSubscriptionSchedulesSuccess.txt b/tests/Mock/FetchSubscriptionSchedulesSuccess.txt new file mode 100644 index 00000000..4ad1fc4f --- /dev/null +++ b/tests/Mock/FetchSubscriptionSchedulesSuccess.txt @@ -0,0 +1,68 @@ +HTTP/1.1 200 OK +Server: nginx +Date: Mon, 26 Jun 2020 13:41:33 GMT +Content-Type: application/json +Content-Length: 784 +Connection: keep-alive +Cache-Control: no-cache, no-store + +{ + "id": "sub_sched_1GagVZKscivsTrcFhfMufnWP", + "object": "subscription_schedule", + "canceled_at": null, + "completed_at": null, + "created": 1593158960, + "current_phase": null, + "customer": "cus_7lqqgOm33t4xSU", + "default_settings": { + "billing_thresholds": null, + "collection_method": "charge_automatically", + "default_payment_method": null, + "default_source": null, + "invoice_settings": null, + "transfer_data": null + }, + "end_behavior": "release", + "livemode": false, + "metadata": { + }, + "phases": [ + { + "add_invoice_items": [ + + ], + "application_fee_percent": null, + "billing_thresholds": null, + "collection_method": null, + "coupon": null, + "default_payment_method": null, + "default_tax_rates": [ + + ], + "end_date": 1596960367, + "invoice_settings": null, + "plans": [ + { + "billing_thresholds": null, + "plan": "plan_GXzqnSohdy458I", + "price": "plan_GXzqnSohdy458I", + "quantity": 1, + "tax_rates": [ + + ] + } + ], + "prorate": true, + "proration_behavior": "create_prorations", + "start_date": 1595750767, + "tax_percent": null, + "transfer_data": null, + "trial_end": null + } + ], + "released_at": null, + "released_subscription": null, + "renewal_interval": null, + "status": "not_started", + "subscription": null +}