def test_date_type_validator_valid_leap_year():
        validator = DateCheck()

        # 2016 WAS a leap year
        mock_form = Mock()
        mock_form.data = '2016-02-29'

        mock_field = Mock()
        validator(mock_form, mock_field)
Ejemplo n.º 2
0
def get_date_form(answer=None,
                  to_field_data=None,
                  validate_range=False,
                  error_messages=None):
    """
    Returns a date form metaclass with appropriate validators. Used in both date and
    date range form creation.

    :param error_messages: The messages during validation
    :param answer: The answer on which to base this form
    :param to_field_data: The data coming from the
    :param validate_range: Whether the dateform should add a daterange validator
    :return: The generated DateForm metaclass
    """
    class DateForm(Form):

        # Set up all the calendar month choices for select
        MONTH_CHOICES = [('', 'Select month')] + [
            (str(x), calendar.month_name[x]) for x in range(1, 13)
        ]

        month = SelectField(choices=MONTH_CHOICES, default='')
        year = StringField()

    validate_with = [validators.Optional()]

    if not error_messages:
        date_messages = {}
    else:
        date_messages = error_messages.copy()

    if answer['mandatory'] is True:
        if 'validation' in answer and 'messages' in answer['validation'] \
                and 'MANDATORY' in answer['validation']['messages']:
            date_messages['MANDATORY'] = answer['validation']['messages'][
                'MANDATORY']

        validate_with = [DateRequired(message=date_messages['MANDATORY'])]

    if 'validation' in answer and 'messages' in answer['validation'] \
            and 'INVALID_DATE' in answer['validation']['messages']:
        date_messages['INVALID_DATE'] = answer['validation']['messages'][
            'INVALID_DATE']

    validate_with += [DateCheck(date_messages['INVALID_DATE'])]

    if validate_range and to_field_data:
        validate_with += [
            DateRangeCheck(to_field_data=to_field_data, messages=date_messages)
        ]

    DateForm.day = StringField(validators=validate_with)

    return DateForm
    def test_date_type_validator_invalid_year(self):
        validator = DateCheck()

        mock_form = Mock()
        mock_form.data = '20000-12-20'

        mock_field = Mock()

        with self.assertRaises(StopValidation) as ite:
            validator(mock_form, mock_field)

        self.assertEqual(error_messages['INVALID_DATE'], str(ite.exception))
    def test_date_type_validator_missing_month(self):
        validator = DateCheck()

        mock_form = Mock()
        mock_form.data = '2016--03'

        mock_field = Mock()

        with self.assertRaises(StopValidation) as ite:
            validator(mock_form, mock_field)

        self.assertEqual(error_messages['INVALID_DATE'], str(ite.exception))
Ejemplo n.º 5
0
    def test_date_type_validator_none(self):
        validator = DateCheck()

        mock_form = Mock()
        mock_form.day.data = None
        mock_form.month.data = None
        mock_form.year.data = None

        mock_field = Mock()

        with self.assertRaises(StopValidation) as ite:
            validator(mock_form, mock_field)

        self.assertEqual(error_messages['INVALID_DATE'], str(ite.exception))
Ejemplo n.º 6
0
    def test_date_type_validator_valid_leap_year(self):
        validator = DateCheck()

        # 2016 WAS a leap year
        mock_form = Mock()
        mock_form.day.data = '29'
        mock_form.month.data = "02"
        mock_form.year.data = "2016"

        mock_field = Mock()

        try:
            validator(mock_form, mock_field)
        except StopValidation:
            self.fail("Valid date raised StopValidation")
Ejemplo n.º 7
0
    def test_date_type_validator_invalid_leap_year(self):

        validator = DateCheck()

        # 2015 was not a leap year
        mock_form = Mock()
        mock_form.day.data = '29'
        mock_form.month.data = '02'
        mock_form.year.data = '2015'

        mock_field = Mock()

        with self.assertRaises(StopValidation) as ite:
            validator(mock_form, mock_field)

        self.assertEqual(error_messages['INVALID_DATE'], str(ite.exception))
Ejemplo n.º 8
0
def get_date_form(answer_store, metadata, answer=None, error_messages=None):
    """
    Returns a date form metaclass with appropriate validators. Used in both date and
    date range form creation.

    :param error_messages: The messages during validation
    :param answer: The answer on which to base this form
    :param answer_store: The current answer store
    :param metadata: metadata for reference meta dates
    :return: The generated DateForm metaclass
    """
    class DateForm(Form):
        day = StringField()
        year = StringField()

        @property
        def data(self):
            data = super().data
            if not data['year'] and not data['month'] and not data['day']:
                return None

            return '{:04d}-{:02d}-{:02d}'.format(
                int(data['year']),
                int(data['month']),
                int(data['day']),
            )

    validate_with = [OptionalForm()]

    if answer['mandatory'] is True:
        validate_with = validate_mandatory_date(error_messages, answer)

    error_message = get_bespoke_message(
        answer, 'INVALID_DATE') or error_messages['INVALID_DATE']

    validate_with.append(DateCheck(error_message))

    if 'minimum' in answer or 'maximum' in answer:
        min_max_validation = validate_min_max_date(answer, answer_store,
                                                   metadata, 'yyyy-mm-dd')
        validate_with.append(min_max_validation)

    # Set up all the calendar month choices for select
    DateForm.month = get_month_selection_field(validate_with)

    return DateForm
    def test_date_type_validator_valid_dates():
        validator = DateCheck()

        mock_form = Mock()
        mock_form.data = '2016-01-29'

        mock_field = Mock()
        validator(mock_form, mock_field)

        mock_form = Mock()
        mock_form.data = '2016-12-01'

        mock_field = Mock()
        validator(mock_form, mock_field)

        mock_form = Mock()
        mock_form.data = '2016-03-03'

        mock_field = Mock()
        validator(mock_form, mock_field)
Ejemplo n.º 10
0
def get_date_form(answer=None, error_messages=None):
    """
    Returns a date form metaclass with appropriate validators. Used in both date and
    date range form creation.

    :param error_messages: The messages during validation
    :param answer: The answer on which to base this form
    :return: The generated DateForm metaclass
    """
    class DateForm(Form):
        day = StringField()
        year = StringField()

    validate_with = [OptionalForm()]

    if not error_messages:
        date_messages = {}
    else:
        date_messages = error_messages.copy()

    if answer['mandatory'] is True:
        if 'validation' in answer and 'messages' in answer['validation'] \
                and 'MANDATORY' in answer['validation']['messages']:
            date_messages['MANDATORY'] = answer['validation']['messages']['MANDATORY']

        validate_with = [DateRequired(message=date_messages['MANDATORY'])]

    if 'validation' in answer and 'messages' in answer['validation'] \
            and 'INVALID_DATE' in answer['validation']['messages']:
        date_messages['INVALID_DATE'] = answer['validation']['messages']['INVALID_DATE']

    validate_with += [DateCheck(date_messages['INVALID_DATE'])]

    # Set up all the calendar month choices for select
    month_choices = [('', 'Select month')] + [(str(x), calendar.month_name[x]) for x in range(1, 13)]

    DateForm.month = SelectField(choices=month_choices, default='', validators=validate_with)

    return DateForm
Ejemplo n.º 11
0
    def test_date_type_validator_valid_dates(self):

        validator = DateCheck()

        mock_form = Mock()
        mock_form.day.data = '01'
        mock_form.month.data = "01"
        mock_form.year.data = "2016"

        mock_field = Mock()

        try:
            validator(mock_form, mock_field)
        except StopValidation:
            self.fail("Valid date raised StopValidation")

        mock_form = Mock()
        mock_form.day.data = '1'
        mock_form.month.data = "12"
        mock_form.year.data = "2016"

        mock_field = Mock()

        try:
            validator(mock_form, mock_field)
        except StopValidation:
            self.fail("Valid date raised StopValidation")

        mock_form = Mock()
        mock_form.day.data = '01'
        mock_form.month.data = "03"
        mock_form.year.data = "2016"

        mock_field = Mock()

        try:
            validator(mock_form, mock_field)
        except StopValidation:
            self.fail("Valid date raised StopValidation")