def test_mark_old_credit_cards(self, session, credit_cards): """ Credit cards that are about to expire should get marked. """ may_29_2015 = datetime.date(2015, 05, 29) june_29_2015 = datetime.date(2015, 06, 29) CreditCard.mark_old_credit_cards(may_29_2015) card = CreditCard.query.filter(CreditCard.exp_date == june_29_2015) assert True == card.first().is_expiring
def test_avoid_marking_up_to_date_credit_cards(self, session, credit_cards): """ Credit cards that are not expiring should not be marked. """ may_29_2015 = datetime.date(2015, 05, 29) may_28_2016 = datetime.date(2016, 05, 28) CreditCard.mark_old_credit_cards(may_29_2015) card = CreditCard.query.filter(CreditCard.exp_date == may_28_2016) assert False == card.first().is_expiring
def create(self, user=None, name=None, plan=None, coupon=None, token=None): """ Create a recurring subscription. :param user: User to apply the subscription to :type user: User instance :param name: User's billing name :type name: str :param plan: Plan identifier :type plan: str :param coupon: Coupon code to apply :type coupon: str :param token: Token returned by javascript :type token: str :return: bool """ if token is None: return False if coupon: self.coupon = coupon.upper() customer = PaymentSubscription.create(token=token, email=user.email, plan=plan, coupon=self.coupon) # Update the user account. user.payment_id = customer.id user.name = name user.cancelled_subscription_on = None # Set the subscription details. self.user_id = user.id self.plan = plan # Redeem the coupon. if coupon: coupon = Coupon.query.filter(Coupon.code == self.coupon).first() coupon.redeem() # Create the credit card. credit_card = CreditCard(user_id=user.id, **CreditCard.extract_card_params(customer)) db.session.add(user) db.session.add(credit_card) db.session.add(self) db.session.commit() return True
def update_payment_method(self, user=None, name=None, token=None): """ Update the subscription. :param user: User to apply the subscription to :type user: User instance :param name: User's billing name :type name: str :param token: Token returned by javascript :type token: str :return: bool """ if token is None: return False customer = PaymentCard.update(user.payment_id, token) user.name = name # Create the new credit card. credit_card = CreditCard(user_id=user.id, **CreditCard.extract_card_params(customer)) db.session.add(user) db.session.delete(user.credit_card) db.session.add(credit_card) db.session.commit() return True
def mark_old_credit_cards(): """ Mark credit cards that are going to expire soon or have expired. :return: Result of updating the records """ return CreditCard.mark_old_credit_cards()
def test_credit_card_not_expiring_soon(self): """ Credit card is not expiring soon. """ may_29_2015 = datetime.date(2015, 05, 29) exp_dates = ( datetime.date(2015, 8, 28), datetime.date(2016, 1, 1), datetime.date(2016, 5, 29) ) for date in exp_dates: assert CreditCard.is_expiring_soon(may_29_2015, date) is False
def test_credit_card_expiring_soon(self): """ Credit card is expiring soon. """ may_29_2015 = datetime.date(2015, 05, 29) exp_dates = ( datetime.date(2000, 1, 1), datetime.date(2015, 6, 3), datetime.date(2015, 7, 1) ) for date in exp_dates: assert CreditCard.is_expiring_soon(may_29_2015, date)