Changeset View
Changeset View
Standalone View
Standalone View
looper/tests/test_subscriptions.py
| import datetime | import datetime | ||||
| import logging | import logging | ||||
| import typing | |||||
| from unittest import mock | from unittest import mock | ||||
| from django.dispatch import receiver | from django.dispatch import receiver | ||||
| import django.utils.timezone | import django.utils.timezone | ||||
| from django.urls import reverse | |||||
| from looper.middleware import PREFERRED_CURRENCY_SESSION_KEY | from .base import AbstractLooperTestCase | ||||
| from . import AbstractLooperTestCase | |||||
| from .. import forms | |||||
| from ..money import Money | from ..money import Money | ||||
| from ..models import Subscription | from ..models import Subscription | ||||
| from ..exceptions import IncorrectStatusError | from ..exceptions import IncorrectStatusError | ||||
| log = logging.getLogger(__name__) | log = logging.getLogger(__name__) | ||||
| class SubscriptionsTest(AbstractLooperTestCase): | class SubscriptionsTest(AbstractLooperTestCase): | ||||
| ▲ Show 20 Lines • Show All 170 Lines • ▼ Show 20 Lines | def test_undo_pending_cancellation(self): | ||||
| subs.refresh_from_db() | subs.refresh_from_db() | ||||
| self.assertEqual('active', subs.status) | self.assertEqual('active', subs.status) | ||||
| self.assertIsNone(subs.cancelled_at) | self.assertIsNone(subs.cancelled_at) | ||||
| self.assertEqual('paid', subs.latest_order().status) | self.assertEqual('paid', subs.latest_order().status) | ||||
| class NextPaymentTest(AbstractLooperTestCase): | class NextPaymentTest(AbstractLooperTestCase): | ||||
| def test_after_creation(self): | def test_after_creation(self): | ||||
| subs = self.create_subscription() | subs = self.create_subscription() | ||||
| self.assertFalse(subs.is_active) | self.assertFalse(subs.is_active) | ||||
| self.assertIsNone(subs.next_payment) | self.assertIsNone(subs.next_payment) | ||||
| def test_mid_month(self): | def test_mid_month(self): | ||||
| subs = self.create_subscription() | subs = self.create_subscription() | ||||
| now = datetime.datetime(2018, 9, 12, 11, 59, 3, tzinfo=django.utils.timezone.utc) | now = datetime.datetime(2018, 9, 12, 11, 59, 3, tzinfo=django.utils.timezone.utc) | ||||
| with mock.patch('django.utils.timezone.now') as mock_now: | with mock.patch('django.utils.timezone.now') as mock_now: | ||||
| mock_now.return_value = now | mock_now.return_value = now | ||||
| subs.status = 'active' | subs.status = 'active' | ||||
| subs.save(update_fields={'status'}) | subs.save(update_fields={'status'}) | ||||
| expect_renewal = datetime.datetime(2018, 10, 12, 11, 59, 3, | expect_renewal = datetime.datetime( | ||||
| tzinfo=django.utils.timezone.utc) | 2018, 10, 12, 11, 59, 3, tzinfo=django.utils.timezone.utc | ||||
| ) | |||||
| self.assertAlmostEqualDateTime(expect_renewal, subs.next_payment) | self.assertAlmostEqualDateTime(expect_renewal, subs.next_payment) | ||||
| def test_end_of_long_month_before_leapyear(self): | def test_end_of_long_month_before_leapyear(self): | ||||
| subs = self.create_subscription() | subs = self.create_subscription() | ||||
| now = datetime.datetime(2016, 1, 31, 11, 59, 3, tzinfo=django.utils.timezone.utc) | now = datetime.datetime(2016, 1, 31, 11, 59, 3, tzinfo=django.utils.timezone.utc) | ||||
| with mock.patch('django.utils.timezone.now') as mock_now: | with mock.patch('django.utils.timezone.now') as mock_now: | ||||
| mock_now.return_value = now | mock_now.return_value = now | ||||
| subs.status = 'active' | subs.status = 'active' | ||||
| subs.save(update_fields={'status'}) | subs.save(update_fields={'status'}) | ||||
| expect_renewal = datetime.datetime(2016, 2, 29, 11, 59, 3, | expect_renewal = datetime.datetime(2016, 2, 29, 11, 59, 3, tzinfo=django.utils.timezone.utc) | ||||
| tzinfo=django.utils.timezone.utc) | |||||
| self.assertAlmostEqualDateTime(expect_renewal, subs.next_payment) | self.assertAlmostEqualDateTime(expect_renewal, subs.next_payment) | ||||
| class MonthlyPriceTest(AbstractLooperTestCase): | class MonthlyPriceTest(AbstractLooperTestCase): | ||||
| def price(self, **kwargs) -> Money: | def price(self, **kwargs) -> Money: | ||||
| subscription = Subscription(currency='EUR', price=1000, **kwargs) | subscription = Subscription(currency='EUR', price=1000, **kwargs) | ||||
| return subscription.monthly_rounded_price | return subscription.monthly_rounded_price | ||||
| Show All 16 Lines | |||||