def setUp(self): self.cosmos1 = Cosmos() with self.cosmos1: self.places = places = API('places') @places.model class City(BaseModel): properties = [ optional(u"name", String) ] @places.model class Address(BaseModel): properties = [ required(u"number", Integer), required(u"street", String), ] links = [ required(u"city", City) ] self.cosmos2 = Cosmos() with self.cosmos2: with patch.object(requests, 'get') as mock_get: mock_get.return_value.json = lambda: API.to_json(places) mock_get.return_value.status_code = 200 self.remote_places = API.load('http://example.com/spec.json') self.remote_places.client_hook = WerkzeugTestClientHook(places.get_flask_app().test_client())
def setUp(self): self.cosmos1 = Cosmos() with self.cosmos1: self.mathy = mathy = API("mathy") @mathy.action(accepts=Array(Integer), returns=Integer) def add(numbers): return sum(numbers) @mathy.action(accepts=Struct([ required(u'numerator', Integer), required(u'denominator', Integer), ]), returns=Integer) def divide(numerator, denominator): return numerator / denominator self.add = add self.cosmos2 = Cosmos() with self.cosmos2: with patch.object(requests, 'get') as mock_get: mock_get.return_value.json = lambda: API.to_json(mathy) mock_get.return_value.status_code = 200 self.remote_mathy = API.load('http://example.com/spec.json') self.remote_mathy.client_hook = WerkzeugTestClientHook(mathy.get_flask_app().test_client())
def test_to_json(self): places = self.places with self.cosmos: self.assertEqual(API.to_json(places), { u'name': u'places', u'actions': { u'map': {}, u'order': [] }, u"models": { u"map": { u"Address": { u"data_schema": { u'type': u"Struct", u"param": { u"map": { u"number": { u"required": True, u"schema": {u"type": u"Integer"} }, u"street": { u"required": True, u"schema": {u"type": u"String"} }, u"city": { u"required": False, u"schema": {u"type": u"String"} } }, u"order": [u"number", u"street", u"city"] } }, u"links": { u"map": {}, u"order": [] }, u"query_fields": { u"map": {}, u"order": [] } } }, u"order": [u"Address"] } })
def setUp(self): self.cosmos = Cosmos() with self.cosmos: self.places = places = API('places') @places.model class City(BaseModel): properties = [ optional(u"name", String) ] @classmethod def validate(cls, datum): if datum[u"name"][0].islower(): raise ValidationError("Name must be capitalized", datum["name"]) def save(self): if self.id is None: # Create new id self.id = str(len(cities)) cities[self.id] = self self.cosmos2 = Cosmos() with self.cosmos2: with patch.object(requests, 'get') as mock_get: mock_get.return_value.json = lambda: API.to_json(places) mock_get.return_value.status_code = 200 self.remote_places = API.load('http://example.com/spec.json') self.remote_places.client_hook = WerkzeugTestClientHook(places.get_flask_app().test_client()) cities = { "0": City(name="Toronto", id="0"), "1": City(name="San Francisco", id="1"), }
def test_schema(self): API.from_json(API.to_json(self.cookbook))
def test_serialize(self): self.assertEqual(API.to_json(self.cookbook), cookbook_spec)