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')