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()