diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 5e4bde8d..aef25622 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -4387,41 +4387,45 @@ msgstr "Membre de Sbarro ou de l'ESTA, 15 €" #: sith/settings.py:483 msgid "One semester Welcome Week" -msgstr "Un semestre - Welcome Week 0 €" +msgstr "Un semestre Welcome Week" -#: sith/settings.py:505 +#: sith/settings.py:513 +msgid "Two month for free" +msgstr "Deux mois gratuits" + +#: sith/settings.py:510 msgid "President" msgstr "Président" -#: sith/settings.py:506 +#: sith/settings.py:511 msgid "Vice-President" msgstr "Vice-Président" -#: sith/settings.py:507 +#: sith/settings.py:512 msgid "Treasurer" msgstr "Trésorier" -#: sith/settings.py:508 +#: sith/settings.py:513 msgid "Communication supervisor" msgstr "Responsable communication" -#: sith/settings.py:509 +#: sith/settings.py:514 msgid "Secretary" msgstr "Secrétaire" -#: sith/settings.py:510 +#: sith/settings.py:515 msgid "IT supervisor" msgstr "Responsable info" -#: sith/settings.py:511 +#: sith/settings.py:516 msgid "Board member" msgstr "Membre du bureau" -#: sith/settings.py:512 +#: sith/settings.py:517 msgid "Active member" msgstr "Membre actif" -#: sith/settings.py:513 +#: sith/settings.py:517 msgid "Curious" msgstr "Curieux" @@ -4445,7 +4449,7 @@ msgstr "Nouvelles photos/albums à modérer dans le SAS" msgid "You've been identified on some pictures" msgstr "Vous avez été identifié sur des photos" -#: sith/settings.py:553 +#: sith/settings.py:558 #, python-format msgid "You just refilled of %s €" msgstr "Vous avez rechargé votre compte de %s €" @@ -4455,27 +4459,28 @@ msgstr "Vous avez rechargé votre compte de %s €" msgid "You just bought %s" msgstr "Vous avez acheté %s" -#: sith/settings.py:555 +#: sith/settings.py:563 +#: sith/settings.py:560 msgid "You have a notification" msgstr "Vous avez une notification" -#: sith/settings.py:559 +#: sith/settings.py:564 msgid "Success!" msgstr "Succès !" -#: sith/settings.py:560 +#: sith/settings.py:565 msgid "Fail!" msgstr "Échec !" -#: sith/settings.py:561 +#: sith/settings.py:566 msgid "You successfully posted an article in the Weekmail" msgstr "Article posté avec succès dans le Weekmail" -#: sith/settings.py:562 +#: sith/settings.py:567 msgid "You successfully edited an article in the Weekmail" msgstr "Article édité avec succès dans le Weekmail" -#: sith/settings.py:563 +#: sith/settings.py:568 msgid "You successfully sent the Weekmail" msgstr "Weekmail envoyé avec succès" diff --git a/sith/settings.py b/sith/settings.py index bbeb59ad..b7151144 100644 --- a/sith/settings.py +++ b/sith/settings.py @@ -484,6 +484,11 @@ SITH_SUBSCRIPTIONS = { 'price': 0, 'duration': 1, }, + 'deux-mois-essai': { + 'name': _('Two month for free'), + 'price': 0, + 'duration': 0.33, + } # To be completed.... } diff --git a/subscription/models.py b/subscription/models.py index 15b7842d..8d28488d 100644 --- a/subscription/models.py +++ b/subscription/models.py @@ -104,6 +104,7 @@ class Subscription(models.Model): 'sbarro/esta': 9, 'cursus-alternant': 10, 'welcome-semestre': 11, + 'deux-mois-essai': 12, } PAYMENT = { "CHECK": 1, @@ -168,11 +169,11 @@ class Subscription(models.Model): start = Subscription.compute_start(duration=duration) # This can certainly be simplified, but it works like this try: - return start.replace(month=(start.month - 1 + 6 * duration) % 12 + 1, - year=start.year + int(duration / 2) + (1 if start.month > 6 and duration % 2 == 1 else 0)) + return start.replace(month=int(round((start.month - 1 + 6 * duration) % 12 + 1, 0)), + year=int(round(start.year + int(duration / 2) + (1 if int(start.month + 6 * duration) > 12 and (duration % 2 == 1 or duration < 1) else 0), 0))) except ValueError as e: - return start.replace(day=1, month=(start.month + 6 * duration) % 12 + 1, - year=start.year + int(duration / 2) + (1 if start.month > 6 and duration % 2 == 1 else 0)) + return start.replace(day=1, month=int(round((start.month + 6 * duration) % 12 + 1, 0)), + year=int(round(start.year + int(duration / 2) + (1 if int(start.month + 6 * duration) > 12 and (duration % 2 == 1 or duration < 1) else 0), 0))) def can_be_edited_by(self, user): return user.is_in_group(settings.SITH_MAIN_BOARD_GROUP) or user.is_root diff --git a/subscription/tests.py b/subscription/tests.py index 4c27c242..49ae423b 100644 --- a/subscription/tests.py +++ b/subscription/tests.py @@ -26,16 +26,23 @@ from unittest import mock from django.test import TestCase from subscription.models import Subscription +from core.models import User +from django.conf import settings +from datetime import datetime +from django.core.management import call_command + class FakeDate(date): """A fake replacement for date that can be mocked for testing.""" def __new__(cls, *args, **kwargs): return date.__new__(date, *args, **kwargs) + def date_mock_today(year, month, day): FakeDate.today = classmethod(lambda cls: date(year, month, day)) -class SubscribtionTest(TestCase): + +class SubscriptionTest(TestCase): @mock.patch('subscription.models.date', FakeDate) def test_start_dates_sliding_without_start(self): @@ -46,9 +53,9 @@ class SubscribtionTest(TestCase): def test_start_dates_sliding_with_start(self): self.assertTrue(Subscription.compute_start(date(2015, 5, 17), 1) == - date(2015, 5, 17)) + date(2015, 5, 17)) self.assertTrue(Subscription.compute_start(date(2015, 5, 17), 2) == - date(2015, 5, 17)) + date(2015, 5, 17)) @mock.patch('subscription.models.date', FakeDate) def test_start_dates_not_sliding_without_start(self): @@ -60,10 +67,8 @@ class SubscribtionTest(TestCase): self.assertTrue(Subscription.compute_start(duration=4) == date(2015, 8, 15)) def test_start_dates_not_sliding_with_start(self): - self.assertTrue(Subscription.compute_start(date(2015, 5, 17), 3) == - date(2015, 2, 15)) - self.assertTrue(Subscription.compute_start(date(2015, 1, 11), 3) == - date(2014, 8, 15)) + self.assertTrue(Subscription.compute_start(date(2015, 5, 17), 3) == date(2015, 2, 15)) + self.assertTrue(Subscription.compute_start(date(2015, 1, 11), 3) == date(2014, 8, 15)) @mock.patch('subscription.models.date', FakeDate) def test_end_dates_sliding(self): @@ -81,9 +86,54 @@ class SubscribtionTest(TestCase): d = Subscription.compute_end(duration=4) self.assertTrue(d == date(2017, 8, 15)) + @mock.patch('subscription.models.date', FakeDate) + def test_end_dates_with_float(self): + date_mock_today(2015, 9, 18) + d = Subscription.compute_end(duration=0.33) + self.assertTrue(d == date(2015, 11, 18)) + d = Subscription.compute_end(duration=0.67) + self.assertTrue(d == date(2016, 1, 18)) + d = Subscription.compute_end(duration=0.5) + self.assertTrue(d == date(2015, 12, 18)) + def test_end_dates_not_sliding_with_start(self): d = Subscription.compute_end(duration=3, start=date(2015, 9, 18)) self.assertTrue(d == date(2017, 3, 18)) d = Subscription.compute_end(duration=4, start=date(2015, 9, 18)) self.assertTrue(d == date(2017, 9, 18)) + +class DecimalDurationTest(TestCase): + def setUp(self): + call_command("populate") + self.user = User.objects.filter(username="public").first() + + def test_duration_two_months(self): + + s = Subscription(member=User.objects.filter(pk=self.user.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[3], + payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0]) + s.subscription_start = date(2017, 8, 29) + s.subscription_end = s.compute_end(duration=0.33, + start=s.subscription_start) + s.save() + self.assertTrue(s.subscription_end == date(2017, 10, 29)) + + def test_duration_three_months(self): + + s = Subscription(member=User.objects.filter(pk=self.user.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[3], + payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0]) + s.subscription_start = date(2017, 8, 29) + s.subscription_end = s.compute_end(duration=0.5, + start=s.subscription_start) + s.save() + self.assertTrue(s.subscription_end == date(2017, 11, 29)) + + def test_duration_four_months(self): + + s = Subscription(member=User.objects.filter(pk=self.user.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[3], + payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0]) + s.subscription_start = date(2017, 8, 29) + s.subscription_end = s.compute_end(duration=0.67, + start=s.subscription_start) + s.save() + self.assertTrue(s.subscription_end == date(2017, 12, 29))