import json import os from datetime import date, datetime from django.conf import settings from django.contrib.auth.models import User from django.core import mail from django.test import TestCase, override_settings from django.urls import reverse from django.utils.html import escape from candidats.models import Candidate from .models import ( Level, Domain, Section, Klass, Option, Period, Student, Corporation, Availability, CorpContact, Teacher, Training, Course, ) from .utils import school_year class StagesTests(TestCase): @classmethod def setUpTestData(cls): Section.objects.bulk_create([ Section(name='MP_ASE'), Section(name='MP_ASSC'), Section(name='EDE'), Section(name='EDS') ]) sect_ase = Section.objects.get(name='MP_ASE') lev1 = Level.objects.create(name='1') lev2 = Level.objects.create(name='2') lev3 = Level.objects.create(name='3') klass1 = Klass.objects.create(name="1ASE3", section=sect_ase, level=lev1) klass2 = Klass.objects.create(name="2ASE3", section=sect_ase, level=lev2) klass3 = Klass.objects.create(name="2EDS", section=Section.objects.get(name='EDS'), level=lev2) dom_hand = Domain.objects.create(name="handicap") dom_pe = Domain.objects.create(name="petite enfance") corp = Corporation.objects.create( name="Centre pédagogique XY", typ="Institution", street="Rue des champs 12", city="Moulineaux", pcode="2500", ) contact = CorpContact.objects.create( corporation=corp, civility="Monsieur", first_name="Jean", last_name="Horner", is_main=True, role="Responsable formation", ) Student.objects.bulk_create([ Student(first_name="Albin", last_name="Dupond", birth_date="1994-05-12", pcode="2300", city="La Chaux-de-Fonds", email="albin@example.org", klass=klass1), Student(first_name="Justine", last_name="Varrin", birth_date="1994-07-12", pcode="2000", city="Neuchâtel", klass=klass1), Student(first_name="Elvire", last_name="Hickx", birth_date="1994-05-20", pcode="2053", city="Cernier", klass=klass1), Student(first_name="André", last_name="Allemand", birth_date="1994-10-11", pcode="2314", city="La Sagne", klass=klass2), Student(first_name="Gil", last_name="Schmid", birth_date="1996-02-14", pcode="2000", city="Neuchâtel", klass=klass3, corporation=corp), ]) ref1 = Teacher.objects.create( first_name="Julie", last_name="Caux", abrev="JCA", email="julie@eample.org", civility="Madame", ) cls.p1 = Period.objects.create( title="Stage de pré-sensibilisation", start_date="2012-11-26", end_date="2012-12-07", section=sect_ase, level=lev1, ) p2 = Period.objects.create( title="Stage final", start_date="2013-02-01", end_date="2013-03-15", section=sect_ase, level=lev2, ) av1 = Availability.objects.create( corporation=corp, domain=dom_hand, period=cls.p1, contact=contact, comment="Dispo pour pré-sensibilisation", ) Availability.objects.create( corporation=corp, domain=dom_pe, period=cls.p1, contact=contact, comment="Dispo prioritaire", priority=True, ) av3 = Availability.objects.create( corporation=corp, domain=dom_pe, period=p2, comment="Dispo pour stage final", ) Training.objects.create( availability=av1, student=Student.objects.get(first_name="Albin"), referent=ref1, ) Training.objects.create( availability=av3, student=Student.objects.get(first_name="André"), referent=ref1, ) cls.admin = User.objects.create_superuser( 'me', 'me@example.org', 'mepassword', first_name='Jean', last_name='Valjean', ) def setUp(self): self.client.login(username='me', password='mepassword') def test_export_stages(self): response1 = self.client.get(reverse('stages_export', args=['all'])) self.assertEqual(response1.status_code, 200) response2 = self.client.get(reverse('stages_export'), {'period': '2', 'non_attr': '0'}) self.assertEqual(response2.status_code, 200) self.assertGreater(len(response1.content), len(response2.content)) response3 = self.client.get(reverse('stages_export'), {'period': '1', 'non_attr': '1'}) self.assertEqual(response2.status_code, 200) def test_export_students(self): response = self.client.get(reverse('general-export')) self.assertEqual(response.status_code, 200) def test_export_qualif_ede(self): response = self.client.get(reverse('export-qualif-ede')) self.assertEqual(response.status_code, 200) def test_export_sap(self): response = self.client.get(reverse('export_sap')) self.assertEqual(response.status_code, 200) def test_student_change_view(self): klass_ede = Klass.objects.create( name="2EDEps", section=Section.objects.get(name='EDE'), level=Level.objects.get(name='2') ) student_ede = Student.objects.create( first_name="Claire", last_name="Fontaine", birth_date="2000-01-02", pcode="2000", city="Neuchâtel", klass=klass_ede ) response = self.client.get( reverse("admin:stages_student_change", args=(student_ede.pk,)) ) self.assertContains(response, "Factures de supervision") student_non_ede = Student.objects.exclude(klass__section__name='EDE').first() response = self.client.get( reverse("admin:stages_student_change", args=(student_non_ede.pk,)) ) self.assertNotContains(response, "Factures de supervision") def test_comment_on_student(self): teacher_user = User.objects.create_user('teach', 'teach@example.org', 'passd') teacher = Teacher.objects.get(abrev='JCA') teacher.user = teacher_user teacher.save() student = Student.objects.get(last_name='Dupond') self.client.force_login(teacher_user) response = self.client.get( reverse("student-comment", args=(student.pk,)) ) # Cannot access form if not master teacher of that class. self.assertNotContains(response, '