def test_subscribe_add_on(self): plan = Plan( plan_code='basicplan', name='Basic Plan', setup_fee_in_cents=Money(0), unit_amount_in_cents=Money(1000), ) with self.mock_request('subscribe-add-on/plan-created.xml'): plan.save() try: add_on = AddOn( add_on_code='mock_add_on', name='Mock Add-On', unit_amount_in_cents=Money(100), ) with self.mock_request('subscribe-add-on/add-on-created.xml'): plan.create_add_on(add_on) second_add_on = AddOn( add_on_code='second_add_on', name='Second Add-On', unit_amount_in_cents=Money(50), ) with self.mock_request( 'subscribe-add-on/second-add-on-created.xml'): plan.create_add_on(second_add_on) account_code = 'sad-on-%s' % self.test_id sub = Subscription( plan_code='basicplan', subscription_add_ons=[ SubscriptionAddOn(add_on_code='mock_add_on', ), SubscriptionAddOn(add_on_code='second_add_on', ), ], currency='USD', account=Account( account_code=account_code, billing_info=BillingInfo( first_name='Verena', last_name='Example', number='4111 1111 1111 1111', verification_value='7777', year='2015', month='12', ), ), ) with self.mock_request('subscribe-add-on/subscribed.xml'): sub.save() with self.mock_request('subscribe-add-on/account-exists.xml'): account = Account.get(account_code) with self.mock_request('subscribe-add-on/account-deleted.xml'): account.delete() finally: with self.mock_request('subscribe-add-on/plan-deleted.xml'): plan.delete()
def test_preview_subscription_change(self): with self.mock_request('subscription/show.xml'): sub = Subscription.get('123456789012345678901234567890ab') with self.mock_request('subscription/change-preview.xml'): sub.quantity = 2 sub.preview() self.assertTrue(sub.invoice.line_items[0].amount_in_cents, 2000)
def test_subscribe(self): logging.basicConfig(level=logging.DEBUG) # make sure it's init'ed logger = logging.getLogger('recurly.http.request') logger.setLevel(logging.DEBUG) plan = Plan( plan_code='basicplan', name='Basic Plan', setup_fee_in_cents=Money(0), unit_amount_in_cents=Money(1000), ) with self.mock_request('subscription/plan-created.xml'): plan.save() try: account = Account(account_code='subscribe%s' % self.test_id) with self.mock_request('subscription/account-created.xml'): account.save() try: sub = Subscription( plan_code='basicplan', currency='USD', unit_amount_in_cents=1000, ) with self.mock_request( 'subscription/error-no-billing-info.xml'): try: account.subscribe(sub) except BadRequestError, exc: error = exc else: self.fail( "Subscribing with no billing info did not raise a BadRequestError" )
month='12', ) with self.mock_request('subscription/update-billing-info.xml'): account.update_billing_info(binfo) with self.mock_request('subscription/subscribed.xml'): account.subscribe(sub) self.assertTrue(sub._url) with self.mock_request('subscription/account-subscriptions.xml'): subs = account.subscriptions() self.assertTrue(len(subs) > 0) self.assertEqual(subs[0].uuid, sub.uuid) with self.mock_request('subscription/all-subscriptions.xml'): subs = Subscription.all() self.assertTrue(len(subs) > 0) self.assertEqual(subs[0].uuid, sub.uuid) with self.mock_request('subscription/cancelled.xml'): sub.cancel() with self.mock_request('subscription/reactivated.xml'): sub.reactivate() # Try modifying the subscription. sub.timeframe = 'renewal' sub.unit_amount_in_cents = 800 with self.mock_request('subscription/updated-at-renewal.xml'): sub.save() pending_sub = sub.pending_subscription self.assertTrue(isinstance(pending_sub, Subscription))
def test_subscribe(self): logging.basicConfig(level=logging.DEBUG) # make sure it's init'ed logger = logging.getLogger('recurly.http.request') logger.setLevel(logging.DEBUG) plan = Plan( plan_code='basicplan', name='Basic Plan', setup_fee_in_cents=Money(0), unit_amount_in_cents=Money(1000), ) with self.mock_request('subscription/plan-created.xml'): plan.save() try: account = Account(account_code='subscribe%s' % self.test_id) with self.mock_request('subscription/account-created.xml'): account.save() try: sub = Subscription( plan_code='basicplan', currency='USD', unit_amount_in_cents=1000, bulk=True ) with self.mock_request('subscription/error-no-billing-info.xml'): try: account.subscribe(sub) except BadRequestError as exc: error = exc else: self.fail("Subscribing with no billing info did not raise a BadRequestError") self.assertEqual(error.symbol, 'billing_info_required') binfo = BillingInfo( first_name='Verena', last_name='Example', address1='123 Main St', city=six.u('San Jos\xe9'), state='CA', zip='94105', country='US', type='credit_card', number='4111 1111 1111 1111', verification_value='7777', year='2015', month='12', ) with self.mock_request('subscription/update-billing-info.xml'): account.update_billing_info(binfo) with self.mock_request('subscription/subscribed.xml'): account.subscribe(sub) self.assertTrue(sub._url) manualsub = Subscription( plan_code='basicplan', currency='USD', net_terms=10, po_number='1000', collection_method='manual' ) with self.mock_request('subscription/subscribed-manual.xml'): account.subscribe(manualsub) self.assertTrue(manualsub._url) self.assertEqual(manualsub.net_terms, 10) self.assertEqual(manualsub.collection_method, 'manual') self.assertEqual(manualsub.po_number, '1000') with self.mock_request('subscription/account-subscriptions.xml'): subs = account.subscriptions() self.assertTrue(len(subs) > 0) self.assertEqual(subs[0].uuid, sub.uuid) with self.mock_request('subscription/all-subscriptions.xml'): subs = Subscription.all() self.assertTrue(len(subs) > 0) self.assertEqual(subs[0].uuid, sub.uuid) with self.mock_request('subscription/cancelled.xml'): sub.cancel() with self.mock_request('subscription/reactivated.xml'): sub.reactivate() # Try modifying the subscription. sub.timeframe = 'renewal' sub.unit_amount_in_cents = 800 with self.mock_request('subscription/updated-at-renewal.xml'): sub.save() pending_sub = sub.pending_subscription self.assertTrue(isinstance(pending_sub, Subscription)) self.assertEqual(pending_sub.unit_amount_in_cents, 800) self.assertEqual(sub.unit_amount_in_cents, 1000) with self.mock_request('subscription/terminated.xml'): sub.terminate(refund='none') log_content = StringIO() log_handler = logging.StreamHandler(log_content) logger.addHandler(log_handler) sub = Subscription( plan_code='basicplan', currency='USD', account=Account( account_code='subscribe%s' % self.test_id, billing_info=BillingInfo( first_name='Verena', last_name='Example', address1='123 Main St', city=six.u('San Jos\xe9'), state='CA', zip='94105', country='US', type='credit_card', number='4111 1111 1111 1111', verification_value='7777', year='2015', month='12', ), ), ) with self.mock_request('subscription/subscribed-billing-info.xml'): account.subscribe(sub) logger.removeHandler(log_handler) log_content = log_content.getvalue() self.assertTrue('<subscription' in log_content) self.assertTrue('<billing_info' in log_content) # See if we redacted our sensitive fields properly. self.assertTrue('4111' not in log_content) self.assertTrue('7777' not in log_content) finally: with self.mock_request('subscription/account-deleted.xml'): account.delete() account_code_2 = 'subscribe-%s-2' % self.test_id sub = Subscription( plan_code='basicplan', currency='USD', account=Account( account_code=account_code_2, billing_info=BillingInfo( first_name='Verena', last_name='Example', address1='123 Main St', city=six.u('San Jos\xe9'), state='CA', zip='94105', country='US', type='credit_card', number='4111 1111 1111 1111', verification_value='7777', year='2015', month='12', ), ), ) with self.mock_request('subscription/subscribe-embedded-account.xml'): sub.save() with self.mock_request('subscription/embedded-account-exists.xml'): acc = Account.get(account_code_2) self.assertEqual(acc.account_code, account_code_2) with self.mock_request('subscription/embedded-account-deleted.xml'): acc.delete() finally: with self.mock_request('subscription/plan-deleted.xml'): plan.delete() with self.mock_request('subscription/show.xml'): sub = Subscription.get('123456789012345678901234567890ab') self.assertEqual(sub.tax_in_cents, 0) self.assertEqual(sub.tax_type, 'usst')
def test_subscribe_add_on(self): plan = Plan( plan_code='basicplan', name='Basic Plan', setup_fee_in_cents=Money(0), unit_amount_in_cents=Money(1000), ) with self.mock_request('subscribe-add-on/plan-created.xml'): plan.save() try: add_on = AddOn( add_on_code='mock_add_on', name='Mock Add-On', unit_amount_in_cents=Money(100), ) with self.mock_request('subscribe-add-on/add-on-created.xml'): plan.create_add_on(add_on) second_add_on = AddOn( add_on_code='second_add_on', name='Second Add-On', unit_amount_in_cents=Money(50), ) with self.mock_request( 'subscribe-add-on/second-add-on-created.xml'): plan.create_add_on(second_add_on) account_code = 'sad-on-%s' % self.test_id sub = Subscription( plan_code='basicplan', subscription_add_ons=[ SubscriptionAddOn(add_on_code='mock_add_on', ), SubscriptionAddOn(add_on_code='second_add_on', ), ], currency='USD', account=Account( account_code=account_code, billing_info=BillingInfo( first_name='Verena', last_name='Example', number='4111 1111 1111 1111', address1='123 Main St', city='San Francisco', state='CA', zip='94105', country='US', verification_value='7777', year='2015', month='12', ), ), ) with self.mock_request('subscribe-add-on/subscribed.xml'): sub.save() # Subscription amounts are in one real currency, so they aren't Money instances. sub_amount = sub.unit_amount_in_cents self.assertTrue(not isinstance(sub_amount, Money)) self.assertEqual(sub_amount, 1000) # Test that the add-ons' amounts aren't real Money instances either. add_on_1, add_on_2 = sub.subscription_add_ons self.assertIsInstance(add_on_1, SubscriptionAddOn) amount_1 = add_on_1.unit_amount_in_cents self.assertTrue(not isinstance(amount_1, Money)) self.assertEqual(amount_1, 100) with self.mock_request('subscribe-add-on/account-exists.xml'): account = Account.get(account_code) with self.mock_request('subscribe-add-on/account-deleted.xml'): account.delete() finally: with self.mock_request('subscribe-add-on/plan-deleted.xml'): plan.delete()
def test_coupon(self): # Check that a coupon may not exist. coupon_code = 'coupon%s' % self.test_id with self.mock_request('coupon/does-not-exist.xml'): self.assertRaises(NotFoundError, Coupon.get, coupon_code) # Create a coupon? coupon = Coupon( coupon_code=coupon_code, name='Nice Coupon', discount_in_cents=Money(1000), ) with self.mock_request('coupon/created.xml'): coupon.save() self.assertTrue(coupon._url) try: with self.mock_request('coupon/exists.xml'): same_coupon = Coupon.get(coupon_code) self.assertEqual(same_coupon.coupon_code, coupon_code) self.assertEqual(same_coupon.name, 'Nice Coupon') discount = same_coupon.discount_in_cents self.assertEqual(discount['USD'], 1000) self.assertTrue('USD' in discount) account_code = 'coupon%s' % self.test_id account = Account(account_code=account_code) with self.mock_request('coupon/account-created.xml'): account.save() try: redemption = Redemption( account_code=account_code, currency='USD', ) with self.mock_request('coupon/redeemed.xml'): real_redemption = coupon.redeem(redemption) self.assertTrue(isinstance(real_redemption, Redemption)) self.assertEqual(real_redemption.currency, 'USD') with self.mock_request('coupon/account-with-redemption.xml'): account = Account.get(account_code) with self.mock_request('coupon/redemption-exists.xml'): same_redemption = account.redemption() self.assertEqual(same_redemption._url, real_redemption._url) with self.mock_request('coupon/unredeemed.xml'): real_redemption.delete() finally: with self.mock_request('coupon/account-deleted.xml'): account.delete() plan = Plan( plan_code='basicplan', name='Basic Plan', setup_fee_in_cents=Money(0), unit_amount_in_cents=Money(1000), ) with self.mock_request('coupon/plan-created.xml'): plan.save() try: account_code_2 = 'coupon-%s-2' % self.test_id sub = Subscription( plan_code='basicplan', coupon_code='coupon%s' % self.test_id, currency='USD', account=Account( account_code=account_code_2, billing_info=BillingInfo( first_name='Verena', last_name='Example', number='4111 1111 1111 1111', address1='123 Main St', city='San Francisco', state='CA', zip='94105', country='US', verification_value='7777', year='2015', month='12', ), ), ) with self.mock_request('coupon/subscribed.xml'): sub.save() with self.mock_request('coupon/second-account-exists.xml'): account_2 = Account.get(account_code_2) try: with self.mock_request( 'coupon/second-account-redemption.xml'): redemption_2 = account_2.redemption() self.assertTrue(isinstance(redemption_2, Redemption)) self.assertEqual(redemption_2.currency, 'USD') with self.mock_request('coupon/exists.xml'): same_coupon = redemption_2.coupon() self.assertEqual(same_coupon.coupon_code, coupon_code) finally: with self.mock_request( 'coupon/second-account-deleted.xml'): account_2.delete() plan_coupon = Coupon( coupon_code='plancoupon%s' % self.test_id, name='Plan Coupon', discount_in_cents=Money(1000), applies_to_all_plans=False, plan_codes=('basicplan', ), ) with self.mock_request('coupon/plan-coupon-created.xml'): plan_coupon.save() try: self.assertTrue(plan_coupon._url) coupon_plans = list(plan_coupon.plan_codes) self.assertEqual(len(coupon_plans), 1) self.assertEqual(coupon_plans[0], 'basicplan') finally: with self.mock_request('coupon/plan-coupon-deleted.xml'): plan_coupon.delete() finally: with self.mock_request('coupon/plan-deleted.xml'): plan.delete() finally: with self.mock_request('coupon/deleted.xml'): coupon.delete()
def test_subscribe(self): logging.basicConfig(level=logging.DEBUG) # make sure it's init'ed logger = logging.getLogger('recurly.http.request') logger.setLevel(logging.DEBUG) plan = Plan( plan_code='basicplan', name='Basic Plan', setup_fee_in_cents=Money(0), unit_amount_in_cents=Money(1000), ) with self.mock_request('subscription/plan-created.xml'): plan.save() try: account = Account(account_code='subscribe%s' % self.test_id) with self.mock_request('subscription/account-created.xml'): account.save() try: sub = Subscription( plan_code='basicplan', currency='USD', unit_amount_in_cents=1000, ) with self.mock_request('subscription/error-no-billing-info.xml'): try: account.subscribe(sub) except BadRequestError as exc: error = exc else: self.fail("Subscribing with no billing info did not raise a BadRequestError") self.assertEqual(error.symbol, 'billing_info_required') binfo = BillingInfo( first_name='Verena', last_name='Example', address1='123 Main St', city=six.u('San Jos\xe9'), state='CA', zip='94105', country='US', type='credit_card', number='4111 1111 1111 1111', verification_value='7777', year='2015', month='12', ) with self.mock_request('subscription/update-billing-info.xml'): account.update_billing_info(binfo) with self.mock_request('subscription/subscribed.xml'): account.subscribe(sub) self.assertTrue(sub._url) manualsub = Subscription( plan_code='basicplan', currency='USD', net_terms=10, po_number='1000', collection_method='manual' ) with self.mock_request('subscription/subscribed-manual.xml'): account.subscribe(manualsub) self.assertTrue(manualsub._url) self.assertEqual(manualsub.net_terms, 10) self.assertEqual(manualsub.collection_method, 'manual') self.assertEqual(manualsub.po_number, '1000') with self.mock_request('subscription/account-subscriptions.xml'): subs = account.subscriptions() self.assertTrue(len(subs) > 0) self.assertEqual(subs[0].uuid, sub.uuid) with self.mock_request('subscription/all-subscriptions.xml'): subs = Subscription.all() self.assertTrue(len(subs) > 0) self.assertEqual(subs[0].uuid, sub.uuid) with self.mock_request('subscription/cancelled.xml'): sub.cancel() with self.mock_request('subscription/reactivated.xml'): sub.reactivate() # Try modifying the subscription. sub.timeframe = 'renewal' sub.unit_amount_in_cents = 800 with self.mock_request('subscription/updated-at-renewal.xml'): sub.save() pending_sub = sub.pending_subscription self.assertTrue(isinstance(pending_sub, Subscription)) self.assertEqual(pending_sub.unit_amount_in_cents, 800) self.assertEqual(sub.unit_amount_in_cents, 1000) with self.mock_request('subscription/terminated.xml'): sub.terminate(refund='none') log_content = StringIO() log_handler = logging.StreamHandler(log_content) logger.addHandler(log_handler) sub = Subscription( plan_code='basicplan', currency='USD', account=Account( account_code='subscribe%s' % self.test_id, billing_info=BillingInfo( first_name='Verena', last_name='Example', address1='123 Main St', city=six.u('San Jos\xe9'), state='CA', zip='94105', country='US', type='credit_card', number='4111 1111 1111 1111', verification_value='7777', year='2015', month='12', ), ), ) with self.mock_request('subscription/subscribed-billing-info.xml'): account.subscribe(sub) logger.removeHandler(log_handler) log_content = log_content.getvalue() self.assertTrue('<subscription' in log_content) self.assertTrue('<billing_info' in log_content) # See if we redacted our sensitive fields properly. self.assertTrue('4111' not in log_content) self.assertTrue('7777' not in log_content) finally: with self.mock_request('subscription/account-deleted.xml'): account.delete() account_code_2 = 'subscribe-%s-2' % self.test_id sub = Subscription( plan_code='basicplan', currency='USD', account=Account( account_code=account_code_2, billing_info=BillingInfo( first_name='Verena', last_name='Example', address1='123 Main St', city=six.u('San Jos\xe9'), state='CA', zip='94105', country='US', type='credit_card', number='4111 1111 1111 1111', verification_value='7777', year='2015', month='12', ), ), ) with self.mock_request('subscription/subscribe-embedded-account.xml'): sub.save() with self.mock_request('subscription/embedded-account-exists.xml'): acc = Account.get(account_code_2) self.assertEqual(acc.account_code, account_code_2) with self.mock_request('subscription/embedded-account-deleted.xml'): acc.delete() finally: with self.mock_request('subscription/plan-deleted.xml'): plan.delete()
def test_subscribe_add_on(self): plan = Plan( plan_code="basicplan", name="Basic Plan", setup_fee_in_cents=Money(0), unit_amount_in_cents=Money(1000) ) with self.mock_request("subscribe-add-on/plan-created.xml"): plan.save() try: add_on = AddOn(add_on_code="mock_add_on", name="Mock Add-On", unit_amount_in_cents=Money(100)) with self.mock_request("subscribe-add-on/add-on-created.xml"): plan.create_add_on(add_on) second_add_on = AddOn(add_on_code="second_add_on", name="Second Add-On", unit_amount_in_cents=Money(50)) with self.mock_request("subscribe-add-on/second-add-on-created.xml"): plan.create_add_on(second_add_on) account_code = "sad-on-%s" % self.test_id sub = Subscription( plan_code="basicplan", subscription_add_ons=[ SubscriptionAddOn(add_on_code="mock_add_on"), SubscriptionAddOn(add_on_code="second_add_on"), ], currency="USD", account=Account( account_code=account_code, billing_info=BillingInfo( first_name="Verena", last_name="Example", number="4111 1111 1111 1111", address1="123 Main St", city="San Francisco", state="CA", zip="94105", country="US", verification_value="7777", year="2015", month="12", ), ), ) with self.mock_request("subscribe-add-on/subscribed.xml"): sub.save() # Subscription amounts are in one real currency, so they aren't Money instances. sub_amount = sub.unit_amount_in_cents self.assertTrue(not isinstance(sub_amount, Money)) self.assertEqual(sub_amount, 1000) # Test that the add-ons' amounts aren't real Money instances either. add_on_1, add_on_2 = sub.subscription_add_ons self.assertIsInstance(add_on_1, SubscriptionAddOn) amount_1 = add_on_1.unit_amount_in_cents self.assertTrue(not isinstance(amount_1, Money)) self.assertEqual(amount_1, 100) with self.mock_request("subscribe-add-on/account-exists.xml"): account = Account.get(account_code) with self.mock_request("subscribe-add-on/account-deleted.xml"): account.delete() finally: with self.mock_request("subscribe-add-on/plan-deleted.xml"): plan.delete()
def test_subscribe(self): logging.basicConfig(level=logging.DEBUG) # make sure it's init'ed logger = logging.getLogger("recurly.http.request") logger.setLevel(logging.DEBUG) plan = Plan( plan_code="basicplan", name="Basic Plan", setup_fee_in_cents=Money(0), unit_amount_in_cents=Money(1000) ) with self.mock_request("subscription/plan-created.xml"): plan.save() try: account = Account(account_code="subscribe%s" % self.test_id) with self.mock_request("subscription/account-created.xml"): account.save() try: sub = Subscription( plan_code="basicplan", currency="USD", unit_amount_in_cents=1000, bulk=True, terms_and_conditions="Some Terms and Conditions", customer_notes="Some Customer Notes", ) with self.mock_request("subscription/error-no-billing-info.xml"): try: account.subscribe(sub) except BadRequestError as exc: error = exc else: self.fail("Subscribing with no billing info did not raise a BadRequestError") self.assertEqual(error.symbol, "billing_info_required") binfo = BillingInfo( first_name="Verena", last_name="Example", address1="123 Main St", city=six.u("San Jos\xe9"), state="CA", zip="94105", country="US", type="credit_card", number="4111 1111 1111 1111", verification_value="7777", year="2015", month="12", ) with self.mock_request("subscription/update-billing-info.xml"): account.update_billing_info(binfo) with self.mock_request("subscription/subscribed.xml"): account.subscribe(sub) self.assertTrue(sub._url) manualsub = Subscription( plan_code="basicplan", currency="USD", net_terms=10, po_number="1000", collection_method="manual" ) with self.mock_request("subscription/subscribed-manual.xml"): account.subscribe(manualsub) self.assertTrue(manualsub._url) self.assertEqual(manualsub.net_terms, 10) self.assertEqual(manualsub.collection_method, "manual") self.assertEqual(manualsub.po_number, "1000") with self.mock_request("subscription/account-subscriptions.xml"): subs = account.subscriptions() self.assertTrue(len(subs) > 0) self.assertEqual(subs[0].uuid, sub.uuid) with self.mock_request("subscription/all-subscriptions.xml"): subs = Subscription.all() self.assertTrue(len(subs) > 0) self.assertEqual(subs[0].uuid, sub.uuid) with self.mock_request("subscription/cancelled.xml"): sub.cancel() with self.mock_request("subscription/reactivated.xml"): sub.reactivate() # Try modifying the subscription. sub.timeframe = "renewal" sub.unit_amount_in_cents = 800 with self.mock_request("subscription/updated-at-renewal.xml"): sub.save() pending_sub = sub.pending_subscription self.assertTrue(isinstance(pending_sub, Subscription)) self.assertEqual(pending_sub.unit_amount_in_cents, 800) self.assertEqual(sub.unit_amount_in_cents, 1000) with self.mock_request("subscription/terminated.xml"): sub.terminate(refund="none") log_content = StringIO() log_handler = logging.StreamHandler(log_content) logger.addHandler(log_handler) sub = Subscription( plan_code="basicplan", currency="USD", account=Account( account_code="subscribe%s" % self.test_id, billing_info=BillingInfo( first_name="Verena", last_name="Example", address1="123 Main St", city=six.u("San Jos\xe9"), state="CA", zip="94105", country="US", type="credit_card", number="4111 1111 1111 1111", verification_value="7777", year="2015", month="12", ), ), ) with self.mock_request("subscription/subscribed-billing-info.xml"): account.subscribe(sub) logger.removeHandler(log_handler) log_content = log_content.getvalue() self.assertTrue("<subscription" in log_content) self.assertTrue("<billing_info" in log_content) # See if we redacted our sensitive fields properly. self.assertTrue("4111" not in log_content) self.assertTrue("7777" not in log_content) finally: with self.mock_request("subscription/account-deleted.xml"): account.delete() account_code_2 = "subscribe-%s-2" % self.test_id sub = Subscription( plan_code="basicplan", currency="USD", account=Account( account_code=account_code_2, billing_info=BillingInfo( first_name="Verena", last_name="Example", address1="123 Main St", city=six.u("San Jos\xe9"), state="CA", zip="94105", country="US", type="credit_card", number="4111 1111 1111 1111", verification_value="7777", year="2015", month="12", ), ), ) with self.mock_request("subscription/subscribe-embedded-account.xml"): sub.save() with self.mock_request("subscription/embedded-account-exists.xml"): acc = Account.get(account_code_2) self.assertEqual(acc.account_code, account_code_2) with self.mock_request("subscription/embedded-account-deleted.xml"): acc.delete() finally: with self.mock_request("subscription/plan-deleted.xml"): plan.delete() with self.mock_request("subscription/show.xml"): sub = Subscription.get("123456789012345678901234567890ab") self.assertEqual(sub.tax_in_cents, 0) self.assertEqual(sub.tax_type, "usst") with self.mock_request("subscription/redemptions.xml"): self.assertEqual(type(sub.redemptions()), recurly.resource.Page)
def test_coupon(self): # Check that a coupon may not exist. coupon_code = "coupon%s" % self.test_id with self.mock_request("coupon/does-not-exist.xml"): self.assertRaises(NotFoundError, Coupon.get, coupon_code) # Create a coupon? coupon = Coupon( coupon_code=coupon_code, name="Nice Coupon", discount_in_cents=Money(1000), hosted_description="Nice Description", invoice_description="Invoice description", ) with self.mock_request("coupon/created.xml"): coupon.save() self.assertTrue(coupon._url) try: with self.mock_request("coupon/exists.xml"): same_coupon = Coupon.get(coupon_code) self.assertEqual(same_coupon.coupon_code, coupon_code) self.assertEqual(same_coupon.name, "Nice Coupon") self.assertEqual(same_coupon.invoice_description, "Invoice description") discount = same_coupon.discount_in_cents self.assertEqual(discount["USD"], 1000) self.assertTrue("USD" in discount) self.assertIsNotNone(same_coupon.hosted_description) account_code = "coupon%s" % self.test_id account = Account(account_code=account_code) with self.mock_request("coupon/account-created.xml"): account.save() try: redemption = Redemption(account_code=account_code, currency="USD") with self.mock_request("coupon/redeemed.xml"): real_redemption = coupon.redeem(redemption) self.assertTrue(isinstance(real_redemption, Redemption)) self.assertEqual(real_redemption.currency, "USD") with self.mock_request("coupon/account-with-redemption.xml"): account = Account.get(account_code) with self.mock_request("coupon/redemption-exists.xml"): same_redemption = account.redemption() self.assertEqual(same_redemption._url, real_redemption._url) with self.mock_request("coupon/unredeemed.xml"): real_redemption.delete() finally: with self.mock_request("coupon/account-deleted.xml"): account.delete() plan = Plan( plan_code="basicplan", name="Basic Plan", setup_fee_in_cents=Money(0), unit_amount_in_cents=Money(1000) ) with self.mock_request("coupon/plan-created.xml"): plan.save() try: account_code_2 = "coupon-%s-2" % self.test_id sub = Subscription( plan_code="basicplan", coupon_code="coupon%s" % self.test_id, currency="USD", account=Account( account_code=account_code_2, billing_info=BillingInfo( first_name="Verena", last_name="Example", number="4111 1111 1111 1111", address1="123 Main St", city="San Francisco", state="CA", zip="94105", country="US", verification_value="7777", year="2015", month="12", ), ), ) with self.mock_request("coupon/subscribed.xml"): sub.save() with self.mock_request("coupon/second-account-exists.xml"): account_2 = Account.get(account_code_2) try: with self.mock_request("coupon/second-account-redemption.xml"): redemption_2 = account_2.redemption() self.assertTrue(isinstance(redemption_2, Redemption)) self.assertEqual(redemption_2.currency, "USD") with self.mock_request("coupon/exists.xml"): same_coupon = redemption_2.coupon() self.assertEqual(same_coupon.coupon_code, coupon_code) finally: with self.mock_request("coupon/second-account-deleted.xml"): account_2.delete() plan_coupon = Coupon( coupon_code="plancoupon%s" % self.test_id, name="Plan Coupon", discount_in_cents=Money(1000), invoice_description="Invoice description", applies_to_all_plans=False, plan_codes=("basicplan",), applies_to_non_plan_charges=True, redemption_resource="subscription", max_redemptions_per_account=1, ) with self.mock_request("coupon/plan-coupon-created.xml"): plan_coupon.save() try: self.assertTrue(plan_coupon._url) self.assertFalse(plan_coupon.has_unlimited_redemptions_per_account()) coupon_plans = list(plan_coupon.plan_codes) self.assertEqual(len(coupon_plans), 1) self.assertEqual(coupon_plans[0], "basicplan") finally: with self.mock_request("coupon/plan-coupon-deleted.xml"): plan_coupon.delete() finally: with self.mock_request("coupon/plan-deleted.xml"): plan.delete() finally: with self.mock_request("coupon/deleted.xml"): coupon.delete()
import recurly from recurly import Subscription recurly.SUBDOMAIN = "moboware" recurly.API_KEY = "643b428845334d0daafb319e83fc3b46" # client version <= 2.1.5 # subscriptions = Subscription.all() # while subscriptions: # for subscription in subscriptions: # print 'Subscription: %s' % subscription # try: # subscriptions = subscriptions.next_page() # except PageError: # subscriptions = () # client version 2.1.6+ # get all subscriptions for subscription in Subscription.all(): print "Subscription: %s" % subscription print dir(subscription)
def test_coupon(self): # Check that a coupon may not exist. coupon_code = 'coupon%s' % self.test_id with self.mock_request('coupon/does-not-exist.xml'): self.assertRaises(NotFoundError, Coupon.get, coupon_code) # Create a coupon? coupon = Coupon( coupon_code=coupon_code, name='Nice Coupon', discount_in_cents=Money(1000), ) with self.mock_request('coupon/created.xml'): coupon.save() self.assertTrue(coupon._url) try: with self.mock_request('coupon/exists.xml'): same_coupon = Coupon.get(coupon_code) self.assertEqual(same_coupon.coupon_code, coupon_code) self.assertEqual(same_coupon.name, 'Nice Coupon') discount = same_coupon.discount_in_cents self.assertEqual(discount['USD'], 1000) self.assertTrue('USD' in discount) account_code = 'coupon%s' % self.test_id account = Account(account_code=account_code) with self.mock_request('coupon/account-created.xml'): account.save() try: redemption = Redemption( account_code=account_code, currency='USD', ) with self.mock_request('coupon/redeemed.xml'): real_redemption = coupon.redeem(redemption) self.assertTrue(isinstance(real_redemption, Redemption)) self.assertEqual(real_redemption.currency, 'USD') with self.mock_request('coupon/account-with-redemption.xml'): account = Account.get(account_code) with self.mock_request('coupon/redemption-exists.xml'): same_redemption = account.redemption() self.assertEqual(same_redemption._url, real_redemption._url) with self.mock_request('coupon/unredeemed.xml'): real_redemption.delete() finally: with self.mock_request('coupon/account-deleted.xml'): account.delete() plan = Plan( plan_code='basicplan', name='Basic Plan', setup_fee_in_cents=Money(0), unit_amount_in_cents=Money(1000), ) with self.mock_request('coupon/plan-created.xml'): plan.save() try: account_code_2 = 'coupon-%s-2' % self.test_id sub = Subscription( plan_code='basicplan', coupon_code='coupon%s' % self.test_id, currency='USD', account=Account( account_code=account_code_2, billing_info=BillingInfo( first_name='Verena', last_name='Example', number='4111 1111 1111 1111', address1='123 Main St', city='San Francisco', state='CA', zip='94105', country='US', verification_value='7777', year='2015', month='12', ), ), ) with self.mock_request('coupon/subscribed.xml'): sub.save() with self.mock_request('coupon/second-account-exists.xml'): account_2 = Account.get(account_code_2) try: with self.mock_request('coupon/second-account-redemption.xml'): redemption_2 = account_2.redemption() self.assertTrue(isinstance(redemption_2, Redemption)) self.assertEqual(redemption_2.currency, 'USD') with self.mock_request('coupon/exists.xml'): same_coupon = redemption_2.coupon() self.assertEqual(same_coupon.coupon_code, coupon_code) finally: with self.mock_request('coupon/second-account-deleted.xml'): account_2.delete() plan_coupon = Coupon( coupon_code='plancoupon%s' % self.test_id, name='Plan Coupon', discount_in_cents=Money(1000), applies_to_all_plans=False, plan_codes=('basicplan',), ) with self.mock_request('coupon/plan-coupon-created.xml'): plan_coupon.save() try: self.assertTrue(plan_coupon._url) coupon_plans = list(plan_coupon.plan_codes) self.assertEqual(len(coupon_plans), 1) self.assertEqual(coupon_plans[0], 'basicplan') finally: with self.mock_request('coupon/plan-coupon-deleted.xml'): plan_coupon.delete() finally: with self.mock_request('coupon/plan-deleted.xml'): plan.delete() finally: with self.mock_request('coupon/deleted.xml'): coupon.delete()
) with self.mock_request('subscription/update-billing-info.xml'): account.update_billing_info(binfo) with self.mock_request('subscription/subscribed.xml'): account.subscribe(sub) self.assertTrue(sub._url) with self.mock_request( 'subscription/account-subscriptions.xml'): subs = account.subscriptions() self.assertTrue(len(subs) > 0) self.assertEqual(subs[0].uuid, sub.uuid) with self.mock_request('subscription/all-subscriptions.xml'): subs = Subscription.all() self.assertTrue(len(subs) > 0) self.assertEqual(subs[0].uuid, sub.uuid) with self.mock_request('subscription/cancelled.xml'): sub.cancel() with self.mock_request('subscription/reactivated.xml'): sub.reactivate() # Try modifying the subscription. sub.timeframe = 'renewal' sub.unit_amount_in_cents = 800 with self.mock_request('subscription/updated-at-renewal.xml'): sub.save() pending_sub = sub.pending_subscription self.assertTrue(isinstance(pending_sub, Subscription))
def test_subscribe_add_on(self): plan = Plan( plan_code='basicplan', name='Basic Plan', setup_fee_in_cents=Money(0), unit_amount_in_cents=Money(1000), ) with self.mock_request('subscribe-add-on/plan-created.xml'): plan.save() try: add_on = AddOn( add_on_code='mock_add_on', name='Mock Add-On', unit_amount_in_cents=Money(100), ) with self.mock_request('subscribe-add-on/add-on-created.xml'): plan.create_add_on(add_on) second_add_on = AddOn( add_on_code='second_add_on', name='Second Add-On', unit_amount_in_cents=Money(50), ) with self.mock_request('subscribe-add-on/second-add-on-created.xml'): plan.create_add_on(second_add_on) account_code='sad-on-%s' % self.test_id sub = Subscription( plan_code='basicplan', subscription_add_ons=[ SubscriptionAddOn( add_on_code='mock_add_on', ), SubscriptionAddOn( add_on_code='second_add_on', ), ], currency='USD', account=Account( account_code=account_code, billing_info=BillingInfo( first_name='Verena', last_name='Example', number='4111 1111 1111 1111', address1='123 Main St', city='San Francisco', state='CA', zip='94105', country='US', verification_value='7777', year='2015', month='12', ), ), ) with self.mock_request('subscribe-add-on/subscribed.xml'): sub.save() # Subscription amounts are in one real currency, so they aren't Money instances. sub_amount = sub.unit_amount_in_cents self.assertTrue(not isinstance(sub_amount, Money)) self.assertEqual(sub_amount, 1000) # Test that the add-ons' amounts aren't real Money instances either. add_on_1, add_on_2 = sub.subscription_add_ons self.assertIsInstance(add_on_1, SubscriptionAddOn) amount_1 = add_on_1.unit_amount_in_cents self.assertTrue(not isinstance(amount_1, Money)) self.assertEqual(amount_1, 100) with self.mock_request('subscribe-add-on/account-exists.xml'): account = Account.get(account_code) with self.mock_request('subscribe-add-on/account-deleted.xml'): account.delete() finally: with self.mock_request('subscribe-add-on/plan-deleted.xml'): plan.delete()
def test_subscribe_add_on(self): plan = Plan( plan_code='basicplan', name='Basic Plan', setup_fee_in_cents=Money(0), unit_amount_in_cents=Money(1000), ) with self.mock_request('subscribe-add-on/plan-created.xml'): plan.save() try: add_on = AddOn( add_on_code='mock_add_on', name='Mock Add-On', unit_amount_in_cents=Money(100), ) with self.mock_request('subscribe-add-on/add-on-created.xml'): plan.create_add_on(add_on) second_add_on = AddOn( add_on_code='second_add_on', name='Second Add-On', unit_amount_in_cents=Money(50), ) with self.mock_request('subscribe-add-on/second-add-on-created.xml'): plan.create_add_on(second_add_on) account_code='sad-on-%s' % self.test_id sub = Subscription( plan_code='basicplan', subscription_add_ons=[ SubscriptionAddOn( add_on_code='mock_add_on', ), SubscriptionAddOn( add_on_code='second_add_on', ), ], currency='USD', account=Account( account_code=account_code, billing_info=BillingInfo( first_name='Verena', last_name='Example', number='4111 1111 1111 1111', verification_value='7777', year='2015', month='12', ), ), ) with self.mock_request('subscribe-add-on/subscribed.xml'): sub.save() with self.mock_request('subscribe-add-on/account-exists.xml'): account = Account.get(account_code) with self.mock_request('subscribe-add-on/account-deleted.xml'): account.delete() finally: with self.mock_request('subscribe-add-on/plan-deleted.xml'): plan.delete()