def test_no_deletion(self):
     """
     No buyable product can ever be deleted.
     """
     product = products.Product1.objects.get(pk=self.TEST_PRODUCT_ID)
     s = Subscription(customer=self.customer,
                      product=product,
                      buy_price=150)
     s.save()
     self.assertFalse(s.is_fully_used)
     s.delete()
     s.refresh_from_db()
     self.assertTrue(s.is_fully_used)
示例#2
0
class TestSubscriptionUnit(TestCase):
    fixtures = ('products', 'lessons')

    @classmethod
    def setUpTestData(cls):
        cls.product = Product1.objects.get(pk=1)
        cls.product.duration = timedelta(days=5)
        cls.product.save()

        cls.customer = create_customer()

    def setUp(self):
        self.s = Subscription(
            customer=self.customer,
            product=self.product,
            buy_price=150
        )
        self.s.save()

    @patch('market.models.signals.class_scheduled.send')
    def _schedule(self, c, date, *args):
        c.timeline = mixer.blend(
            'timeline.Entry',
            lesson_type=c.lesson_type,
            teacher=create_teacher(),
            start=date,
        )
        c.save()

    def test_is_due(self):
        self.s.first_lesson_date = self.tzdatetime(2032, 12, 2, 12, 0)
        self.s.save()
        self.assertFalse(self.s.is_due())
        with freeze_time('2032-12-10 12:00'):  # move 9 days forward
            self.assertTrue(self.s.is_due())

    def test_is_due_for_subscription_without_any_completed_class(self):
        """
        For subscription without classes is_due should be based on their buy_date
        """
        self.assertFalse(self.s.is_due())
        with freeze_time('2032-12-10 12:00'):  # move 9 days forward
            self.assertTrue(self.s.is_due())

    def test_update_first_lesson_date(self):
        first_class = self.s.classes.first()

        self._schedule(first_class, self.tzdatetime(2032, 12, 5, 13, 33))

        self.s.first_lesson_date = None  # set to None in case of first_class has set it up manualy — we check the subscription, not the class logic

        self.s.update_first_lesson_date()
        self.s.refresh_from_db()
        self.assertEqual(self.s.first_lesson_date, self.tzdatetime(2032, 12, 5, 13, 33))

    def test_update_first_lesson_uses_only_first_lesson(self):
        classes = self.s.classes.all()
        self._schedule(classes[0], self.tzdatetime(2032, 12, 5, 13, 33))
        self._schedule(classes[1], self.tzdatetime(2033, 12, 5, 13, 33))

        self.s.update_first_lesson_date()
        self.s.refresh_from_db()
        self.assertEqual(self.s.first_lesson_date, self.tzdatetime(2032, 12, 5, 13, 33))  # should be taken from the first class, not from the second