def test_pluggable_validators_priority(self):
        class AngryValidator(BaseValidator):
            priority = 9000
            error_message = "Angry Validator is Angry."

            def validate(self):
                raise ValidationError(self.error_message)

        occurrence = Occurrence(
            calendar=self.calendar,
            event=self.event,
            start=self.start,
            finish=self.start # also fails finish > start check.
        )
        try:
            collect_validators.connect(AngryValidator, sender=Occurrence)
            occurrence.save()
            self.fail('ValidationError not triggered')
        except ValidationError, e:
            assert_equal(e.messages[0], AngryValidator.error_message)
            AngryValidator.priority = -1
            try:
                occurrence.save()
                self.fail('ValidationError not triggered')
            except ValidationError, e:
                assert_not_equal(e.messages[0], AngryValidator.error_message)
 def test_attended_attendance_records_cannot_be_cancelled(self):
     try:
         collect_validators.disconnect(
             CannotAttendFutureEventsValidator, sender=Attendance
         )
         att = Attendance.objects.create(
             user=self.user,
             occurrence=self.occurrence,
             status=Attendance.STATUS.attended
         )
         att.status = att.STATUS.cancelled
         assert_raises(ValidationError, att.save)
     finally:
         collect_validators.connect(
             CannotAttendFutureEventsValidator, sender=Attendance
         )
 def test_only_one_active_attendance_record_for_user_occurrence(self):
     try:
         collect_validators.disconnect(
             CannotAttendFutureEventsValidator, sender=Attendance
         )
         att = Attendance(user=self.user, occurrence=self.occurrence)
         for status in [Attendance.STATUS.booked, Attendance.STATUS.attended]:
             att.status = att.STATUS.attended
             att.save()
             self.assertRaises(ValidationError, Attendance.objects.create,
                 user=self.user, occurrence=self.occurrence
             )
         for status in [Attendance.STATUS.inactive, Attendance.STATUS.cancelled]:
             att.status = status
             att.save()
             att2 = Attendance.objects.create(
                 user=self.user, occurrence=self.occurrence
             )
             att2.delete()
     finally:
         collect_validators.connect(
             CannotAttendFutureEventsValidator, sender=Attendance
         )