Skip to content

Commit ed039df

Browse files
committed
Merge pull request #90 from recurly/preview_associations
Create resources based on the element if no href links to the object
2 parents fcd62db + 7cc02a7 commit ed039df

4 files changed

Lines changed: 103 additions & 29 deletions

File tree

recurly/resource.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,13 @@ def relatitator(**kwargs):
581581
return Page.page_for_value(resp, value)
582582
return value
583583
return relatitator
584-
return make_relatitator(elem.attrib['href'])
584+
585+
url = elem.attrib['href']
586+
587+
if url is '':
588+
return Resource.value_for_element(elem)
589+
else:
590+
return make_relatitator(url)
585591

586592
return self.value_for_element(elem)
587593

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
POST https://api.recurly.com/v2/subscriptions/123456789012345678901234567890ab/preview HTTP/1.1
2+
Accept: application/xml
3+
Authorization: Basic YXBpa2V5Og==
4+
User-Agent: recurly-python/{version}
5+
Content-Type: application/xml; charset=utf-8
6+
7+
<?xml version='1.0' encoding='UTF-8'?>
8+
<subscription>
9+
<quantity type="integer">2</quantity>
10+
</subscription>
11+

12+
HTTP/1.1 200 OK
13+
Content-Type: application/xml; charset=utf-8
14+
15+
<?xml version="1.0" encoding="UTF-8"?>
16+
<subscription
17+
href="https://api.recurly.com/v2/subscriptions/123456789012345678901234567890ab">
18+
<uuid>123456789012345678901234567890ab</uuid>
19+
<account href="https://api.recurly.com/v2/accounts/subscribemock"/>
20+
<plan href="https://api.recurly.com/v2/plans/basicplan">
21+
<plan_code>basicplan</plan_code>
22+
<name>Basic Plan</name>
23+
</plan>
24+
<state>active</state>
25+
<quantity type="integer">1</quantity>
26+
<currency>EUR</currency>
27+
<unit_amount_in_cents type="integer">1000</unit_amount_in_cents>
28+
<activated_at type="datetime">2011-05-27T07:00:00Z</activated_at>
29+
<canceled_at nil="nil"></canceled_at>
30+
<expires_at nil="nil"></expires_at>
31+
<current_period_started_at type="datetime">2011-06-27T07:00:00Z</current_period_started_at>
32+
<current_period_ends_at type="datetime">2010-07-27T07:00:00Z</current_period_ends_at>
33+
<trial_started_at nil="nil"></trial_started_at>
34+
<trial_ends_at nil="nil"></trial_ends_at>
35+
<tax_in_cents type="integer">0</tax_in_cents>
36+
<tax_type>usst</tax_type>
37+
<subscription_add_ons type="array">
38+
</subscription_add_ons>
39+
<invoice href="">
40+
<account href="https://api.recurly.com/v2/accounts/subscribemock"/>
41+
<subscription href="https://api.recurly.com/v2/subscriptions/123456789012345678901234567890ab"/>
42+
<uuid>4ba1531325014b4f969cd13676f514d8</uuid>
43+
<account_code>subscribemock</account_code>
44+
<total_in_cents>2000</total_in_cents>
45+
<created_at type="nil"></created_at>
46+
<line_items type="array">
47+
<adjustment>
48+
<uuid>4ba1531325014b4f969cd13676f51438</uuid>
49+
<account_code>chargemock</account_code>
50+
<unit_amount_in_cents type="integer">1000</unit_amount_in_cents>
51+
<amount_in_cents type="integer">2000</amount_in_cents>
52+
<quantity>2</quantity>
53+
<currency>USD</currency>
54+
<start_date type="datetime">2011-06-27T07:00:00Z</start_date>
55+
<end_date type="datetime">2010-07-27T07:00:00Z</end_date>
56+
<description>Basic Plan charge</description>
57+
<created_at type="nil"></created_at>
58+
</adjustment>
59+
</line_items>
60+
</invoice>
61+
</subscription>
Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
GET https://api.recurly.com/v2/accounts/subscribemock/subscriptions HTTP/1.1
1+
GET https://api.recurly.com/v2/subscriptions/123456789012345678901234567890ab HTTP/1.1
22
Accept: application/xml
33
Authorization: Basic YXBpa2V5Og==
44
User-Agent: recurly-python/{version}
@@ -9,29 +9,27 @@ X-Records: 1
99
Content-Type: application/xml; charset=utf-8
1010

1111
<?xml version="1.0" encoding="UTF-8"?>
12-
<subscriptions type="array">
13-
<subscription
14-
href="https://api.recurly.com/v2/subscriptions/123456789012345678901234567890ab">
15-
<uuid>123456789012345678901234567890ab</uuid>
16-
<account href="https://api.recurly.com/v2/accounts/subscribemock"/>
17-
<plan href="https://api.recurly.com/v2/plans/basicplan">
18-
<plan_code>basicplan</plan_code>
19-
<name>Basic Plan</name>
20-
</plan>
21-
<state>active</state>
22-
<quantity type="integer">1</quantity>
23-
<currency>EUR</currency>
24-
<unit_amount_in_cents type="integer">1000</unit_amount_in_cents>
25-
<activated_at type="datetime">2011-05-27T07:00:00Z</activated_at>
26-
<canceled_at nil="nil"></canceled_at>
27-
<expires_at nil="nil"></expires_at>
28-
<current_period_started_at type="datetime">2011-06-27T07:00:00Z</current_period_started_at>
29-
<current_period_ends_at type="datetime">2010-07-27T07:00:00Z</current_period_ends_at>
30-
<trial_started_at nil="nil"></trial_started_at>
31-
<trial_ends_at nil="nil"></trial_ends_at>
32-
<tax_in_cents type="integer">0</tax_in_cents>
33-
<tax_type>usst</tax_type>
34-
<subscription_add_ons type="array">
35-
</subscription_add_ons>
36-
</subscription>
37-
</subscriptions>
12+
<subscription
13+
href="https://api.recurly.com/v2/subscriptions/123456789012345678901234567890ab">
14+
<uuid>123456789012345678901234567890ab</uuid>
15+
<account href="https://api.recurly.com/v2/accounts/subscribemock"/>
16+
<plan href="https://api.recurly.com/v2/plans/basicplan">
17+
<plan_code>basicplan</plan_code>
18+
<name>Basic Plan</name>
19+
</plan>
20+
<state>active</state>
21+
<quantity type="integer">1</quantity>
22+
<currency>EUR</currency>
23+
<unit_amount_in_cents type="integer">1000</unit_amount_in_cents>
24+
<activated_at type="datetime">2011-05-27T07:00:00Z</activated_at>
25+
<canceled_at nil="nil"></canceled_at>
26+
<expires_at nil="nil"></expires_at>
27+
<current_period_started_at type="datetime">2011-06-27T07:00:00Z</current_period_started_at>
28+
<current_period_ends_at type="datetime">2010-07-27T07:00:00Z</current_period_ends_at>
29+
<trial_started_at nil="nil"></trial_started_at>
30+
<trial_ends_at nil="nil"></trial_ends_at>
31+
<tax_in_cents type="integer">0</tax_in_cents>
32+
<tax_type>usst</tax_type>
33+
<subscription_add_ons type="array">
34+
</subscription_add_ons>
35+
</subscription>

tests/test_resources.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -641,6 +641,15 @@ def test_plan(self):
641641
plan = Plan.get(plan_code)
642642
self.assertTrue(plan.tax_exempt)
643643

644+
def test_preview_subscription_change(self):
645+
with self.mock_request('subscription/show.xml'):
646+
sub = Subscription.get('123456789012345678901234567890ab')
647+
648+
with self.mock_request('subscription/change-preview.xml'):
649+
sub.quantity = 2
650+
sub.preview()
651+
self.assertTrue(sub.invoice.line_items[0].amount_in_cents, 2000)
652+
644653
def test_subscribe(self):
645654
logging.basicConfig(level=logging.DEBUG) # make sure it's init'ed
646655
logger = logging.getLogger('recurly.http.request')
@@ -818,7 +827,7 @@ def test_subscribe(self):
818827
plan.delete()
819828

820829
with self.mock_request('subscription/show.xml'):
821-
sub = account.subscriptions()[0]
830+
sub = Subscription.get('123456789012345678901234567890ab')
822831
self.assertEqual(sub.tax_in_cents, 0)
823832
self.assertEqual(sub.tax_type, 'usst')
824833

0 commit comments

Comments
 (0)