Skip to content

Commit c9a575f

Browse files
authored
Merge pull request #81 from mikealmond/feature/create-subscription-meta
Add metadata to CreateSubscriptionRequest (fixes #60, #73)
2 parents 5a52082 + 19d285d commit c9a575f

File tree

5 files changed

+117
-29
lines changed

5 files changed

+117
-29
lines changed

src/Message/CreateSubscriptionRequest.php

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,19 @@
33
/**
44
* Stripe Create Subscription Request.
55
*/
6+
67
namespace Omnipay\Stripe\Message;
78

89
/**
910
* Stripe Create Subscription Request
1011
*
11-
* @see Omnipay\Stripe\Gateway
12+
* @see \Omnipay\Stripe\Gateway
1213
* @link https://stripe.com/docs/api/php#create_subscription
1314
*/
1415
class CreateSubscriptionRequest extends AbstractRequest
1516
{
1617
/**
17-
* Get the plan ID
18+
* Get the plan
1819
*
1920
* @return string
2021
*/
@@ -24,9 +25,10 @@ public function getPlan()
2425
}
2526

2627
/**
27-
* Set the plan ID
28+
* Set the plan
2829
*
29-
* @return CreateSubscriptionRequest provides a fluent interface.
30+
* @param $value
31+
* @return \Omnipay\Common\Message\AbstractRequest|CreateSubscriptionRequest
3032
*/
3133
public function setPlan($value)
3234
{
@@ -46,7 +48,8 @@ public function getTaxPercent()
4648
/**
4749
* Set the tax percentage
4850
*
49-
* @return CreateSubscriptionRequest provides a fluent interface.
51+
* @param $value
52+
* @return \Omnipay\Common\Message\AbstractRequest|CreateSubscriptionRequest
5053
*/
5154
public function setTaxPercent($value)
5255
{
@@ -65,6 +68,10 @@ public function getData()
6568
$data['tax_percent'] = (float)$this->getParameter('tax_percent');
6669
}
6770

71+
if ($this->getMetadata()) {
72+
$data['metadata'] = $this->getMetadata();
73+
}
74+
6875
return $data;
6976
}
7077

src/Message/FetchSubscriptionRequest.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
/**
44
* Stripe Fetch Subscription Request.
55
*/
6+
67
namespace Omnipay\Stripe\Message;
78

89
/**
@@ -25,7 +26,8 @@ public function getSubscriptionReference()
2526
/**
2627
* Set the subscription reference.
2728
*
28-
* @return FetchSubscriptionRequest provides a fluent interface.
29+
* @param $value
30+
* @return \Omnipay\Common\Message\AbstractRequest|FetchSubscriptionRequest
2931
*/
3032
public function setSubscriptionReference($value)
3133
{
@@ -35,15 +37,14 @@ public function setSubscriptionReference($value)
3537
public function getData()
3638
{
3739
$this->validate('customerReference', 'subscriptionReference');
38-
$data = array();
3940

40-
return $data;
41+
return array();
4142
}
4243

4344
public function getEndpoint()
4445
{
4546
return $this->endpoint.'/customers/'.$this->getCustomerReference()
46-
.'/subscriptions/'.$this->getSubscriptionReference();
47+
.'/subscriptions/'.$this->getSubscriptionReference();
4748
}
4849

4950
public function getHttpMethod()

src/Message/UpdateSubscriptionRequest.php

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,44 +3,54 @@
33
/**
44
* Stripe Update Subscription Request.
55
*/
6+
67
namespace Omnipay\Stripe\Message;
78

89
/**
910
* Stripe Update Subscription Request
1011
*
11-
* @see Omnipay\Stripe\Gateway
12+
* @see \Omnipay\Stripe\Gateway
1213
* @link https://stripe.com/docs/api#update_subscription
1314
*/
1415
class UpdateSubscriptionRequest extends AbstractRequest
1516
{
1617
/**
17-
* Get the plan ID
18+
* Get the plan
1819
*
1920
* @return string
2021
*/
21-
public function getPlanId()
22+
public function getPlan()
2223
{
2324
return $this->getParameter('plan');
2425
}
2526

2627
/**
27-
* Set the plan ID
28+
* Set the plan
2829
*
29-
* @return UpdateSubscriptionRequest provides a fluent interface.
30+
* @param $value
31+
* @return \Omnipay\Common\Message\AbstractRequest|UpdateSubscriptionRequest
3032
*/
31-
public function setPlanId($value)
33+
public function setPlan($value)
3234
{
3335
return $this->setParameter('plan', $value);
3436
}
3537

3638
/**
37-
* Set the subscription reference
38-
*
39-
* @return UpdateSubscriptionRequest provides a fluent interface.
39+
* @deprecated
4040
*/
41-
public function setSubscriptionReference($value)
41+
public function getPlanId()
4242
{
43-
return $this->setParameter('subscriptionReference', $value);
43+
return $this->getPlan();
44+
}
45+
46+
/**
47+
* @deprecated
48+
* @param $value
49+
* @return \Omnipay\Common\Message\AbstractRequest|UpdateSubscriptionRequest
50+
*/
51+
public function setPlanId($value)
52+
{
53+
return $this->setPlan($value);
4454
}
4555

4656
/**
@@ -53,20 +63,39 @@ public function getSubscriptionReference()
5363
return $this->getParameter('subscriptionReference');
5464
}
5565

66+
/**
67+
* Set the subscription reference
68+
*
69+
* @param $value
70+
* @return \Omnipay\Common\Message\AbstractRequest|UpdateSubscriptionRequest
71+
*/
72+
public function setSubscriptionReference($value)
73+
{
74+
return $this->setParameter('subscriptionReference', $value);
75+
}
76+
5677
public function getData()
5778
{
5879
$this->validate('customerReference', 'subscriptionReference', 'plan');
5980

6081
$data = array(
61-
'plan' => $this->getPlanId()
82+
'plan' => $this->getPlan()
6283
);
6384

85+
if ($this->parameters->has('tax_percent')) {
86+
$data['tax_percent'] = (float)$this->getParameter('tax_percent');
87+
}
88+
89+
if ($this->getMetadata()) {
90+
$data['metadata'] = $this->getMetadata();
91+
}
92+
6493
return $data;
6594
}
6695

6796
public function getEndpoint()
6897
{
6998
return $this->endpoint.'/customers/'.$this->getCustomerReference()
70-
.'/subscriptions/'.$this->getSubscriptionReference();
99+
.'/subscriptions/'.$this->getSubscriptionReference();
71100
}
72101
}

tests/Message/CreateSubscriptionRequestTest.php

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,52 @@
66

77
class CreateSubscriptionRequestTest extends TestCase
88
{
9+
/** @var CreateSubscriptionRequest */
10+
protected $request;
11+
912
public function setUp()
1013
{
1114
$this->request = new CreateSubscriptionRequest($this->getHttpClient(), $this->getHttpRequest());
1215
$this->request->setCustomerReference('cus_7lqqgOm33t4xSU');
1316
$this->request->setPlan('basic');
1417
}
1518

19+
public function testData()
20+
{
21+
$this->request->setTaxPercent(14);
22+
$this->request->setMetadata(array('field' => 'value'));
23+
24+
$data = $this->request->getData();
25+
26+
$this->assertSame(14.0, $data['tax_percent']);
27+
$this->assertArrayHasKey('field', $data['metadata']);
28+
$this->assertSame('value', $data['metadata']['field']);
29+
}
30+
31+
public function testZeroPercentData()
32+
{
33+
$this->request->setTaxPercent(0);
34+
35+
$data = $this->request->getData();
36+
37+
$this->assertSame(0.0, $data['tax_percent']);
38+
}
39+
40+
public function testZeroPercentStringData()
41+
{
42+
$this->request->setTaxPercent('0');
43+
44+
$data = $this->request->getData();
45+
46+
$this->assertSame(0.0, $data['tax_percent']);
47+
}
48+
1649
public function testEndpoint()
1750
{
18-
$this->assertSame('https://api.stripe.com/v1/customers/cus_7lqqgOm33t4xSU/subscriptions', $this->request->getEndpoint());
51+
$this->assertSame(
52+
'https://api.stripe.com/v1/customers/cus_7lqqgOm33t4xSU/subscriptions',
53+
$this->request->getEndpoint()
54+
);
1955
}
2056

2157
public function testSendSuccess()
@@ -40,4 +76,4 @@ public function testSendError()
4076
$this->assertNull($response->getPlan());
4177
$this->assertSame('No such plan: basico', $response->getMessage());
4278
}
43-
}
79+
}

tests/Message/UpdateSubscriptionRequestTest.php

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,17 @@
66

77
class UpdateSubscriptionRequestTest extends TestCase
88
{
9+
/**
10+
* @var UpdateSubscriptionRequest
11+
*/
12+
protected $request;
13+
914
public function setUp()
1015
{
1116
$this->request = new UpdateSubscriptionRequest($this->getHttpClient(), $this->getHttpRequest());
1217
$this->request->setCustomerReference('cus_7lqqgOm33t4xSU');
1318
$this->request->setSubscriptionReference('sub_7uNSBwlTzGjYWw');
14-
$this->request->setPlanId('basic');
19+
$this->request->setPlan('basic');
1520
}
1621

1722
public function testEndpoint()
@@ -23,7 +28,9 @@ public function testEndpoint()
2328
public function testSendSuccess()
2429
{
2530
$this->setMockHttpResponse('UpdateSubscriptionSuccess.txt');
31+
/** @var Response */
2632
$response = $this->request->send();
33+
2734
$this->assertTrue($response->isSuccessful());
2835
$this->assertFalse($response->isRedirect());
2936
$this->assertSame('sub_7uNSBwlTzGjYWw', $response->getSubscriptionReference());
@@ -35,14 +42,22 @@ public function testSendSuccess()
3542
public function testSendError()
3643
{
3744
$this->setMockHttpResponse('UpdateSubscriptionFailure.txt');
45+
46+
/** @var Response */
3847
$response = $this->request->send();
3948
$this->assertFalse($response->isSuccessful());
4049
$this->assertFalse($response->isRedirect());
4150
$this->assertNull($response->getSubscriptionReference());
4251
$this->assertNull($response->getPlan());
43-
$c = $this->request->getCustomerReference();
44-
$s = $this->request->getSubscriptionReference();
45-
$message = sprintf('Customer %s does not have a subscription with ID %s', $c, $s);
52+
53+
$customerReference = $this->request->getCustomerReference();
54+
$subscriptionReference = $this->request->getSubscriptionReference();
55+
56+
$message = sprintf(
57+
'Customer %s does not have a subscription with ID %s',
58+
$customerReference,
59+
$subscriptionReference
60+
);
4661
$this->assertSame($message, $response->getMessage());
4762
}
48-
}
63+
}

0 commit comments

Comments
 (0)