def test_timestamp_type_representation(self):
    self.assertRepr(schema.timestamp,     'schema.timestamp')
    self.assertRepr(schema.timestamp.iso, 'schema.timestamp.iso')

    self.assertRepr(schema.timestamp('21-10-2015 04:29 pm'),
                   "schema.timestamp('2015-10-21T16:29:00+00:00')")

    self.assertRepr(schema.timestamp('21-10-2015 04:29 pm').iso,
                   "schema.timestamp('2015-10-21T16:29:00+00:00').iso")

    self.assertRepr(schema.timestamp.min('01/01/2015'),
                   "schema.timestamp.min('2015-01-01T00:00:00+00:00')")
    
    self.assertRepr(schema.timestamp.max('01/01/2015'),
                   "schema.timestamp.max('2015-01-01T00:00:00+00:00')")

    self.assertRepr(
      schema.timestamp.between('01/01/2015', '21/10/2015'),
      "schema.timestamp.between('2015-01-01T00:00:00+00:00', '2015-10-21T00:00:00+00:00')"
    )

    self.assertRepr(schema.timestamp.format('%Y-%m-%d %H:%M:%S'),
                   "schema.timestamp.format('%Y-%m-%d %H:%M:%S')")

    self.assertRepr(schema.timestamp.nullable, 'schema.timestamp.nullable')
  def test_it_validates_nullable(self):
    self.assertValidationPasses(None, schema.timestamp.nullable)
    self.assertValidationPasses(None, schema.timestamp('21/10/2015').nullable)

    self.assertValidationFails(False, schema.timestamp.nullable)
    self.assertValidationFails(0,     schema.timestamp.nullable)
    self.assertValidationFails([],    schema.timestamp.nullable)
    self.assertValidationFails({},    schema.timestamp.nullable)
    def test_it_validates_value(self):
        timestamp = schema.timestamp('21-10-2015 04:29 pm')

        self.assertValidationPasses('21-10-2015 04:29 pm', timestamp)
        self.assertValidationPasses('21/10/2015 16:29', timestamp)
        self.assertValidationPasses('2015-10-21T16:29:00+00:00', timestamp)

        self.assertValidationFails('21-10-2015 04:29 am', timestamp)
        self.assertValidationFails('?', timestamp)
  def test_it_validates_value(self):
    timestamp = schema.timestamp('21-10-2015 04:29 pm')

    self.assertValidationPasses('21-10-2015 04:29 pm',       timestamp)
    self.assertValidationPasses('21/10/2015 16:29',          timestamp)
    self.assertValidationPasses('2015-10-21T16:29:00+00:00', timestamp)

    self.assertValidationFails('21-10-2015 04:29 am', timestamp)
    self.assertValidationFails('?',                   timestamp)
    def test_it_validates_nullable(self):
        with warnings.catch_warnings():
            warnings.simplefilter('ignore')

            self.assertValidationPasses(None, schema.timestamp.nullable)
            self.assertValidationPasses(
                None,
                schema.timestamp('21/10/2015').nullable)

            self.assertValidationFails(False, schema.timestamp.nullable)
            self.assertValidationFails(0, schema.timestamp.nullable)
            self.assertValidationFails([], schema.timestamp.nullable)
            self.assertValidationFails({}, schema.timestamp.nullable)
  def test_timestamp_type_generator(self):
    # type
    data = fake(schema.timestamp)
    self.assertIsInstance(data, str)

    # overriding
    data = fake(schema.timestamp, '21-10-2015 04:29 pm')
    self.assertEqual(data, '21-10-2015 04:29 pm')
    
    # example
    data = fake(schema.timestamp.example('01/01/2015'))
    self.assertEqual(data, '01/01/2015')

    # value
    data = fake(schema.timestamp('21-10-2015 04:29 pm'))
    self.assertEqual(data, '2015-10-21 16:29:00')
    def test_it_validates_ambiguous_cases(self):
        timestamp = schema.timestamp('03 Feb 2020')
        self.assertValidationFails('2020-02-03', timestamp)

        timestamp = schema.timestamp('03 Feb 2020').format('%Y-%m-%d')
        self.assertValidationPasses('2020-02-03', timestamp)