diff --git a/core/management/commands/populate.py b/core/management/commands/populate.py index a97c6bc3..204db9fb 100644 --- a/core/management/commands/populate.py +++ b/core/management/commands/populate.py @@ -859,6 +859,18 @@ Welcome to the wiki page! start_date=timezone.now(), role=settings.SITH_CLUB_ROLES_ID["Board member"], ).save() + # Adding user tutu + tutu = User( + username="tutu", + last_name="Tu", + first_name="Tu", + email="tutu@git.an", + date_of_birth="1942-06-12", + ) + tutu.set_password("plop") + tutu.save() + tutu.groups = [settings.SITH_GROUP_PEDAGOGY_ADMIN_ID] + tutu.save() # Adding subscription for sli s = Subscription( @@ -897,6 +909,18 @@ Welcome to the wiki page! start=s.subscription_start, ) s.save() + # Tutu + s = Subscription( + member=tutu, + 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/pedagogy/tests.py b/pedagogy/tests.py index 02ee7ae5..7f742a70 100644 --- a/pedagogy/tests.py +++ b/pedagogy/tests.py @@ -23,5 +23,121 @@ # from django.test import TestCase +from django.core.urlresolvers import reverse +from django.core.management import call_command -# Create your tests here. +from core.models import User + +from pedagogy.models import UV + + +class UVCreation(TestCase): + """ + Test uv creation + """ + + def setUp(self): + call_command("populate") + self.bibou = User.objects.filter(username="root").first() + self.tutu = User.objects.filter(username="tutu").first() + self.sli = User.objects.filter(username="sli").first() + self.guy = User.objects.filter(username="guy").first() + + @staticmethod + def create_uv_template(user_id, code="IFC1", exclude_list=[]): + uv = { + "code": code, + "author": user_id, + "credit_type": "TM", + "semester": "SPRING", + "language": "FR", + "credits": 3, + "hours_CM": 10, + "hours_TD": 28, + "hours_TP": 0, + "hours_THE": 37, + "hours_TE": 0, + "manager": "Gilles BERTRAND", + "title": "Algorithmique et programmation : niveau I, initiés - partie I", + "objectives": """* Introduction à l'algorithmique et à la programmation pour initiés. +* Pratiques et développement en langage C.""", + "program": """* Découverte des outils élémentaires utilisés pour écrire, compiler et exécuter un programme écrit en langage C +* Règles de programmation : normes en cours, règles de présentation du code, commentaires +* Initiation à l'algorithmique et découverte des bases du langage C : + * les conditions + * les boucles + * les types de données + * les tableaux à une dimension + * manipulations des chaînes de caractères + * les fonctions et procédures""", + "skills": "* D'écrire un algorithme et de l'implémenter en C", + "key_concepts": """* Algorithme +* Variables scalaires et vectorielles +* Structures alternatives, répétitives +* Fonctions, procédures +* Chaînes de caractères""", + } + for excluded in exclude_list: + uv.pop(excluded) + return uv + + def test_create_uv_admin_success(self): + self.client.login(username="root", password="plop") + response = self.client.post( + reverse("pedagogy:uv_create"), self.create_uv_template(self.bibou.id) + ) + self.assertEquals(response.status_code, 302) + self.assertTrue(UV.objects.filter(code="IFC1").exists()) + + def test_create_uv_pedagogy_admin_success(self): + self.client.login(username="tutu", password="plop") + response = self.client.post( + reverse("pedagogy:uv_create"), self.create_uv_template(self.tutu.id) + ) + self.assertEquals(response.status_code, 302) + self.assertTrue(UV.objects.filter(code="IFC1").exists()) + + def test_create_uv_unauthorized_fail(self): + # Test with anonymous user + response = self.client.post( + reverse("pedagogy:uv_create"), self.create_uv_template(0) + ) + self.assertEquals(response.status_code, 403) + + # Test with subscribed user + self.client.login(username="sli", password="plop") + response = self.client.post( + reverse("pedagogy:uv_create"), self.create_uv_template(self.sli.id) + ) + self.assertEquals(response.status_code, 403) + + # Test with non subscribed user + self.client.login(username="guy", password="plop") + response = self.client.post( + reverse("pedagogy:uv_create"), self.create_uv_template(self.guy.id) + ) + self.assertEquals(response.status_code, 403) + + # Check that the UV has never been created + self.assertFalse(UV.objects.filter(code="IFC1").exists()) + + def test_create_uv_bad_request_fail(self): + self.client.login(username="tutu", password="plop") + + # Test with wrong user id (if someone cheats on the hidden input) + response = self.client.post( + reverse("pedagogy:uv_create"), self.create_uv_template(self.bibou.id) + ) + self.assertNotEquals(response.status_code, 302) + self.assertEquals(response.status_code, 200) + + # Remove a required field + response = self.client.post( + reverse("pedagogy:uv_create"), + self.create_uv_template(self.tutu.id, exclude_list=["title"]), + ) + self.assertNotEquals(response.status_code, 302) + self.assertEquals(response.status_code, 200) + + # Check that the UV hase never been created + self.assertFalse(UV.objects.filter(code="IFC1").exists())