diff --git a/club/forms.py b/club/forms.py index 6cf4e405..dca2b05c 100644 --- a/club/forms.py +++ b/club/forms.py @@ -143,8 +143,6 @@ class MailingForm(forms.Form): if cleaned_data["action"] == self.ACTION_NEW_MAILING: self.check_required(cleaned_data, "mailing_email") - # self.check_required(cleaned_data, "mailing_club") - # self.check_required(cleaned_data, "mailing_moderator") if cleaned_data["action"] == self.ACTION_NEW_SUBSCRIPTION: self.check_required(cleaned_data, "subscription_mailing") diff --git a/club/tests.py b/club/tests.py index 25f6e019..82ddf937 100644 --- a/club/tests.py +++ b/club/tests.py @@ -22,12 +22,15 @@ # # +from django.conf import settings from django.test import TestCase +from django.utils import timezone from django.core.urlresolvers import reverse from django.core.management import call_command from core.models import User -from club.models import Club +from club.models import Club, Membership +from club.forms import MailingForm # Create your tests here. @@ -373,3 +376,73 @@ class ClubTest(TestCase): "S' Kia\\n Responsable info" in content ) + + +class MailingFormTest(TestCase): + """Perform validation tests for MailingForm""" + + def setUp(self): + call_command("populate") + self.skia = User.objects.filter(username="skia").first() + self.rbatsbak = User.objects.filter(username="rbatsbak").first() + self.guy = User.objects.filter(username="krophil").first() + self.comunity = User.objects.filter(username="comunity").first() + self.bdf = Club.objects.filter(unix_name="bdf").first() + Membership( + user=self.rbatsbak, + club=self.bdf, + start_date=timezone.now(), + role=settings.SITH_CLUB_ROLES_ID["Board member"], + ).save() + + def test_mailing_list_add_no_moderation(self): + # Test with Communication admin + self.client.login(username="comunity", password="plop") + self.client.post( + reverse("club:mailing", kwargs={"club_id": self.bdf.id}), + {"action": MailingForm.ACTION_NEW_MAILING, "mailing_email": "foyer"}, + ) + response = self.client.get( + reverse("club:mailing", kwargs={"club_id": self.bdf.id}) + ) + self.assertContains(response, text="Liste de diffusion foyer@utbm.fr") + + # Test with Root + self.client.login(username="root", password="plop") + self.client.post( + reverse("club:mailing", kwargs={"club_id": self.bdf.id}), + {"action": MailingForm.ACTION_NEW_MAILING, "mailing_email": "mde"}, + ) + response = self.client.get( + reverse("club:mailing", kwargs={"club_id": self.bdf.id}) + ) + self.assertContains(response, text="Liste de diffusion mde@utbm.fr") + + def test_mailing_list_add_moderation(self): + self.client.login(username="rbatsbak", password="plop") + self.client.post( + reverse("club:mailing", kwargs={"club_id": self.bdf.id}), + {"action": MailingForm.ACTION_NEW_MAILING, "mailing_email": "mde"}, + ) + response = self.client.get( + reverse("club:mailing", kwargs={"club_id": self.bdf.id}) + ) + self.assertNotContains(response, text="Liste de diffusion mde@utbm.fr") + self.assertContains( + response, text="

Listes de diffusions en attente de modération

" + ) + self.assertContains(response, "
  • mde@utbm.fr") + + def test_mailing_list_forbidden(self): + # With anonymous user + response = self.client.get( + reverse("club:mailing", kwargs={"club_id": self.bdf.id}) + ) + self.assertContains(response, "", status_code=403) + + # With user not in club + self.client.login(username="krophil", password="plop") + response = self.client.get( + reverse("club:mailing", kwargs={"club_id": self.bdf.id}) + ) + self.assertContains(response, "", status_code=403) diff --git a/club/views.py b/club/views.py index 31dc0ad0..1d2e145e 100644 --- a/club/views.py +++ b/club/views.py @@ -563,12 +563,18 @@ class ClubMailingView(ClubTabsMixin, CanEditMixin, DetailFormView): """ Add mailing subscriptions for each user given and/or for the specified email in form """ + users_to_save = [] + for user in cleaned_data["subscription_users"]: sub = MailingSubscription( mailing=cleaned_data["subscription_mailing"], user=user ) - sub.clean() - sub.save() + try: + sub.clean() + except ValidationError as validation_error: + return validation_error + + users_to_save.append(sub.save()) if cleaned_data["subscription_email"]: sub = MailingSubscription( @@ -582,6 +588,10 @@ class ClubMailingView(ClubTabsMixin, CanEditMixin, DetailFormView): return validation_error sub.save() + # Save users after we are sure there is no error + for user in users_to_save: + user.save() + return None def remove_subscription(self, cleaned_data): diff --git a/core/management/commands/populate.py b/core/management/commands/populate.py index cccaf098..02bd3cd3 100644 --- a/core/management/commands/populate.py +++ b/core/management/commands/populate.py @@ -837,6 +837,27 @@ Welcome to the wiki page! krophil_profile.save() krophil.profile_pict = krophil_profile krophil.save() + # Adding user Com Unity + comunity = User( + username="comunity", + last_name="Unity", + first_name="Com", + email="comunity@git.an", + date_of_birth="1942-06-12", + ) + comunity.set_password("plop") + comunity.save() + comunity.groups = [ + Group.objects.filter(name="Communication admin").first().id + ] + comunity.save() + Membership( + user=comunity, + club=bar_club, + start_date=timezone.now(), + role=settings.SITH_CLUB_ROLES_ID["Board member"], + ).save() + # Adding subscription for sli s = Subscription( member=User.objects.filter(pk=sli.pk).first(), @@ -861,6 +882,18 @@ Welcome to the wiki page! start=s.subscription_start, ) s.save() + # Com Unity + s = Subscription( + member=comunity, + subscription_type=default_subscription, + payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0][0], + ) + s.subscription_start = s.compute_start() + s.subscription_end = s.compute_end( + duration=settings.SITH_SUBSCRIPTIONS[s.subscription_type]["duration"], + start=s.subscription_start, + ) + s.save() Selling( label=dcons.name, diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 5b54e273..8eab8c71 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -948,7 +948,7 @@ msgstr "Ce champ est obligatoire." #: club/forms.py:162 msgid "You must specify at least an user or an email address" -msgstr "" +msgstr "vous devez spĂ©cifier au moins un utilisateur ou une adresse email" #: club/forms.py:172 counter/views.py:1481 msgid "Begin date"