def test_parse_integer(self): xml = """ <unit_amount_in_cents type="integer">2990</unit_amount_in_cents> """ recurly = Recurly() result = recurly.xml_to_dict(xml) self.assertEqual(type(result), int) self.assertEqual(result, 2990)
def test_get_invoice(self): recurly = Recurly(username=USERNAME, password=PASSWORD, subdomain=SUBDOMAIN) list_result = recurly.accounts.invoices(account_code=ACCOUNT_WITH_INVOICE) get_result = recurly.invoices(invoice_id=list_result['invoice'][0]['id']) self.assertEqual(type(get_result), types.DictType)
def test_parse_datetime(self): xml = """ <activated_at type="datetime">2010-01-23T21:37:31-08:00</activated_at> """ recurly = Recurly() result = recurly.xml_to_dict(xml) self.assertEqual(type(result), datetime.datetime) self.assertEqual(result, datetime.datetime(2010, 1, 24, 5, 37, 31)) self.assertEqual(result.tzinfo, None)
def handle_notification(request): if request.method == 'POST': xml = request.raw_post_data recurly = Recurly(**settings.RECURLY) note_type = recurly.parse_notification(xml) note_data = recurly.response print note_type, note_data
def test_list_accounts(self): recurly = Recurly(username=USERNAME, password=PASSWORD, subdomain=SUBDOMAIN) account_code = str(random.randint(0,10000000)) self.create_account(account_code=account_code) list_result = recurly.accounts() self.assertEqual(type(list_result), types.DictType) self.assertEqual(type(list_result['account']), types.ListType)
def test_parse_datetime_notz(self): """ Not sure why, but we also see this in the recurly XML output. """ xml = """ <created_at type="datetime">2011-06-07T16:04:01Z</created_at> """ recurly = Recurly() result = recurly.xml_to_dict(xml) self.assertEqual(type(result), datetime.datetime) self.assertEqual(result, datetime.datetime(2011, 6, 7, 16, 4, 1)) self.assertEqual(result.tzinfo, None)
def test_get_account(self): recurly = Recurly(username=USERNAME, password=PASSWORD, subdomain=SUBDOMAIN) account_code = str(random.randint(0,10000000)) self.create_account(account_code=account_code) get_result = recurly.accounts(account_code=account_code) self.assertEqual(type(get_result), types.DictType) self.assertNotEqual(get_result['created_at'], None) self.assertEqual(get_result['account_code'], self.create_account_result['account_code']); self.assertEqual(get_result['email'], self.create_account_result['email']); self.assertEqual(get_result['first_name'], self.create_account_result['first_name']); self.assertEqual(get_result['last_name'], self.create_account_result['last_name']);
def setUp(self): self.recurly = Recurly(username=USERNAME, password=PASSWORD, subdomain=SUBDOMAIN, private_key=PRIVATE_KEY) self.trans_post_data = dict( redirect_url="http://your-website.com/subscribe", account=dict(account_code="my_account_code"), subscription=dict(plan_code="my_plan_code"), )
class TransparentPostTestCase(unittest.TestCase): """ Test the generation of signed data for transparent POST operations. TODO: these tests don't actually verify that the generated signature correctly follows Recurly's specs. I've tested, manually, that it does. But it would be better to actually generate a transparent POST request and send it to recurly to verify that the signature is accepted. """ def setUp(self): self.recurly = Recurly(username=USERNAME, password=PASSWORD, subdomain=SUBDOMAIN, private_key=PRIVATE_KEY) self.trans_post_data = dict( redirect_url="http://your-website.com/subscribe", account=dict(account_code="my_account_code"), subscription=dict(plan_code="my_plan_code"), ) def test_transparent_post(self): trans_post_sig = self.recurly.transparent_post_encode(self.trans_post_data) parts = trans_post_sig.split("|") self.assertEqual(len(parts), 2) self.assertTrue("time=" in parts[1]) self.assertTrue("subscription%5Bplan_code%5D=my_plan_code" in parts[1]) def test_required_attrs(self): # Grrr... python 2.5 has no "assertRaises" trans_post_sig = self.recurly.transparent_post_encode(self.trans_post_data) self.assertTrue(trans_post_sig) data_copy = dict(self.trans_post_data) del data_copy["redirect_url"] try: self.recurly.transparent_post_encode(data_copy) except ValueError: pass else: self.fail("ValueError not thrown.") data_copy = dict(self.trans_post_data) del data_copy["account"] try: self.recurly.transparent_post_encode(data_copy) except ValueError: pass else: self.fail("ValueError not thrown.") data_copy = dict(self.trans_post_data) del data_copy["account"]["account_code"] try: self.recurly.transparent_post_encode(data_copy) except ValueError: pass else: self.fail("ValueError not thrown.")
def test_subscription_notification(self): recurly = Recurly() xml = """ <?xml version="1.0" encoding="UTF-8"?> <new_subscription_notification> <account> <account_code>123</account_code> <username>user</username> <email>[email protected]</email> <first_name>Verena</first_name> <last_name>Test</last_name> <company_name></company_name> </account> <subscription> <plan> <plan_code>daily</plan_code> <name>daily</name> <version type="integer">2</version> </plan> <state>pending</state> <quantity type="integer">1</quantity> <total_amount_in_cents type="integer">245</total_amount_in_cents> <activated_at type="datetime">2010-01-23T21:37:31-08:00</activated_at> <canceled_at type="datetime"></canceled_at> <expires_at type="datetime"></expires_at> <current_period_started_at type="datetime">2010-01-23T21:37:31-08:00</current_period_started_at> <current_period_ends_at type="datetime">2010-01-24T21:37:31-08:00</current_period_ends_at> <trial_started_at type="datetime"></trial_started_at> <trial_ends_at type="datetime"></trial_ends_at> </subscription> </new_subscription_notification> """ note_type = recurly.parse_notification(xml) note_data = recurly.response self.assertEqual(note_type, 'new_subscription_notification') self.assertEqual(note_data['account']['account_code'], '123') self.assertEqual(note_data['subscription']['state'], 'pending')
def test_account_notification(self): recurly = Recurly() xml = """ <?xml version="1.0" encoding="UTF-8"?> <new_account_notification> <account> <account_code>test_account</account_code> <username>user</username> <email>[email protected]</email> <first_name>Verena</first_name> <last_name>Test</last_name> <company_name></company_name> </account> </new_account_notification> """ note_type = recurly.parse_notification(xml) note_data = recurly.response self.assertEqual(note_type, 'new_account_notification') self.assertEqual(note_data['account']['account_code'], 'test_account') self.assertEqual(note_data['account']['first_name'], 'Verena')
def get_client(): return Recurly( username=settings.RECURLY_USERNAME, password=settings.RECURLY_PASSWORD, subdomain=settings.RECURLY_SUBDOMAIN, )