def test_clean_not_unique_grade(self):
        point_to_grade_map = PointToGradeMap.objects.create(assignment=self.assignment)
        PointRangeToGrade(
            point_to_grade_map=point_to_grade_map,
            minimum_points=1,
            maximum_points=2,
            grade='C'
        ).save()
        pointrange_to_grade = PointRangeToGrade(
            point_to_grade_map=point_to_grade_map,
            minimum_points=5,
            maximum_points=6,
            grade='C'
        )

        with transaction.atomic():
            with self.assertRaises(IntegrityError):
                pointrange_to_grade.save()

        # Does not fail when in another assignment
        assignment2 = self.periodbuilder.add_assignment('assignment2').assignment
        pointrange_to_grade = PointRangeToGrade(
            point_to_grade_map=PointToGradeMap.objects.create(assignment=assignment2),
            minimum_points=5,
            maximum_points=6,
            grade='C'
        ).save()
 def test_clean_max_greater_than_min_works(self):
     pointrange_to_grade = PointRangeToGrade(
         point_to_grade_map=PointToGradeMap.objects.create(
             assignment=self.assignment),
         minimum_points=0,
         maximum_points=1,
         grade='D')
     pointrange_to_grade.clean()  # Should work without error
 def test_clean_max_greater_than_min_works(self):
     pointrange_to_grade = PointRangeToGrade(
         point_to_grade_map=PointToGradeMap.objects.create(assignment=self.assignment),
         minimum_points=0,
         maximum_points=1,
         grade='D'
     )
     pointrange_to_grade.clean() # Should work without error
 def test_clean_max_equal_to_min_works(self):
     pointrange_to_grade = PointRangeToGrade(
         point_to_grade_map=PointToGradeMap.objects.create(
             assignment=self.assignment),
         minimum_points=1,
         maximum_points=1,
         grade='D')
     with self.assertRaises(ValidationError):
         pointrange_to_grade.clean()
 def test_clean_max_equal_to_min_works(self):
     pointrange_to_grade = PointRangeToGrade(
         point_to_grade_map=PointToGradeMap.objects.create(assignment=self.assignment),
         minimum_points=1,
         maximum_points=1,
         grade='D'
     )
     with self.assertRaises(ValidationError):
         pointrange_to_grade.clean()
 def test_clean_existing_does_not_match_overlapping_range(self):
     pointrange_to_grade = PointRangeToGrade(
         point_to_grade_map=PointToGradeMap.objects.create(assignment=self.assignment),
         minimum_points=12,
         maximum_points=18,
         grade='C'
     )
     pointrange_to_grade.save()
     pointrange_to_grade.clean()
 def test_clean_overlapping_other_on_same_assignment_fails(self):
     point_to_grade_map = PointToGradeMap.objects.create(
         assignment=self.assignment)
     point_to_grade_map.pointrangetograde_set.create(minimum_points=10,
                                                     maximum_points=20,
                                                     grade='D')
     pointrange_to_grade = PointRangeToGrade(
         point_to_grade_map=point_to_grade_map,
         minimum_points=12,
         maximum_points=18,
         grade='C')
     with self.assertRaises(ValidationError):
         pointrange_to_grade.clean()
 def test_clean_does_not_match_overlapping_range_in_other_assignments(self):
     assignment2 = self.periodbuilder.add_assignment(
         'assignment2', max_points=100).assignment
     pointrange_to_grade = PointRangeToGrade(
         point_to_grade_map=PointToGradeMap.objects.create(
             assignment=self.assignment),
         minimum_points=12,
         maximum_points=18,
         grade='D')
     PointRangeToGrade(point_to_grade_map=PointToGradeMap.objects.create(
         assignment=assignment2),
                       minimum_points=10,
                       maximum_points=20,
                       grade='C').save()
     pointrange_to_grade.clean()
 def test_clean_overlapping_other_on_same_assignment_fails(self):
     point_to_grade_map = PointToGradeMap.objects.create(assignment=self.assignment)
     pointrange_to_grade = point_to_grade_map.pointrangetograde_set.create(
         minimum_points=10,
         maximum_points=20,
         grade='D'
     )
     pointrange_to_grade = PointRangeToGrade(
         point_to_grade_map=point_to_grade_map,
         minimum_points=12,
         maximum_points=18,
         grade='C'
     )
     with self.assertRaises(ValidationError):
         pointrange_to_grade.clean()
 def test_clean_does_not_match_overlapping_range_in_other_assignments(self):
     assignment2 = self.periodbuilder.add_assignment('assignment2').assignment
     pointrange_to_grade = PointRangeToGrade(
         point_to_grade_map=PointToGradeMap.objects.create(assignment=self.assignment),
         minimum_points=12,
         maximum_points=18,
         grade='D'
     )
     PointRangeToGrade(
         point_to_grade_map=PointToGradeMap.objects.create(assignment=assignment2),
         minimum_points=10,
         maximum_points=20,
         grade='C'
     ).save()
     pointrange_to_grade.clean()
    def test_clean_not_unique_grade(self):
        point_to_grade_map = PointToGradeMap.objects.create(
            assignment=self.assignment)
        PointRangeToGrade(point_to_grade_map=point_to_grade_map,
                          minimum_points=1,
                          maximum_points=2,
                          grade='C').save()
        pointrange_to_grade = PointRangeToGrade(
            point_to_grade_map=point_to_grade_map,
            minimum_points=5,
            maximum_points=6,
            grade='C')

        with transaction.atomic():
            with self.assertRaises(IntegrityError):
                pointrange_to_grade.save()

        # Does not fail when in another assignment
        assignment2 = self.periodbuilder.add_assignment(
            'assignment2').assignment
        PointRangeToGrade(point_to_grade_map=PointToGradeMap.objects.create(
            assignment=assignment2),
                          minimum_points=5,
                          maximum_points=6,
                          grade='C').save()
 def test_clean_existing_does_not_match_overlapping_range(self):
     pointrange_to_grade = PointRangeToGrade(
         point_to_grade_map=PointToGradeMap.objects.create(
             assignment=self.assignment),
         minimum_points=12,
         maximum_points=18,
         grade='C')
     pointrange_to_grade.save()
     pointrange_to_grade.clean()