コード例 #1
0
  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}))
コード例 #2
0
    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)
コード例 #3
0
    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")]),
        )
コード例 #4
0
    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)
コード例 #5
0
    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')
                                   ]))
コード例 #6
0
  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" +
      "})"
    )
コード例 #7
0
  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)