def test_it_validates_keys(self): self.assertValidationPasses({}, schema.object({})) self.assertValidationPasses( { 'string': 'banana', 'number': 42, 'array': [0, 1], 'empty_object': {}, 'object': { 'boolean': True, 'object': { 'nothing': None } } }, schema.object({ 'string': schema.string('banana'), 'number': schema.number(42), 'array': schema.array([schema.number(0), schema.number(1)]), 'empty_object': schema.object({}), 'object': schema.object({ 'boolean': schema.boolean(True), 'object': schema.object({ 'nothing': schema.null }) }) }) ) self.assertValidationFails(None, schema.object({})) self.assertValidationFails({}, schema.object({'id': schema.integer})) self.assertValidationFails({'id': '1'}, schema.object({'id': schema.integer}))
def test_it_validates_nullable(self): self.assertValidationPasses(None, schema.array.nullable) self.assertValidationPasses(None, schema.array([schema.string]).nullable) self.assertValidationPasses(None, schema.array.length(1).nullable) self.assertValidationFails(False, schema.array.nullable) self.assertValidationFails(0, schema.array.nullable) self.assertValidationFails("", schema.array.nullable) self.assertValidationFails({}, schema.array.nullable)
def test_it_validates_items(self): self.assertValidationPasses([], schema.array([])) self.assertValidationPasses([42], schema.array([schema.integer(42)])) self.assertValidationPasses([0, 1], schema.array([schema.integer(0), schema.integer(1)])) self.assertValidationFails([], schema.array([schema.integer(42)])) self.assertValidationFails([42], schema.array([])) self.assertValidationFails(42, schema.array([schema.integer(42)])) self.assertValidationFails(["42"], schema.array([schema.integer(42)])) self.assertValidationFails( ["banana", "cucumber", "carrot"], schema.array([schema.string("banana"), schema.string("cucumber")]) ) self.assertValidationFails( ["banana", "cucumber"], schema.array([schema.string("banana"), schema.string("cucumber"), schema.string("carrot")]), )
def test_it_validates_nullable(self): with warnings.catch_warnings(): warnings.simplefilter('ignore') self.assertValidationPasses(None, schema.array.nullable) self.assertValidationPasses(None, schema.array([schema.string]).nullable) self.assertValidationPasses(None, schema.array.length(1).nullable) self.assertValidationFails(False, schema.array.nullable) self.assertValidationFails(0, schema.array.nullable) self.assertValidationFails('', schema.array.nullable) self.assertValidationFails({}, schema.array.nullable)
def test_it_validates_items(self): self.assertValidationPasses([], schema.array([])) self.assertValidationPasses([42], schema.array([schema.integer(42)])) self.assertValidationPasses([0, 1], schema.array( [schema.integer(0), schema.integer(1)])) self.assertValidationFails([], schema.array([schema.integer(42)])) self.assertValidationFails([42], schema.array([])) self.assertValidationFails(42, schema.array([schema.integer(42)])) self.assertValidationFails(['42'], schema.array([schema.integer(42)])) self.assertValidationFails( ['banana', 'cucumber', 'carrot'], schema.array([schema.string('banana'), schema.string('cucumber')])) self.assertValidationFails(['banana', 'cucumber'], schema.array([ schema.string('banana'), schema.string('cucumber'), schema.string('carrot') ]))
def test_array_type_representation(self): self.assertRepr(schema.array, 'schema.array') self.assertRepr(schema.array.nullable, 'schema.array.nullable') self.assertRepr(schema.array([]), 'schema.array([])') self.assertRepr(schema.array.length(10), 'schema.array.length(10)') self.assertRepr(schema.array.length(1, 2), 'schema.array.length(1, 2)') self.assertRepr(schema.array.min_length(1), 'schema.array.min_length(1)') self.assertRepr(schema.array.max_length(10), 'schema.array.max_length(10)') self.assertRepr(schema.array.empty, 'schema.array.empty') self.assertRepr(schema.array.non_empty, 'schema.array.non_empty') self.assertRepr(schema.array.unique, 'schema.array.unique') self.assertRepr(schema.array.unique(lambda a, b: a != b), 'schema.array.unique(<predicate>)') self.assertRepr(schema.array([schema.integer(0), schema.integer(1)]), 'schema.array([schema.integer(0), schema.integer(1)])') self.assertRepr(schema.array.contains(schema.integer(42)), 'schema.array.contains(schema.integer(42))') self.assertRepr(schema.array.contains_one(schema.boolean), 'schema.array.contains_one(schema.boolean)') self.assertRepr(schema.array.contains_many(schema.string('banana')), "schema.array.contains_many(schema.string('banana'))") self.assertRepr( schema.array.contains(schema.object({ 'id': schema.integer(1) })), "schema.array.contains(schema.object({" + "\n" + " 'id': schema.integer(1)" + "\n" + "}))" ) self.assertRepr( schema.array([ schema.integer(1), schema.integer(2), schema.integer(3) ]), "schema.array([" + "\n" + " schema.integer(1)," + "\n" + " schema.integer(2)," + "\n" + " schema.integer(3)" + "\n" + "])" ) self.assertRepr( schema.array([ schema.integer(1), schema.integer(2), schema.object({ 'id': schema.string.numeric }) ]), "schema.array([" + "\n" + " schema.integer(1)," + "\n" + " schema.integer(2)," + "\n" + " schema.object({" + "\n" + " 'id': schema.string.numeric" + "\n" + " })" + "\n" + "])" ) self.assertRepr( schema.object({ 'items': schema.array([schema.object({ 'id': schema.string.numeric })]) }), "schema.object({" + "\n" + " 'items': schema.array([schema.object({" + "\n" + " 'id': schema.string.numeric" + "\n" + " })])" + "\n" + "})" )
def test_array_type_generator(self): # type data = fake(schema.array) self.assertIsInstance(data, list) self.assertTrue(all(type(x) in self.primitive_types for x in data)) # overriding array = [0, 1] data = fake(schema.array([schema.integer, schema.integer]), array) self.assertEqual(data, array) # example examples = (['true', 'false'], ['false', 'true']) data = fake(schema.array.examples(*examples)) self.assertIn(data, examples) # items data = fake(schema.array([schema.number(0), schema.number(1)])) self.assertEqual(data, [0, 1]) # contains data = fake(schema.array.contains(schema.integer(42))) self.assertGreaterEqual(data.count(42), 1) data = fake(schema.array.contains(schema.string('banana')).length(1)) self.assertEqual(data, ['banana']) # contains_one data = fake(schema.array.contains_one(schema.integer(42))) self.assertIn(42, data) data = fake(schema.array.contains_one(schema.string('banana')).length(1)) self.assertEqual(data, ['banana']) # contains_many data = fake(schema.array.contains_many(schema.integer(42))) self.assertGreaterEqual(data.count(42), 2) data = fake(schema.array.contains_many(schema.string('banana')).length(2)) self.assertEqual(data, ['banana', 'banana']) # unique data = fake(schema.array([schema.boolean, schema.boolean]).unique) self.assertIn(True, data) self.assertIn(False, data) data = fake(schema.array.unique) self.assertEqual(len(set(data)), len(data)) # length data = fake(schema.array.length(1)) self.assertEqual(len(data), 1) data = fake(schema.array.length(1, 2)) self.assertTrue(1 <= len(data) <= 2) data = fake(schema.array.min_length(1)) self.assertGreaterEqual(len(data), 1) data = fake(schema.array.max_length(1)) self.assertLessEqual(len(data), 1) # empty data = fake(schema.array.empty) self.assertEqual(data, []) data = fake(schema.array.non_empty) self.assertGreaterEqual(len(data), 1)