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)
Example #4
0
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')
Example #12
0
def get_client():
    return Recurly(
        username=settings.RECURLY_USERNAME,
        password=settings.RECURLY_PASSWORD,
        subdomain=settings.RECURLY_SUBDOMAIN,
    )