Skip to content

Commit 7339237

Browse files
authored
Merge pull request #820 from recurly/get-external-sub-by-uuid
Get external sub by uuid
2 parents d3a494f + cb8abf3 commit 7339237

File tree

5 files changed

+55
-3
lines changed

5 files changed

+55
-3
lines changed

Tests/Recurly/ExternalSubscription_List_Test.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public function testGetAll() {
3030
$this->assertInstanceOf('DateTime', $external_subscription->expires_at);
3131
$this->assertInstanceOf('DateTime', $external_subscription->trial_started_at);
3232
$this->assertInstanceOf('DateTime', $external_subscription->trial_ends_at);
33+
$this->assertEquals($external_subscription->uuid, '72bb9966bb5dc3767461ce4368a6b366');
3334
$external_product_reference = $external_subscription->external_product_reference;
3435
$this->assertEquals($external_product_reference->id, 'rauqpcdmxc4a');
3536
$this->assertEquals($external_product_reference->reference_code, '1234');

Tests/Recurly/ExternalSubscription_Test.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public function testGetSubscription() {
2525
$this->assertInstanceOf('DateTime', $external_subscription->expires_at);
2626
$this->assertInstanceOf('DateTime', $external_subscription->trial_started_at);
2727
$this->assertInstanceOf('DateTime', $external_subscription->trial_ends_at);
28+
$this->assertEquals($external_subscription->uuid, '72bb9966bb5dc3767461ce4368a6b366');
2829
$external_product_reference = $external_subscription->external_product_reference;
2930
$this->assertEquals($external_product_reference->id, 'rauqpcdmxc4a');
3031
$this->assertEquals($external_product_reference->reference_code, '1234');
@@ -55,6 +56,38 @@ public function testGetSubscriptionByExternalId() {
5556
$this->assertInstanceOf('DateTime', $external_subscription->expires_at);
5657
$this->assertInstanceOf('DateTime', $external_subscription->trial_started_at);
5758
$this->assertInstanceOf('DateTime', $external_subscription->trial_ends_at);
59+
$this->assertEquals($external_subscription->uuid, '72bb9966bb5dc3767461ce4368a6b366');
60+
$external_product_reference = $external_subscription->external_product_reference;
61+
$this->assertEquals($external_product_reference->id, 'rauqpcdmxc4a');
62+
$this->assertEquals($external_product_reference->reference_code, '1234');
63+
$this->assertEquals($external_product_reference->external_connection_type, 'apple_app_store');
64+
$this->assertInstanceOf('DateTime', $external_product_reference->created_at);
65+
$this->assertInstanceOf('DateTime', $external_product_reference->updated_at);
66+
}
67+
68+
public function testGetSubscriptionByUuid() {
69+
$this->client->addResponse('GET', '/external_subscriptions/uuid-72bb9966bb5dc3767461ce4368a6b366', 'external_subscriptions/show-200.xml');
70+
71+
$external_subscription = Recurly_ExternalSubscription::getByUuid('72bb9966bb5dc3767461ce4368a6b366', $this->client);
72+
$this->assertInstanceOf('Recurly_ExternalSubscription', $external_subscription);
73+
$this->assertInstanceOf('Recurly_Stub', $external_subscription->account);
74+
$this->assertEquals($external_subscription->account->getHref(), 'https://api.recurly.com/v2/accounts/1');
75+
$this->assertEquals('https://api.recurly.com/v2/external_subscriptions/rjx71rx8gs2m/external_invoices', $external_subscription->external_invoices->getHref());
76+
$this->assertEquals('https://api.recurly.com/v2/external_subscriptions/rjx71rx8gs2m/external_payment_phases', $external_subscription->external_payment_phases->getHref());
77+
$this->assertInstanceOf('DateTime', $external_subscription->created_at);
78+
$this->assertInstanceOf('DateTime', $external_subscription->updated_at);
79+
$this->assertEquals($external_subscription->quantity, 18);
80+
$this->assertEquals($external_subscription->external_id, '1_ext_id');
81+
$this->assertEquals($external_subscription->state, 'active');
82+
$this->assertEquals($external_subscription->auto_renew, false);
83+
$this->assertEquals($external_subscription->in_grace_period, false);
84+
$this->assertEquals($external_subscription->imported, false);
85+
$this->assertEquals($external_subscription->test, false);
86+
$this->assertInstanceOf('DateTime', $external_subscription->canceled_at);
87+
$this->assertInstanceOf('DateTime', $external_subscription->expires_at);
88+
$this->assertInstanceOf('DateTime', $external_subscription->trial_started_at);
89+
$this->assertInstanceOf('DateTime', $external_subscription->trial_ends_at);
90+
$this->assertEquals($external_subscription->uuid, '72bb9966bb5dc3767461ce4368a6b366');
5891
$external_product_reference = $external_subscription->external_product_reference;
5992
$this->assertEquals($external_product_reference->id, 'rauqpcdmxc4a');
6093
$this->assertEquals($external_product_reference->reference_code, '1234');

Tests/fixtures/external_subscriptions/index-200.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Content-Type: application/xml; charset=utf-8
66
<external_subscription href="https://api.recurly.com/v2/external_subscriptions/rjx71rx8gs2m">
77
<account href="https://api.recurly.com/v2/accounts/1"/>
88
<external_invoices href="https://api.recurly.com/v2/external_subscriptions/rjx71rx8gs2m/external_invoices"/>
9+
<external_id>1_ext_id</external_id>
10+
<uuid>72bb9966bb5dc3767461ce4368a6b366</uuid>
911
<external_payment_phases href="https://api.recurly.com/v2/external_subscriptions/rjx71rx8gs2m/external_payment_phases"/>
1012
<external_product_reference>
1113
<id>rauqpcdmxc4a</id>
@@ -21,7 +23,6 @@ Content-Type: application/xml; charset=utf-8
2123
<test type="boolean">false</test>
2224
<app_identifier nil="nil"></app_identifier>
2325
<quantity type="integer">18</quantity>
24-
<external_id>1_ext_id</external_id>
2526
<activated_at type="datetime">2022-09-13T18:55:15Z</activated_at>
2627
<canceled_at type="datetime">2026-09-13T18:55:15Z</canceled_at>
2728
<expires_at type="datetime">2026-09-13T18:55:15Z</expires_at>
@@ -34,6 +35,8 @@ Content-Type: application/xml; charset=utf-8
3435
<external_subscription href="https://api.recurly.com/v2/external_subscriptions/rbf29tck8hpo">
3536
<account href="https://api.recurly.com/v2/accounts/2"/>
3637
<external_invoices href="https://api.recurly.com/v2/external_subscriptions/rbf29tck8hpo/external_invoices"/>
38+
<external_id>2_ext_id</external_id>
39+
<uuid>72bba6cc3a2323d04632374f0fb44a5a</uuid>
3740
<external_payment_phases href="https://api.recurly.com/v2/external_subscriptions/rbf29tck8hpo/external_payment_phases"/>
3841
<external_product_reference>
3942
<id>rauqpcdmxc4b</id>
@@ -49,7 +52,6 @@ Content-Type: application/xml; charset=utf-8
4952
<test type="boolean">false</test>
5053
<app_identifier nil="nil"></app_identifier>
5154
<quantity type="integer">12</quantity>
52-
<external_id>2_ext_id</external_id>
5355
<activated_at type="datetime">2022-09-13T18:55:15Z</activated_at>
5456
<canceled_at type="datetime">2026-09-13T18:55:15Z</canceled_at>
5557
<expires_at type="datetime">2025-09-13T18:55:15Z</expires_at>

Tests/fixtures/external_subscriptions/show-200.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ Content-Type: application/xml; charset=utf-8
55
<external_subscription href="https://api.recurly.com/v2/external_subscriptions/rjx71rx8gs2m">
66
<account href="https://api.recurly.com/v2/accounts/1"/>
77
<external_invoices href="https://api.recurly.com/v2/external_subscriptions/rjx71rx8gs2m/external_invoices"/>
8+
<external_id>1_ext_id</external_id>
9+
<uuid>72bb9966bb5dc3767461ce4368a6b366</uuid>
810
<external_payment_phases href="https://api.recurly.com/v2/external_subscriptions/rjx71rx8gs2m/external_payment_phases"/>
911
<external_product_reference>
1012
<id>rauqpcdmxc4a</id>
@@ -20,7 +22,6 @@ Content-Type: application/xml; charset=utf-8
2022
<test type="boolean">false</test>
2123
<app_identifier nil="nil"></app_identifier>
2224
<quantity type="integer">18</quantity>
23-
<external_id>1_ext_id</external_id>
2425
<activated_at type="datetime">2022-09-13T18:55:15Z</activated_at>
2526
<canceled_at type="datetime">2026-09-13T18:55:15Z</canceled_at>
2627
<expires_at type="datetime">2026-09-13T18:55:15Z</expires_at>

lib/recurly/external_subscription.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* @property Recurly_Stub $account
55
* @property Recurly_ExternalProductReference $external_product_reference
66
* @property Recurly_ExternalPaymentPhase[] $external_payment_phases
7+
* @property string $uuid
78
* @property DateTime $last_purchased
89
* @property boolean $auto_renew
910
* @property boolean $in_grace_period
@@ -43,6 +44,16 @@ public static function getByExternalId($external_id, $client = null) {
4344
return Recurly_Base::_get(Recurly_ExternalSubscription::uriForExternalSubscriptionExternalId($external_id), $client);
4445
}
4546

47+
/**
48+
* @param $uuid
49+
* @param Recurly_Client $client Optional client for the request, useful for mocking the client
50+
* @return Recurly_ExternalSubscription|null
51+
* @throws Recurly_Error
52+
*/
53+
public static function getByUuid($uuid, $client = null) {
54+
return Recurly_Base::_get(Recurly_ExternalSubscription::uriForExternalSubscriptionUuid($uuid), $client);
55+
}
56+
4657
public function getExternalPaymentPhase($external_payment_phase_uuid, $client = null) {
4758
return Recurly_Base::_get($this->uriForExternalPaymentPhase() . '/' . $external_payment_phase_uuid, $client);
4859
}
@@ -62,6 +73,10 @@ protected static function uriForExternalSubscriptionExternalId($external_id) {
6273
return self::_safeUri(Recurly_Client::PATH_EXTERNAL_SUBSCRIPTIONS, "external-id-$external_id");
6374
}
6475

76+
protected static function uriForExternalSubscriptionUuid($uuid) {
77+
return self::_safeUri(Recurly_Client::PATH_EXTERNAL_SUBSCRIPTIONS, "uuid-$uuid");
78+
}
79+
6580
protected function uriForExternalPaymentPhase() {
6681
return $this->uri() . '/' . Recurly_Client::PATH_EXTERNAL_PAYMENT_PHASES;
6782
}

0 commit comments

Comments
 (0)