def _setUp(self): self.metadata = APIMetadata() self.service = AcceptableService('service', metadata=self.metadata) foo_api = self.service.api('/foo', 'foo_api', methods=['POST']) @foo_api.view(introduced_at='1.0') def foo(): return "foo", 200
def test_can_register_url_route(self): def view(): return "test view", 200 app = Flask(__name__) service = AcceptableService('vendor', app) api = service.api('/foo', 'foo_api') api.register_view('1.0', None, view) client = app.test_client() resp = client.get('/foo') self.assertThat(resp, IsResponse('test view'))
def test_can_register_url_route(self): def view(): return "test view", 200 service = AcceptableService('service', metadata=APIMetadata()) api = service.api('/foo', 'foo_api') api.register_view(view, '1.0') app = Flask(__name__) service.bind(app) client = app.test_client() resp = client.get('/foo') self.assertThat(resp, IsResponse('test view'))
def test_rebinding_to_existing_application_is_a_noop(self): def view(): return "test view", 200 service = AcceptableService('vendor') api = service.api('/foo', 'foo_api') api.register_view('1.0', None, view) app1 = Flask(__name__) service.initialise(app1) service.initialise(app1) client = app1.test_client() resp = client.get('/foo') self.assertThat(resp, IsResponse('test view'))
class ServiceFixture(Fixture): """A reusable fixture that sets up several API endpoints.""" def _setUp(self): self.metadata = APIMetadata() self.service = AcceptableService('service', metadata=self.metadata) foo_api = self.service.api('/foo', 'foo_api', methods=['POST']) @foo_api.view(introduced_at='1.0') def foo(): return "foo", 200 def bind(self, app=None): if app is None: app = Flask(__name__) self.service.bind(app) return app
def _setUp(self): self.flask_app = Flask(__name__) self.service = AcceptableService('vendor', self.flask_app) # The /foo API is POST only, and contains three different versioned # endpoints: foo_api = self.service.api('/foo', 'foo_api', methods=['POST']) foo_api.register_view('1.0', None, self.foo_v10) foo_api.register_view('1.1', None, self.foo_v11) foo_api.register_view('1.3', None, self.foo_v13) foo_api.register_view('1.5', None, self.foo_v15) # The /flagged API is GET only, and has some API flags set: flagged_api = self.service.api('/flagged', 'flagged', methods=['GET']) flagged_api.register_view('1.3', None, self.flagged_v13) flagged_api.register_view('1.4', 'feature1', self.flagged_v14_feature1) flagged_api.register_view('1.4', 'feature2', self.flagged_v14_feature2)
class SimpleAPIServiceFixture(Fixture): """A reusable fixture that sets up several API endpoints. This fixture creates a simple set of API endpoints with a mix of different version and API flag requirements. Tests can use this fixture instead of having to do all this setup in every test. """ def _setUp(self): self.flask_app = Flask(__name__) self.service = AcceptableService('vendor', self.flask_app) # The /foo API is POST only, and contains three different versioned # endpoints: foo_api = self.service.api('/foo', 'foo_api', methods=['POST']) foo_api.register_view('1.0', None, self.foo_v10) foo_api.register_view('1.1', None, self.foo_v11) foo_api.register_view('1.3', None, self.foo_v13) foo_api.register_view('1.5', None, self.foo_v15) # The /flagged API is GET only, and has some API flags set: flagged_api = self.service.api('/flagged', 'flagged', methods=['GET']) flagged_api.register_view('1.3', None, self.flagged_v13) flagged_api.register_view('1.4', 'feature1', self.flagged_v14_feature1) flagged_api.register_view('1.4', 'feature2', self.flagged_v14_feature2) def foo_v10(self): return "Foo version 1.0", 200 def foo_v11(self): return "Foo version 1.1", 200 def foo_v13(self): return "Foo version 1.3", 200 def foo_v15(self): return "Foo version 1.5", 200 def flagged_v13(self): return "Flagged version 1.3", 200 def flagged_v14_feature1(self): return "Flagged version 1.4 with feature1", 200 def flagged_v14_feature2(self): return "Flagged version 1.4 with feature2", 200
def test_can_expose_same_view_in_multiple_apis(self): flask_app = Flask(__name__) service = AcceptableService('vendor', flask_app) api1 = service.api('/foo1', 'foo1') api2 = service.api('/foo2', 'foo2') @api1.view(introduced_at='1.0') @api2.view(introduced_at='1.0') def get_foo(): return "Foo API" client = flask_app.test_client() resp1 = client.get('/foo1') resp2 = client.get('/foo2') self.assertThat(resp1, IsResponse("Foo API")) self.assertThat(resp2, IsResponse("Foo API"))