pedagogy: tests for uv creation

This commit is contained in:
2019-06-16 12:19:04 +02:00
parent 1172402166
commit 38f6c27983
2 changed files with 141 additions and 1 deletions

View File

@ -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())