def test_max_greater_than_system_limits(self): answer = { 'max_value': { 'value': 10000000000 }, 'id': 'test-range', 'label': 'Range Test 10 to 20', 'mandatory': False, 'validation': { 'messages': { 'INVALID_NUMBER': 'Please only enter whole numbers into the field.', 'NUMBER_TOO_SMALL': 'The minimum value allowed is 10. Please correct your answer.', 'NUMBER_TOO_LARGE': 'The maximum value allowed is 20. Please correct your answer.' } }, 'type': 'Currency' } label = answer['label'] returned_error_messages = answer['validation']['messages'] with self.assertRaises(Exception) as ite: get_number_field(answer, label, '', returned_error_messages, self.store) self.assertEqual( str(ite.exception), 'max_value: 10000000000 > system maximum: 9999999999 for answer id: test-range' )
def test_answer_id_invalid_type(self): answer = { 'max_value': { 'answer_id': 'set-maximum-cat' }, 'label': 'Range Test 10 to 20', 'mandatory': False, 'validation': { 'messages': { 'INVALID_NUMBER': 'Please only enter whole numbers into the field.', 'NUMBER_TOO_SMALL': 'The minimum value allowed is 10. Please correct your answer.', 'NUMBER_TOO_LARGE': 'The maximum value allowed is 20. Please correct your answer.' } }, 'id': 'test-range', 'type': 'Currency' } label = answer['label'] returned_error_messages = answer['validation']['messages'] with self.assertRaises(Exception) as ite: get_number_field(answer, label, '', returned_error_messages, self.store) self.assertEqual( str(ite.exception), 'answer: set-maximum-cat value: cat for answer id: test-range is not a valid number' )
def test_manual_decimal_too_large(self): answer = { 'decimal_places': 10, 'label': 'Range Test 10 to 20', 'mandatory': False, 'validation': { 'messages': { 'INVALID_NUMBER': 'Please only enter whole numbers into the field.', 'INVALID_DECIMAL': 'Please enter a number to 2 decimal places.' } }, 'id': 'test-range', 'type': 'Currency' } label = answer['label'] returned_error_messages = answer['validation']['messages'] with self.assertRaises(Exception) as ite: get_number_field(answer, label, '', returned_error_messages, AnswerStore()) self.assertEqual( str(ite.exception), 'decimal_places: 10 > system maximum: {} for answer id: test-range' .format(MAX_DECIMAL_PLACES))
def test_default_range(self): answer = { 'decimal_places': 2, 'label': 'Range Test 10 to 20', 'mandatory': False, 'validation': { 'messages': { 'INVALID_NUMBER': 'Please only enter whole numbers into the field.', 'NUMBER_TOO_SMALL': 'The minimum value allowed is 10. Please correct your answer.', 'NUMBER_TOO_LARGE': 'The maximum value allowed is 20. Please correct your answer.' } }, 'id': 'test-range', 'type': 'Currency' } label = answer['label'] returned_error_messages = answer['validation']['messages'] integer_field = get_number_field(answer, label, '', returned_error_messages, self.store) for validator in integer_field.kwargs['validators']: if isinstance(validator, NumberRange): test_validator = validator self.assertEqual(test_validator.maximum, 9999999999) self.assertEqual(test_validator.minimum, 0)
def test_answer_id_range(self): answer = { 'min_value': { 'answer_id': 'set-minimum' }, 'max_value': { 'answer_id': 'set-maximum' }, 'label': 'Range Test 10 to 20', 'mandatory': False, 'validation': { 'messages': { 'INVALID_NUMBER': 'Please only enter whole numbers into the field.', 'NUMBER_TOO_SMALL': 'The minimum value allowed is 10. Please correct your answer.', 'NUMBER_TOO_LARGE': 'The maximum value allowed is 20. Please correct your answer.' } }, 'id': 'test-range', 'type': 'Currency' } label = answer['label'] returned_error_messages = answer['validation']['messages'] integer_field = get_number_field(answer, label, '', returned_error_messages, self.store, False) self.assertTrue(integer_field.field_class == CustomIntegerField) for validator in integer_field.kwargs['validators']: if isinstance(validator, NumberRange): test_validator = validator mock_form = Mock() integer_field.data = 9 with self.assertRaises(ValidationError) as ite: test_validator(mock_form, integer_field) self.assertEqual(str(ite.exception), returned_error_messages['NUMBER_TOO_SMALL']) try: integer_field.data = 20 test_validator(mock_form, integer_field) integer_field.data = 10 test_validator(mock_form, integer_field) except ValidationError: self.fail('Valid integer raised ValidationError')
def test_manual_decimal(self): answer = { 'decimal_places': 2, 'label': 'Range Test 10 to 20', 'mandatory': False, 'validation': { 'messages': { 'INVALID_NUMBER': 'Please only enter whole numbers into the field.', 'INVALID_DECIMAL': 'Please enter a number to 2 decimal places.' } }, 'id': 'test-range', 'type': 'Currency' } label = answer['label'] returned_error_messages = answer['validation']['messages'] decimal_field = get_number_field(answer, label, '', returned_error_messages, AnswerStore()) self.assertTrue(decimal_field.field_class == CustomDecimalField) for validator in decimal_field.kwargs['validators']: if isinstance(validator, DecimalPlaces): test_validator = validator mock_form = Mock() decimal_field.raw_data = ['1.234'] with self.assertRaises(ValidationError) as ite: test_validator(mock_form, decimal_field) self.assertEqual(str(ite.exception), returned_error_messages['INVALID_DECIMAL']) try: decimal_field.raw_data = ['1.23'] test_validator(mock_form, decimal_field) except ValidationError: self.fail('Valid decimal raised ValidationError')
def test_zero_min(self): min_value = 0 answer = { 'min_value': { 'value': min_value }, 'label': 'Min Test', 'mandatory': False, 'id': 'test-range', 'type': 'Currency' } label = answer['label'] error_message = error_messages['NUMBER_TOO_SMALL'] % dict( min=min_value) integer_field = get_number_field(answer, label, '', error_messages, self.store) self.assertTrue(integer_field.field_class == CustomIntegerField) for validator in integer_field.kwargs['validators']: if isinstance(validator, NumberRange): test_validator = validator mock_form = Mock() integer_field.data = -1 with self.assertRaises(ValidationError) as ite: test_validator(mock_form, integer_field) self.assertEqual(str(ite.exception), error_message) try: integer_field.data = 0 test_validator(mock_form, integer_field) except ValidationError: self.fail('Valid integer raised ValidationError')