def test_mix_of_curriculums_with_and_without_programs(self):
        course_a = self._create_course_and_runs('a')
        course_b = self._create_course_and_runs('b')
        course_c = self._create_course_and_runs('c')
        program_1 = factories.ProgramFactory(title='program_1')
        program_2 = factories.ProgramFactory(title='program_2')
        curriculum_1 = factories.CurriculumFactory(program=program_1)
        curriculum_2 = factories.CurriculumFactory(program=program_2)
        curriculum_3 = factories.CurriculumFactory(program=None)
        curriculum_4 = factories.CurriculumFactory(program=None)
        self._add_courses_to_curriculum(curriculum_1, course_a, course_b)
        self._add_courses_to_curriculum(curriculum_2, course_a, course_b)
        self._add_courses_to_curriculum(curriculum_3, course_a, course_b, course_c)
        self._add_courses_to_curriculum(curriculum_4, course_a, course_b, course_c)

        course_run = course_a.course_runs.first()
        course_run_ca = CourseRun.objects.get(external_key='ext-key-course-ca')
        message = _duplicate_external_key_message([course_run_ca])
        with self.assertNumQueries(FuzzyInt(6, 1)):  # 3 Selects
            with self.assertRaisesRegex(ValidationError, escape(message)):
                course_run.external_key = course_run_ca.external_key
                course_run.save()

        with self.assertNumQueries(FuzzyInt(36, 1)):
            course_run.external_key = 'some-safe-key'
            course_run.save()
Exemple #2
0
 def test_multiple_collisions__curriculum(self):
     message = _duplicate_external_key_message(
         [self.course_run_2b, self.course_run_3c])
     with self.assertNumQueries(5):
         with self.assertRaisesRegex(ValidationError, escape(message)):
             self.curriculum.program = self.program_2
             self.curriculum.save()
Exemple #3
0
 def test_create_course_run__curriculum_only(self):
     course_run, _ = self._create_single_course_curriculum(
         'colliding-key', 'curriculum_1')
     message = _duplicate_external_key_message([course_run])
     with self.assertNumQueries(11, threshold=0):
         with self.assertRaisesRegex(ValidationError, escape(message)):
             factories.CourseRunFactory(course=course_run.course,
                                        external_key='colliding-key')
Exemple #4
0
 def test_create_course_run__course_run_only(self):
     course = self._create_course_and_runs()
     course_run = course.course_runs.first()
     message = _duplicate_external_key_message([course_run])
     with self.assertNumQueries(11, threshold=0):
         with self.assertRaisesRegex(ValidationError, escape(message)):
             factories.CourseRunFactory(
                 course=course, external_key=course_run.external_key)
 def test_modify_curriculum_course_membership__curriculum_only(self):
     course_run_1, curriculum_1 = self._create_single_course_curriculum('colliding-key', 'curriculum_1')
     course_run_2, _ = self._create_single_course_curriculum('colliding-key', 'curriculum_2')
     curriculum_course_membership_2 = course_run_2.course.curriculum_course_membership.first()
     message = _duplicate_external_key_message([course_run_1])
     with self.assertNumQueries(2):
         with self.assertRaisesRegex(ValidationError, escape(message)):
             curriculum_course_membership_2.curriculum = curriculum_1
             curriculum_course_membership_2.save()
 def test_modify_course_run__course_run_only(self):
     course = self._create_course_and_runs(1)
     course_run_1a = course.course_runs.get(external_key='ext-key-course-1a')
     course_run_1b = course.course_runs.get(external_key='ext-key-course-1b')
     message = _duplicate_external_key_message([course_run_1a])
     with self.assertNumQueries(6):
         with self.assertRaisesRegex(ValidationError, escape(message)):
             course_run_1b.external_key = 'ext-key-course-1a'
             course_run_1b.save()
 def test_modify_course_run(self, copy_key):
     copied_course_run = CourseRun.objects.get(key=copy_key)
     message = _duplicate_external_key_message([copied_course_run])
     course_run = CourseRun.objects.get(key='course-run-id/course-2a/test')
     # This number may seem high but only 3 are select statements caused by the external key signal
     with self.assertNumQueries(9):
         with self.assertRaisesRegex(ValidationError, escape(message)):
             course_run.external_key = copied_course_run.external_key
             course_run.save()
 def test_draft_collides_with_nondraft(self):
     course_run_1a = self.course_1.course_runs.get(external_key='ext-key-course-1a')
     message = _duplicate_external_key_message([course_run_1a])
     with self.assertNumQueries(12, threshold=0):
         with self.assertRaisesRegex(ValidationError, escape(message)):
             factories.CourseRunFactory(
                 course=self.course_1,
                 draft=True,
                 external_key='ext-key-course-1a',
             )
 def test_create_course_run(self, copy_key):
     copied_course_run = CourseRun.objects.get(key=copy_key)
     message = _duplicate_external_key_message([copied_course_run])
     # This number may seem high but only 2 are select statements caused by the external key signal
     with self.assertNumQueries(12, threshold=0):
         with self.assertRaisesRegex(ValidationError, escape(message)):
             factories.CourseRunFactory(
                 course=self.course_2,
                 external_key=copied_course_run.external_key,
             )
 def test_modify_course_run__curriculum_only(self):
     course_run_1a, _ = self._create_single_course_curriculum('colliding-key', 'curriculum_1')
     course_run_1b = factories.CourseRunFactory(
         course=course_run_1a.course,
         external_key='this-is-a-different-external-key'
     )
     message = _duplicate_external_key_message([course_run_1a])
     with self.assertNumQueries(6):
         with self.assertRaisesRegex(ValidationError, escape(message)):
             course_run_1b.external_key = 'colliding-key'
             course_run_1b.save()
Exemple #11
0
 def test_create_curriculum_course_membership__curriculum_only(self):
     course_run_1, curriculum_1 = self._create_single_course_curriculum(
         'colliding-key', 'curriculum_1')
     course_run_2 = factories.CourseRunFactory(external_key='colliding-key')
     message = _duplicate_external_key_message([course_run_1])
     with self.assertNumQueries(2):
         with self.assertRaisesRegex(ValidationError, escape(message)):
             factories.CurriculumCourseMembershipFactory(
                 course=course_run_2.course,
                 curriculum=curriculum_1,
             )
 def test_modify_curriculum(self):
     course_run_1a = CourseRun.objects.get(key='course-run-id/course-1a/test')
     _, curriculum_4 = self._create_single_course_curriculum('ext-key-course-1a', 'curriculum_4')
     new_program = factories.ProgramFactory(
         curricula=[curriculum_4]
     )
     message = _duplicate_external_key_message([course_run_1a])
     with self.assertNumQueries(5):
         with self.assertRaisesRegex(ValidationError, escape(message)):
             curriculum_4.program = self.program_1
             curriculum_4.save()
     curriculum_4.refresh_from_db()
     assert curriculum_4.program == new_program
 def test_create_curriculum_course_membership(self, curriculum_id):
     new_course_run = factories.CourseRunFactory(
         external_key='ext-key-course-1a'
     )
     new_course = new_course_run.course
     course_run_1a = CourseRun.objects.get(key='course-run-id/course-1a/test')
     message = _duplicate_external_key_message([course_run_1a])
     with self.assertNumQueries(2):
         with self.assertRaisesRegex(ValidationError, escape(message)):
             factories.CurriculumCourseMembershipFactory(
                 course=new_course,
                 curriculum=self.curriculums[curriculum_id],
             )
Exemple #14
0
 def test_collision_does_not_include_drafts(self):
     with self.assertNumQueries(80, threshold=0):
         course_run = factories.CourseRunFactory(
             course=self.course_1,
             draft=False,
             external_key='external-key-drafttest')
     message = _duplicate_external_key_message([course_run
                                                ])  # Not draft_course_run_1
     with self.assertNumQueries(11, threshold=0):
         with self.assertRaisesRegex(ValidationError, escape(message)):
             factories.CourseRunFactory(
                 course=self.course_1,
                 draft=False,
                 external_key='external-key-drafttest')
 def test_collision_does_not_include_drafts(self):
     with self.assertNumQueries(FuzzyInt(75, 1)):
         course_run = factories.CourseRunFactory(
             course=self.course_1,
             draft=False,
             external_key='external-key-drafttest',
             end=datetime.datetime(2014, 1, 1, tzinfo=UTC),
             enrollment_end=datetime.datetime(2014, 1, 1, tzinfo=UTC),
         )
     message = _duplicate_external_key_message([course_run])  # Not draft_course_run_1
     with self.assertNumQueries(FuzzyInt(11, 1)):
         with self.assertRaisesRegex(ValidationError, escape(message)):
             factories.CourseRunFactory(
                 course=self.course_1,
                 draft=False,
                 external_key='external-key-drafttest',
                 end=datetime.datetime(2014, 1, 1, tzinfo=UTC),
                 enrollment_end=datetime.datetime(2014, 1, 1, tzinfo=UTC),
             )
 def test_multiple_collisions__curriculum_course_membership(self):
     message = _duplicate_external_key_message([self.course_run_1a, self.course_run_2b])
     with self.assertNumQueries(2):
         with self.assertRaisesRegex(ValidationError, escape(message)):
             self._add_courses_to_curriculum(self.curriculum_2, self.course)