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'
        )
Пример #3
0
    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')
Пример #6
0
    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')