Exemple #1
0
    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
Exemple #2
0
    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'))
Exemple #3
0
    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'))
Exemple #4
0
    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'))
Exemple #5
0
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
Exemple #6
0
    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)
Exemple #7
0
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
Exemple #8
0
    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"))