def test_required_property(self): # no constraints -> require = False self.assertFalse(SchemaConstraints(None).required) cts = clone(BASE_CONSTRAINTS) self.assertFalse(cts['required']) self.assertFalse(SchemaConstraints(cts).required) cts = clone(BASE_CONSTRAINTS) cts['required'] = True self.assertTrue(cts['required']) self.assertTrue(SchemaConstraints(cts).required)
def test_string(self): # test that a blank string '' is not accepted when the field is required null_values = ['null', 'none', 'nil', 'nan', '-', ''] desc = clone(BASE_FIELD) desc['type'] = 'string' desc['constraints'] = clone(REQUIRED_CONSTRAINTS) f = SchemaField(desc) for v in null_values: with self.assertRaises(Exception): f.cast(v) # test non unicode (python 2) value = 'not unicode' self.assertIsInstance(f.cast(value), six.text_type) self.assertEqual(f.cast(value), value)
def test_datetime_any(self): """ test datetime field with 'any' format :return: """ descriptor = clone(BASE_FIELD) descriptor['type'] = 'datetime' # format='any'. # The main problem is to be sure that a dd/mm/yyyy is not interpreted as mm/dd/yyyy descriptor['format'] = 'any' f = SchemaField(descriptor) valid_values = [ '2016-07-10 13:55:00', '10/07/2016 13:55', '10/07/16 1:55 pm', '2016-07-10 13:55:00', '10-July-2016 13:55:00', '10-JUlY-16 13:55:00', '10-07-2016 13:55:00', '10-07-16 13:55:00' ] expected_dt = datetime.datetime(2016, 7, 10, 13, 55, 00) for v in valid_values: dt = f.cast(v) self.assertIsInstance(dt, datetime.datetime) self.assertEqual(expected_dt, dt) invalid_value = ['djskdj'] for v in invalid_value: with self.assertRaises(Exception): f.cast(v)
def test_date(self): descriptor = clone(BASE_FIELD) descriptor['type'] = 'date' # 'default' format = ISO descriptor['format'] = 'default' f = SchemaField(descriptor) valid_values = ['2016-07-29'] for v in valid_values: date = f.cast(v) self.assertIsInstance(date, datetime.date) self.assertEqual(datetime.date(2016, 7, 29), date) invalid_value = ['29/07/2016', '07/29/2016', '2016-07-29 15:28:37'] for v in invalid_value: with self.assertRaises(Exception): f.cast(v) # format='any'. # The main problem is to be sure that a dd/mm/yyyy is not interpreted as mm/dd/yyyy descriptor['format'] = 'any' f = SchemaField(descriptor) valid_values = [ '2016-07-10', '10/07/2016', '10/07/16', '2016-07-10 15:28:37', '10-July-2016', '10-JUlY-16', '10-07-2016', '10-07-16' ] expected_date = datetime.date(2016, 7, 10) for v in valid_values: date = f.cast(v) self.assertIsInstance(date, datetime.date) self.assertEqual(expected_date, date) invalid_value = ['djskdj'] for v in invalid_value: with self.assertRaises(Exception): f.cast(v)
def test_species_by_field_name(self): """ A previous implementation supported species field detection by just the field name. Not anymore :return: """ names = ['species name', 'Species Name', 'SPECIES_NAME', 'species_Name'] for name in names: descriptor = clone(helpers.GENERIC_SCHEMA) sch = Schema(descriptor) # no species field self.assertFalse(sch.species_fields) # add a field named name field = clone(BASE_FIELD) field['name'] = name descriptor['fields'].append(field) sch = Schema(descriptor) self.assertEqual(0, len(sch.species_fields))
def test_get_method(self): """ test that the SchemaField has the dict-like get('key', default) """ cts = clone(BASE_CONSTRAINTS) sch = SchemaConstraints(cts) self.assertTrue(hasattr(sch, 'get')) self.assertEquals(cts.get('required'), sch.get('required')) self.assertEquals(cts.get('constraints'), sch.get('constraints')) self.assertEquals(None, sch.get('bad_keys')) self.assertEquals('default', sch.get('bad_keys', 'default'))
def test_species_by_field_name(self): """ A previous implementation supported species field detection by just the field name. Not anymore :return: """ names = [ 'species name', 'Species Name', 'SPECIES_NAME', 'species_Name' ] for name in names: descriptor = clone(helpers.GENERIC_SCHEMA) sch = Schema(descriptor) # no species field self.assertFalse(sch.species_fields) # add a field named name field = clone(BASE_FIELD) field['name'] = name descriptor['fields'].append(field) sch = Schema(descriptor) self.assertEqual(0, len(sch.species_fields))
def test_species_by_wl_tag(self): # adding a wl species tag to a field turns it into a species field (whatever its name) descriptor = clone(helpers.GENERIC_SCHEMA) sch = Schema(descriptor) # no species field self.assertFalse(sch.species_fields) # tag field = descriptor['fields'][0] field['wl'] = {'type': 'species'} sch = Schema(descriptor) self.assertEqual(1, len(sch.species_fields)) self.assertEquals(field['name'], sch.species_fields[0].name)
def test_species_by_wl_tag(self): # adding a wl species tag to a field turns it into a species field (whatever its name) descriptor = clone(helpers.GENERIC_SCHEMA) sch = Schema(descriptor) # no species field self.assertFalse(sch.species_fields) # tag field = descriptor['fields'][0] field['wl'] = { 'type': 'species' } sch = Schema(descriptor) self.assertEqual(1, len(sch.species_fields)) self.assertEquals(field['name'], sch.species_fields[0].name)
def setUp(self): self.base_field_descriptor = clone(BASE_FIELD)
def setUp(self): self.base_field = clone(BASE_FIELD)
def test_no_species(self): descriptor = clone(helpers.GENERIC_SCHEMA) sch = Schema(descriptor) # no species field self.assertFalse(sch.species_fields)