Beispiel #1
0
    def test_cancel_and_reactivate(self, customer_retrieve_mock,
                                   subscription_retrieve_mock,
                                   plan_retrieve_mock):
        current_period_end = timezone.now() + timezone.timedelta(days=7)

        subscription_fake = deepcopy(FAKE_SUBSCRIPTION)
        subscription = Subscription.sync_from_stripe_data(subscription_fake)
        subscription.current_period_end = current_period_end
        subscription.save()

        canceled_subscription_fake = deepcopy(FAKE_SUBSCRIPTION)
        canceled_subscription_fake["current_period_end"] = datetime_to_unix(
            current_period_end)
        canceled_subscription_fake["canceled_at"] = datetime_to_unix(
            timezone.now())
        subscription_retrieve_mock.return_value = canceled_subscription_fake

        self.assertTrue(self.customer.has_active_subscription())
        self.assertTrue(self.customer.has_any_active_subscription())

        new_subscription = subscription.cancel(at_period_end=True)
        self.assertEqual(new_subscription.cancel_at_period_end, True)

        new_subscription.reactivate()
        subscription_reactivate_fake = deepcopy(FAKE_SUBSCRIPTION)
        reactivated_subscription = Subscription.sync_from_stripe_data(
            subscription_reactivate_fake)
        self.assertEqual(reactivated_subscription.cancel_at_period_end, False)
Beispiel #2
0
    def test_cancel_at_period_end(self, customer_retrieve_mock,
                                  subscription_retrieve_mock,
                                  plan_retrieve_mock):
        current_period_end = timezone.now() + timezone.timedelta(days=7)

        subscription_fake = deepcopy(FAKE_SUBSCRIPTION)
        subscription = Subscription.sync_from_stripe_data(subscription_fake)
        subscription.current_period_end = current_period_end
        subscription.save()

        canceled_subscription_fake = deepcopy(FAKE_SUBSCRIPTION)
        canceled_subscription_fake["current_period_end"] = datetime_to_unix(
            current_period_end)
        canceled_subscription_fake["canceled_at"] = datetime_to_unix(
            timezone.now())
        subscription_retrieve_mock.return_value = canceled_subscription_fake  # retrieve().delete()

        self.assertTrue(self.customer.has_active_subscription())
        self.assertTrue(self.customer.has_any_active_subscription())
        self.assertEquals(self.customer.active_subscriptions.count(), 1)
        self.assertTrue(subscription in self.customer.active_subscriptions)

        new_subscription = subscription.cancel(at_period_end=True)
        self.assertEquals(self.customer.active_subscriptions.count(), 1)
        self.assertTrue(new_subscription in self.customer.active_subscriptions)

        self.assertEqual(Subscription.STATUS_ACTIVE, new_subscription.status)
        self.assertEqual(True, new_subscription.cancel_at_period_end)
        self.assertNotEqual(new_subscription.canceled_at,
                            new_subscription.ended_at)
        self.assertTrue(new_subscription.is_valid())
        self.assertTrue(self.customer.has_active_subscription())
        self.assertTrue(self.customer.has_any_active_subscription())
Beispiel #3
0
    def test_cancel_during_trial_sets_at_period_end(self,
                                                    customer_retrieve_mock,
                                                    subscription_retrieve_mock,
                                                    plan_retrieve_mock):
        subscription_fake = deepcopy(FAKE_SUBSCRIPTION)
        subscription = Subscription.sync_from_stripe_data(subscription_fake)
        subscription.trial_end = timezone.now() + timezone.timedelta(days=7)
        subscription.save()

        cancel_timestamp = datetime_to_unix(timezone.now())
        canceled_subscription_fake = deepcopy(FAKE_SUBSCRIPTION)
        canceled_subscription_fake["status"] = Subscription.STATUS_CANCELED
        canceled_subscription_fake["canceled_at"] = cancel_timestamp
        canceled_subscription_fake["ended_at"] = cancel_timestamp
        subscription_retrieve_mock.return_value = canceled_subscription_fake  # retrieve().delete()

        self.assertTrue(self.customer.has_active_subscription())
        self.assertTrue(self.customer.has_any_active_subscription())

        new_subscription = subscription.cancel(at_period_end=False)

        self.assertEqual(Subscription.STATUS_CANCELED, new_subscription.status)
        self.assertEqual(False, new_subscription.cancel_at_period_end)
        self.assertEqual(new_subscription.canceled_at,
                         new_subscription.ended_at)
        self.assertFalse(new_subscription.is_valid())
        self.assertFalse(self.customer.has_active_subscription())
        self.assertFalse(self.customer.has_any_active_subscription())
Beispiel #4
0
    def test_has_active_subscription_with_plan_string(self, customer_retrieve_mock, subscription_create_mock):
        plan = Plan.sync_from_stripe_data(deepcopy(FAKE_PLAN))

        subscription_fake = deepcopy(FAKE_SUBSCRIPTION)
        subscription_fake["current_period_end"] = datetime_to_unix(timezone.now() + timezone.timedelta(days=7))

        subscription_create_mock.return_value = subscription_fake

        self.customer.subscribe(plan=plan, charge_immediately=False)

        self.customer.has_active_subscription(plan=plan.stripe_id)
Beispiel #5
0
    def test_has_active_subscription_with_unspecified_plan_with_multiple_subscriptions(self, customer_retrieve_mock,
                                                                                       subscription_create_mock):
        plan = Plan.sync_from_stripe_data(deepcopy(FAKE_PLAN))

        subscription_fake = deepcopy(FAKE_SUBSCRIPTION)
        subscription_fake["current_period_end"] = datetime_to_unix(timezone.now() + timezone.timedelta(days=7))

        subscription_fake_duplicate = deepcopy(FAKE_SUBSCRIPTION)
        subscription_fake_duplicate["current_period_end"] = datetime_to_unix(timezone.now() +
                                                                             timezone.timedelta(days=7))
        subscription_fake_duplicate["id"] = "sub_6lsC8pt7IcF8jd"

        subscription_create_mock.side_effect = [subscription_fake, subscription_fake_duplicate]

        self.customer.subscribe(plan=plan, charge_immediately=False)
        self.customer.subscribe(plan=plan, charge_immediately=False)

        self.assertEqual(2, self.customer.subscriptions.count())

        with self.assertRaises(TypeError):
            self.customer.has_active_subscription()
Beispiel #6
0
    def test_extend(self, customer_retrieve_mock, subscription_retrieve_mock,
                    plan_retrieve_mock):
        subscription_fake = deepcopy(FAKE_SUBSCRIPTION)
        subscription_fake["current_period_end"] = datetime_to_unix(
            timezone.now() - timezone.timedelta(days=20))

        subscription_retrieve_mock.return_value = subscription_fake

        subscription = Subscription.sync_from_stripe_data(subscription_fake)
        self.assertFalse(subscription in self.customer.active_subscriptions)
        self.assertEquals(self.customer.active_subscriptions.count(), 0)

        delta = timezone.timedelta(days=30)
        extended_subscription = subscription.extend(delta)

        self.assertNotEqual(None, extended_subscription.trial_end)
        self.assertTrue(self.customer.has_active_subscription())
        self.assertTrue(self.customer.has_any_active_subscription())