def test_extend_maintains_existing_attributes(self): """ If additional schema attributes aren't passed to L{Schema.extend}, they stay the same. """ result = {'id': Integer(), 'name': Unicode(), 'data': RawStr()} errors = [APIError] schema = Schema( name="GetStuff", doc="""Get the stuff.""", parameters=[Integer("id")], result=result, errors=errors) schema2 = schema.extend(parameters=[Unicode("scope")]) self.assertEqual("GetStuff", schema2.name) self.assertEqual("Get the stuff.", schema2.doc) self.assertEqual(result, schema2.result) self.assertEqual(set(errors), schema2.errors) arguments, _ = schema2.extract({'id': '5', 'scope': u'foo'}) self.assertEqual(5, arguments.id) self.assertEqual(u'foo', arguments.scope)
def test_add_single_extra_schema_item(self): """New Parameters can be added to the Schema.""" schema = Schema(Unicode("name")) schema = schema.extend(Unicode("computer")) arguments, _ = schema.extract({"name": "value", "computer": "testing"}) self.assertEqual(u"value", arguments.name) self.assertEqual("testing", arguments.computer)
def test_extend_errors(self): """ Errors can be extended with L{Schema.extend}. """ schema = Schema(parameters=[], errors=[APIError]) schema2 = schema.extend(errors=[ZeroDivisionError]) self.assertEqual(set([APIError, ZeroDivisionError]), schema2.errors)
def test_extend_with_additional_schema_attributes(self): """ The additional schema attributes can be passed to L{Schema.extend}. """ result = {'id': Integer(), 'name': Unicode(), 'data': RawStr()} errors = [APIError] schema = Schema( name="GetStuff", parameters=[Integer("id")]) schema2 = schema.extend( name="GetStuff2", doc="Get stuff 2", parameters=[Unicode("scope")], result=result, errors=errors) self.assertEqual("GetStuff2", schema2.name) self.assertEqual("Get stuff 2", schema2.doc) self.assertEqual(result, schema2.result) self.assertEqual(set(errors), schema2.errors) arguments, _ = schema2.extract({'id': '5', 'scope': u'foo'}) self.assertEqual(5, arguments.id) self.assertEqual(u'foo', arguments.scope)
def test_extend_maintains_parameter_order(self): """ Extending a schema with additional parameters puts the new parameters at the end. """ schema = Schema(parameters=[Unicode("name"), Unicode("value")]) schema2 = schema.extend(parameters=[Integer("foo"), Unicode("index")]) self.assertEqual(["name", "value", "foo", "index"], [p.name for p in schema2.get_parameters()])
def test_add_extra_schema_items(self): """A list of new Parameters can be added to the Schema.""" schema = Schema(Unicode("name")) schema = schema.extend(Unicode("computer"), Integer("count")) arguments, _ = schema.extract({"name": "value", "computer": "testing", "count": "5"}) self.assertEqual(u"value", arguments.name) self.assertEqual("testing", arguments.computer) self.assertEqual(5, arguments.count)
def test_extend_result(self): """ Result fields can also be extended with L{Schema.extend}. """ schema = Schema(result={'name': Unicode()}) schema2 = schema.extend( result={'id': Integer()}) result_structure = Structure(fields=schema2.result) self.assertEqual( {'name': u'foo', 'id': 5}, result_structure.coerce({'name': u'foo', 'id': '5'}))
def test_extend_result(self): """ Result fields can also be extended with L{Schema.extend}. """ schema = Schema(result={'name': Unicode()}) schema2 = schema.extend(result={'id': Integer()}) result_structure = Structure(fields=schema2.result) self.assertEqual({ 'name': u'foo', 'id': 5 }, result_structure.coerce({ 'name': u'foo', 'id': '5' }))
def test_extend_with_additional_schema_attributes(self): """ The additional schema attributes can be passed to L{Schema.extend}. """ result = {'id': Integer(), 'name': Unicode(), 'data': RawStr()} errors = [APIError] schema = Schema(name="GetStuff", parameters=[Integer("id")]) schema2 = schema.extend(name="GetStuff2", doc="Get stuff 2", parameters=[Unicode("scope")], result=result, errors=errors) self.assertEqual("GetStuff2", schema2.name) self.assertEqual("Get stuff 2", schema2.doc) self.assertEqual(result, schema2.result) self.assertEqual(set(errors), schema2.errors) arguments, _ = schema2.extract({'id': '5', 'scope': u'foo'}) self.assertEqual(5, arguments.id) self.assertEqual(u'foo', arguments.scope)
def test_extend_maintains_existing_attributes(self): """ If additional schema attributes aren't passed to L{Schema.extend}, they stay the same. """ result = {'id': Integer(), 'name': Unicode(), 'data': RawStr()} errors = [APIError] schema = Schema(name="GetStuff", doc="""Get the stuff.""", parameters=[Integer("id")], result=result, errors=errors) schema2 = schema.extend(parameters=[Unicode("scope")]) self.assertEqual("GetStuff", schema2.name) self.assertEqual("Get the stuff.", schema2.doc) self.assertEqual(result, schema2.result) self.assertEqual(set(errors), schema2.errors) arguments, _ = schema2.extract({'id': '5', 'scope': u'foo'}) self.assertEqual(5, arguments.id) self.assertEqual(u'foo', arguments.scope)