def test_date_type_fmt(self):

        value = '10/06/2014'
        self.field['format'] = 'fmt:%d/%m/%Y'
        _type = types.DateType(self.field)

        self.assertEquals(_type.cast(value), date(2014, 6, 10))
    def test_date_type_fmt_stripping_bug(self):

        value = '2014-06'
        self.field['format'] = 'fmt:%Y-%m'
        _type = types.DateType(self.field)

        self.assertEquals(_type.cast(value), date(2014, 6, 1))
    def test_constraints_maximum_valid_value_equals(self):
        value = '1978-05-29'
        field = self._make_default_field(type='date',
                                         constraints={'maximum': '1978-05-29'})
        _type = types.DateType(field)

        self.assertEqual(_type.cast(value),
                         datetime.datetime.strptime(value, '%Y-%m-%d').date())
    def test_constraints_enum_valid_value(self):
        '''value is in enum array'''
        value = "2015-10-22"
        field = self._make_default_field(type='date',
                                         constraints={'enum': ["2015-10-22"]})

        _type = types.DateType(field)

        self.assertEqual(_type.cast(value),
                         datetime.datetime.strptime(value, '%Y-%m-%d').date())
    def test_constraints_minimum_invalid_value(self):
        value = '1978-05-29'
        field = self._make_default_field(type='date',
                                         constraints={'minimum': '1978-05-30'})
        _type = types.DateType(field)

        with pytest.raises(exceptions.ConstraintError) as e:
            _type.cast(value)
        self.assertEqual(e.value.msg,
                         "The field 'Name' must not be less than 1978-05-30")
    def test_constraints_pattern_valid_value(self):
        '''value is valid for pattern'''
        value = '2015-01-23'
        field = self._make_default_field(
            type='date', constraints={"pattern": "2015-[0-9]{2}-[0-9]{2}"})

        _type = types.DateType(field)

        self.assertEqual(_type.cast(value),
                         datetime.datetime.strptime(value, '%Y-%m-%d').date())
    def test_constraints_maximum_invalid_value(self):
        value = '1978-05-29'
        # value of maximum constraint should have the same format
        field = self._make_default_field(type='date',
                                         constraints={'maximum': '1978-05-28'})
        _type = types.DateType(field)

        with pytest.raises(exceptions.ConstraintError) as e:
            _type.cast(value)
        self.assertEqual(e.value.msg,
                         "The field 'Name' must not be more than 1978-05-28")
    def test_constraints_enum_invalid_value(self):
        '''value is not in enum array'''
        value = "2015-10-22"
        field = self._make_default_field(type='date',
                                         constraints={'enum': ["2015-10-23"]})

        _type = types.DateType(field)

        with pytest.raises(exceptions.ConstraintError) as e:
            _type.cast(value)
        self.assertEqual(
            e.value.msg, "The value for field 'Name' "
            "must be in the enum array")
    def test_constraints_pattern_invalid_value(self):
        '''value is invalid for pattern'''
        value = '2013-01-23'
        field = self._make_default_field(
            type='date', constraints={"pattern": "2015-[0-9]{2}-[0-9]{2}"})

        _type = types.DateType(field)

        with pytest.raises(exceptions.ConstraintError) as e:
            _type.cast(value)
        self.assertEqual(
            e.value.msg, "The value for field 'Name' "
            "must match the pattern")
 def test_date_type_with_already_cast_value(self):
     for value in [date(2015, 1, 1)]:
         for format in ['default', 'any', 'fmt:%Y-%m-%d']:
             self.field['format'] = format
             _type = types.DateType(self.field)
             self.assertEqual(_type.cast(value), value)
    def test_valid_fmt_invalid_value(self):
        value = '2014/12/19'
        self.field['type'] = 'fmt:%m/%d/%y'
        _type = types.DateType(self.field)

        self.assertRaises(exceptions.InvalidDateType, _type.cast, value)
    def test_date_type_any_parser_fail(self):
        value = '10th Jan nineteen sixty nine'
        self.field['format'] = 'any'
        _type = types.DateType(self.field)

        self.assertRaises(exceptions.InvalidDateType, _type.cast, value)
    def test_non_iso_date_fails_for_default(self):
        value = '01-01-2019'
        _type = types.DateType(self.field)

        self.assertRaises(exceptions.InvalidDateType, _type.cast, value)
    def test_date_type_any_true(self):
        value = '10th Jan 1969'
        self.field['format'] = 'any'
        _type = types.DateType(self.field)

        self.assertEquals(_type.cast(value), date(1969, 1, 10))
    def test_date_from_string_iso_format(self):
        value = '2019-01-01'
        _type = types.DateType(self.field)

        self.assertEquals(_type.cast(value), date(2019, 1, 1))