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 )