def _create_coupon_code(): from recurly import Coupon coupon = Coupon(coupon_code='coupon_code_%s' % int(time.time()), duration='single_use', applies_to_all_plans=True, discount_type='percent', discount_percent=10, name='test coupon') coupon.save() return coupon
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_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_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()
def redeem_coupon(self, coupon_code): from recurly import Coupon, Redemption coupon = Coupon.get(coupon_code) redemption = Redemption(account_code=self.account_code) redemption = coupon.redeem(redemption) return redemption