Exemple #1
0
    def test_save_with_postponement_m2m(self):
        domains = [
            DomainFactory(name="Alchemy"),
            DomainFactory(name="Muggle Studies")
        ]
        self.data["secondary_domains"] = '|'.join(
            [str(domain.pk) for domain in domains])

        certificate_aims = [
            CertificateAimFactory(code=100, section=1),
            CertificateAimFactory(code=101, section=2)
        ]
        self.data["certificate_aims"] = [
            str(aim.pk) for aim in certificate_aims
        ]

        self._create_postponed_egys()

        last = EducationGroupYear.objects.filter(
            education_group=self.education_group_year.education_group
        ).order_by('academic_year').last()

        self.education_group_year.refresh_from_db()
        self.assertEqual(self.education_group_year.secondary_domains.count(),
                         2)
        self.assertEqual(last.secondary_domains.count(), 2)
        self.assertEqual(last.certificate_aims.count(), len(certificate_aims))

        # update with a conflict
        dom3 = DomainFactory(name="Divination")
        EducationGroupYearDomainFactory(domain=dom3, education_group_year=last)

        domains = [
            DomainFactory(name="Care of Magical Creatures"),
            DomainFactory(name="Muggle Studies")
        ]

        self.data["secondary_domains"] = '|'.join(
            [str(domain.pk) for domain in domains])

        form = TrainingForm(self.data,
                            instance=self.education_group_year,
                            user=self.user)
        self.assertTrue(form.is_valid(), form.errors)
        form.save()

        self.assertEqual(len(form.education_group_year_postponed), 5)

        self.assertEqual(
            EducationGroupYear.objects.filter(
                education_group=self.education_group_year.education_group).
            count(), 7)
        last.refresh_from_db()
        self.education_group_year.refresh_from_db()

        self.assertEqual(self.education_group_year.secondary_domains.count(),
                         2)
        self.assertEqual(last.secondary_domains.count(), 3)
        self.assertEqual(len(form.warnings), 1)
Exemple #2
0
    def test_template_used_for_certificate_edition(self):
        faculty_managers_group = Group.objects.get(name='faculty_managers')
        self.faculty_user = UserFactory()
        self.faculty_user.groups.add(faculty_managers_group)
        self.faculty_person = PersonFactory(user=self.faculty_user)
        self.client.force_login(self.faculty_user)
        permission = Permission.objects.get(codename='change_educationgroup')
        self.faculty_user.user_permissions.add(permission)
        response = self.client.get(
            reverse(update_education_group,
                    args=[
                        self.previous_training_education_group_year.pk,
                        self.previous_training_education_group_year.pk
                    ]))
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(
            response, "education_group/blocks/form/training_certificate.html")

        certificate_aims = [
            CertificateAimFactory(code=code) for code in range(100, 103)
        ]
        response = self.client.post(
            reverse(update_education_group,
                    args=[
                        self.previous_training_education_group_year.pk,
                        self.previous_training_education_group_year.pk
                    ]),
            data={'certificate_aims': str(certificate_aims[0].id)})
        self.assertEqual(response.status_code, 302)
Exemple #3
0
 def setUp(self):
     self.super_user = SuperUserFactory()
     self.url = reverse("certificate_aim_autocomplete")
     self.certificate_aim = CertificateAimFactory(
         code=1234,
         section=5,
         description="description",
     )
Exemple #4
0
 def _generate_certificate_aims_with_wrong_order(self):
     # Numbers below are used only to ensure records are saved in wrong order (there's no other meaning)
     for section in range(4, 2, -1):
         code_range = section * 11
         for code in range(code_range, code_range - 2, -1):
             EducationGroupCertificateAimFactory(
                 education_group_year=self.education_group_child,
                 certificate_aim=CertificateAimFactory(code=code,
                                                       section=section),
             )
Exemple #5
0
    def test_clean_certificate_aims(self):
        administration_entity_version = MainEntityVersionFactory(end_date=None)
        management_entity_version = MainEntityVersionFactory(end_date=None)
        person = PersonFactory()
        PersonEntityFactory(person=person,
                            entity=management_entity_version.entity)
        user = person.user
        user.groups.add(self.central_manager)

        parent_education_group_year = TrainingFactory(
            academic_year=self.academic_year,
            education_group_type=self.education_group_type,
            management_entity=management_entity_version.entity,
            administration_entity=administration_entity_version.entity,
        )
        AuthorizedRelationshipFactory(
            parent_type=parent_education_group_year.education_group_type,
            child_type=self.education_group_type,
        )

        cert = [
            CertificateAimFactory(code=code, section=2)
            for code in range(100, 102)
        ]
        for i in range(0, len(cert)):
            with self.subTest(i=i):
                cert_for_form = [str(cert[j].pk) for j in range(0, i + 1)]

                form = self.form_class(
                    data={
                        'acronym': "EEDY2020",
                        'partial_acronym': 'EEDY2020F',
                        'title': "Test",
                        'internship': 'OPTIONAL',
                        'primary_language': LanguageFactory().pk,
                        'active': 'ACTIVE',
                        'schedule_type': 'DAILY',
                        'administration_entity':
                        administration_entity_version.pk,
                        'management_entity': management_entity_version.pk,
                        'diploma_printing_title': 'Diplome en test',
                        'certificate_aims': cert_for_form,
                    },
                    parent=parent_education_group_year,
                    education_group_type=parent_education_group_year.
                    education_group_type,
                    user=user,
                )
                if i == 0:
                    self.assertTrue(form.is_valid())
                else:
                    self.assertFalse(form.is_valid())
Exemple #6
0
    def setUpTestData(cls):
        super().setUpTestData()

        cls.current_academic_year = AcademicYearFactory(current=True)
        cls.generated_ac_years = AcademicYearFactory.produce(
            base_year=cls.current_academic_year.year,
            number_past=0,
            number_future=7)
        cls.entity_version = MainEntityVersionFactory(
            entity_type=entity_type.SECTOR)
        cls.central_manager = CentralManagerFactory()
        PersonEntityFactory(person=cls.central_manager,
                            entity=cls.entity_version.entity)
        cls.training = TrainingFactory(
            management_entity=cls.entity_version.entity,
            administration_entity=cls.entity_version.entity,
            academic_year=cls.current_academic_year)
        # Save the training instance will create N+6 data...
        form_data = model_to_dict_fk(cls.training,
                                     exclude=('secondary_domains', ))
        form_data.update({
            'primary_language': form_data['primary_language_id'],
            'administration_entity': cls.entity_version.pk,
            'management_entity': cls.entity_version.pk
        })
        training_form = TrainingForm(form_data,
                                     instance=cls.training,
                                     user=cls.central_manager.user)
        training_form.is_valid()
        training_form.save()

        cls.certificate_aim_type_2 = CertificateAimFactory(section=2, code=200)
        cls.certificate_aim_type_4 = CertificateAimFactory(section=4, code=400)
        cls.form_data = {
            'certificate_aims':
            [cls.certificate_aim_type_2.pk, cls.certificate_aim_type_4.pk]
        }
Exemple #7
0
    def test_save_case_consistency_raised_because_property_different_in_future(
            self):
        """
        This test ensure that the consistency check is raised an exception because certificate aims
        is different in future
        """
        # Update in future
        training_in_future = self.qs_training_futures.last()
        certificate_aim_type_9 = CertificateAimFactory(section=9, code=900)
        form = CertificateAimsForm(
            {'certificate_aims': [certificate_aim_type_9]},
            instance=training_in_future)
        self.assertTrue(form.is_valid(), form.errors)
        form.save()
        self.assertFalse(form.warnings, form.warnings)

        # Update current training...
        form = CertificateAimsForm(self.form_data, instance=self.training)
        self.assertTrue(form.is_valid(), form.errors)
        form.save()

        error_expected = _("%(col_name)s has been already modified.") % {
            "col_name":
            _(
                EducationGroupYear._meta.get_field(
                    'certificate_aims').verbose_name).title(),
        }
        warnings_expected = [
            _("Consistency error in %(academic_year)s with %(model)s: %(error)s"
              ) % {
                  'academic_year': training_in_future.academic_year,
                  'model': EducationGroupYear._meta.verbose_name.title(),
                  'error': error_expected
              }
        ]
        self.assertEqual(form.warnings, warnings_expected, form.warnings)

        edgy_postponed_expected = list(
            self.qs_training_futures.exclude(
                pk=training_in_future.pk).order_by('academic_year__year'))
        self.assertEqual(form.education_group_year_postponed,
                         edgy_postponed_expected)
Exemple #8
0
    def test_template_used_for_certificate_edition(self):
        faculty_managers_group = Group.objects.get(name='faculty_managers')
        self.faculty_user = UserFactory()
        self.faculty_user.groups.add(faculty_managers_group)
        self.faculty_person = PersonFactory(user=self.faculty_user)
        self.client.force_login(self.faculty_user)
        permission = Permission.objects.get(codename='change_educationgroup')
        self.faculty_user.user_permissions.add(permission)
        self._assert_redirects_to_modal_to_update_certificate_aims(
            self.previous_training_education_group_year)
        self._assert_redirects_to_modal_to_update_certificate_aims(
            self.training_education_group_year)

        certificate_aims = [
            CertificateAimFactory(code=code) for code in range(100, 103)
        ]
        first_certificate_aim = certificate_aims[0].id

        self._assert_post_to_modal_to_update_certificate_aims(
            first_certificate_aim, self.previous_training_education_group_year)
        self._assert_post_to_modal_to_update_certificate_aims(
            first_certificate_aim, self.training_education_group_year)
Exemple #9
0
 def setUpTestData(cls):
     cls.certificate_aim = CertificateAimFactory(
         section=9,
         code=987,
         description="Description of the certificate aim")
Exemple #10
0
 def setUp(self):
     self.certificate_aim = CertificateAimFactory(
         section=9,
         code=987,
         description="Description of the certificate aim")