diff --git a/club/models.py b/club/models.py index 0447d992..56561aba 100644 --- a/club/models.py +++ b/club/models.py @@ -106,7 +106,10 @@ class Membership(models.Model): description = models.CharField(_('description'), max_length=30, null=False, blank=True) def clean(self): - if Membership.objects.filter(user=self.user).filter(club=self.club).filter(end_date=None).exclude(pk=self.pk).exists(): + sub = Subscriber.objects.filter(pk=self.user.pk).first() + if sub is None or not sub.is_subscribed(): + raise ValidationError(_('User must be subscriber to take part to a club')) + if Membership.objects.filter(user=self.user).filter(club=self.club).filter(end_date=None).exists(): raise ValidationError(_('User is already member of that club')) def __str__(self): diff --git a/club/tests.py b/club/tests.py index 7ce503c2..512cdd82 100644 --- a/club/tests.py +++ b/club/tests.py @@ -1,3 +1,50 @@ from django.test import TestCase +from django.core.urlresolvers import reverse +from django.core.management import call_command # Create your tests here. + +class ClubTest(TestCase): + def setUp(self): + call_command("populate") + + def test_create_add_user_to_club_from_root_ok(self): + self.client.login(username='root', password='plop') + self.client.post(reverse("club:club_members", kwargs={"club_id":4}), {"user": 2, "role": 3}) + response = self.client.get(reverse("club:club_members", kwargs={"club_id":4})) + self.assertTrue(response.status_code == 200) + self.assertTrue("
  • Woenzel'UT - skia - Responsable info
  • " in str(response.content)) + + def test_create_add_user_to_club_from_root_fail_not_subscriber(self): + self.client.login(username='root', password='plop') + response = self.client.post(reverse("club:club_members", kwargs={"club_id":4}), {"user": 3, "role": 3}) + self.assertTrue(response.status_code == 200) + self.assertTrue("User must be subscriber to take part to a club" in str(response.content)) + response = self.client.get(reverse("club:club_members", kwargs={"club_id":4})) + self.assertFalse("
  • Woenzel'UT - guy - Responsable info
  • " in str(response.content)) + + def test_create_add_user_to_club_from_root_fail_already_in_club(self): + self.client.login(username='root', password='plop') + self.client.post(reverse("club:club_members", kwargs={"club_id":4}), {"user": 2, "role": 3}) + response = self.client.get(reverse("club:club_members", kwargs={"club_id":4})) + self.assertTrue("
  • Woenzel'UT - skia - Responsable info
  • " in str(response.content)) + response = self.client.post(reverse("club:club_members", kwargs={"club_id":4}), {"user": 2, "role": 4}) + self.assertTrue(response.status_code == 200) + self.assertFalse("
  • Woenzel'UT - skia - Secrétaire
  • " in str(response.content)) + + def test_create_add_user_to_club_from_skia_ok(self): + self.client.login(username='root', password='plop') + self.client.post(reverse("club:club_members", kwargs={"club_id":4}), {"user": 2, "role": 10}) + self.client.login(username='skia', password='plop') + self.client.post(reverse("club:club_members", kwargs={"club_id":4}), {"user": 4, "role": 9}) + response = self.client.get(reverse("club:club_members", kwargs={"club_id":4})) + self.assertTrue(response.status_code == 200) + self.assertTrue("
  • Woenzel'UT - rbatsbak - Vice-Pr" in str(response.content)) + + def test_create_add_user_to_club_from_skia_fail(self): + self.client.login(username='root', password='plop') + self.client.post(reverse("club:club_members", kwargs={"club_id":4}), {"user": 2, "role": 3}) + self.client.login(username='skia', password='plop') + response = self.client.post(reverse("club:club_members", kwargs={"club_id":4}), {"user": 4, "role": 10}) + self.assertTrue(response.status_code == 200) + self.assertTrue("
  • You do not have the permission to do that
  • " in str(response.content)) diff --git a/core/management/commands/populate.py b/core/management/commands/populate.py new file mode 100644 index 00000000..85ff02ad --- /dev/null +++ b/core/management/commands/populate.py @@ -0,0 +1,95 @@ +import os +from django.core.management.base import BaseCommand, CommandError +from django.core.management import call_command +from django.conf import settings + + +from core.models import Group, User, Page, PageRev +from accounting.models import Customer, GeneralJournal, ProductType, Product +from club.models import Club +from subscription.models import Subscription, Subscriber + +class Command(BaseCommand): + help = "Populate a new instance of the Sith AE" + + def add_arguments(self, parser): + parser.add_argument('--prod', action="store_true") + + def handle(self, *args, **options): + root_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))) + u = User(username='root', last_name="", first_name="Bibou", + email="ae.info@utbm.fr", + date_of_birth="1942-06-12", + is_superuser=True, is_staff=True) + u.set_password("plop") + u.save() + for g in settings.AE_GROUPS.values(): + Group(id=g['id'], name=g['name']).save() + ae = Club(name=settings.AE_MAIN_CLUB['name'], unix_name=settings.AE_MAIN_CLUB['unix_name'], + address=settings.AE_MAIN_CLUB['address']) + ae.save() + + # Here we add a lot of test datas, that are not necessary for the Sith, but that provide a basic development environment + if not options['prod']: + print("Dev mode, adding some test data") + # Adding user Skia + s = User(username='skia', last_name="Kia", first_name="S'", + email="skia@git.an", + date_of_birth="1942-06-12") + s.set_password("plop") + s.save() + # Adding user Guy + u = User(username='guy', last_name="Carlier", first_name="Guy", + email="guy@git.an", + date_of_birth="1942-06-12", + is_superuser=False, is_staff=False) + u.set_password("plop") + u.save() + # Adding user Richard Batsbak + r = User(username='rbatsbak', last_name="Batsbak", first_name="Richard", + email="richard@git.an", + date_of_birth="1982-06-12") + r.set_password("plop") + r.save() + # Adding syntax help page + p = Page(name='Aide_sur_la_syntaxe') + p.set_lock(s) + p.save() + PageRev(page=p, title="Aide sur la syntaxe", author=s, content=""" +Cette page vise à documenter la syntaxe *Markdown* utilisée sur le site. +""").save() + # Adding README + p = Page(name='README') + p.set_lock(s) + p.save() + p.view_groups=[settings.AE_GROUPS['public']['id']] + p.set_lock(s) + p.save() + with open(os.path.join(root_path)+'/README.md', 'r') as rm: + PageRev(page=p, title="REAMDE", author=s, content=rm.read()).save() + + # Subscription + Subscription(member=Subscriber.objects.filter(pk=s.pk).first(), subscription_type=list(settings.AE_SUBSCRIPTIONS.keys())[0], + payment_method=settings.AE_PAYMENT_METHOD[0]).save() + Subscription(member=Subscriber.objects.filter(pk=r.pk).first(), subscription_type=list(settings.AE_SUBSCRIPTIONS.keys())[0], + payment_method=settings.AE_PAYMENT_METHOD[0]).save() + + # Clubs + Club(name="Bibo'UT", unix_name="bibout", + address="46 de la Boustifaille", parent=ae).save() + guyut = Club(name="Guy'UT", unix_name="guyut", + address="42 de la Boustifaille", parent=ae) + guyut.save() + Club(name="Woenzel'UT", unix_name="woenzel", + address="Woenzel", parent=guyut).save() + Club(name="BdF", unix_name="bdf", + address="Guyéuéyuéyuyé").save() + + # Accounting test values: + Customer(user=s, account_id="6568j").save() + p = ProductType(name="Bières bouteilles") + p.save() + Product(name="Barbar", code="BARB", product_type=p, purchase_price="1.50", selling_price="1.7", + special_selling_price="1.6").save() + GeneralJournal(start_date="2015-06-12", name="A15").save() + diff --git a/core/management/commands/setup.py b/core/management/commands/setup.py index a14bd897..ca7d19ea 100755 --- a/core/management/commands/setup.py +++ b/core/management/commands/setup.py @@ -23,71 +23,7 @@ class Command(BaseCommand): except Exception as e: print(e) call_command('migrate') - u = User(username='root', last_name="", first_name="Bibou", - email="ae.info@utbm.fr", - date_of_birth="1942-06-12", - is_superuser=True, is_staff=True) - u.set_password("plop") - u.save() - for g in settings.AE_GROUPS.values(): - Group(id=g['id'], name=g['name']).save() - ae = Club(name=settings.AE_MAIN_CLUB['name'], unix_name=settings.AE_MAIN_CLUB['unix_name'], - address=settings.AE_MAIN_CLUB['address']) - ae.save() - - # Here we add a lot of test datas, that are not necessary for the Sith, but that provide a basic development environment - if not options['prod']: - print("Dev mode, adding some test data") - # Adding user Skia - s = User(username='skia', last_name="Kia", first_name="S'", - email="skia@git.an", - date_of_birth="1942-06-12") - s.set_password("plop") - s.save() - # Adding user Guy - u = User(username='guy', last_name="Carlier", first_name="Guy", - email="guy@git.an", - date_of_birth="1942-06-12", - is_superuser=False, is_staff=False) - u.set_password("plop") - u.save() - # Adding syntax help page - p = Page(name='Aide_sur_la_syntaxe') - p.set_lock(s) - p.save() - PageRev(page=p, title="Aide sur la syntaxe", author=s, content=""" -Cette page vise à documenter la syntaxe *Markdown* utilisée sur le site. -""").save() - # Adding README - p = Page(name='README') - p.set_lock(s) - p.save() - p.view_groups=[settings.AE_GROUPS['public']['id']] - p.set_lock(s) - p.save() - with open(os.path.join(root_path)+'/README.md', 'r') as rm: - PageRev(page=p, title="REAMDE", author=s, content=rm.read()).save() - - # Subscription - Subscription(member=Subscriber.objects.filter(pk=s.pk).first(), subscription_type=list(settings.AE_SUBSCRIPTIONS.keys())[0], - payment_method=settings.AE_PAYMENT_METHOD[0]).save() - - # Clubs - Club(name="Bibo'UT", unix_name="bibout", - address="46 de la Boustifaille", parent=ae).save() - guyut = Club(name="Guy'UT", unix_name="guyut", - address="42 de la Boustifaille", parent=ae) - guyut.save() - Club(name="Woenzel'UT", unix_name="woenzel", - address="Woenzel", parent=guyut).save() - Club(name="BdF", unix_name="bdf", - address="Guyéuéyuéyuyé").save() - - # Accounting test values: - Customer(user=s, account_id="6568j").save() - p = ProductType(name="Bières bouteilles") - p.save() - Product(name="Barbar", code="BARB", product_type=p, purchase_price="1.50", selling_price="1.7", - special_selling_price="1.6").save() - GeneralJournal(start_date="2015-06-12", name="A15").save() - + if options['prod']: + call_command('populate', '--prod') + else: + call_command('populate')