diff --git a/app.py b/app.py index 7d524e7d..766f0caa 100755 --- a/app.py +++ b/app.py @@ -2,10 +2,11 @@ import tornado.ioloop -from atst.app import make_app, make_config +from atst.app import make_app, make_deps, make_config config = make_config() -app = make_app(config) +deps = make_deps(config) +app = make_app(config, deps) if __name__ == '__main__': port = int(config['default']['PORT']) diff --git a/atst/app.py b/atst/app.py index a1bf7966..c38b20b7 100644 --- a/atst/app.py +++ b/atst/app.py @@ -16,17 +16,14 @@ from atst.api_client import ApiClient ENV = os.getenv("TORNADO_ENV", "dev") -def make_app(config,**kwargs): - - authz_client = ApiClient(config["default"]["AUTHZ_BASE_URL"]) - authnid_client = ApiClient(config["default"]["AUTHNID_BASE_URL"]) +def make_app(config, deps, **kwargs): routes = [ url(r"/", Home, {"page": "login"}, name="main"), url( r"/login", Login, - {"authnid_client": authnid_client}, + {"authnid_client": deps["authnid_client"]}, name="login", ), url(r"/home", MainHandler, {"page": "home"}, name="home"), @@ -34,15 +31,19 @@ def make_app(config,**kwargs): url( r"/workspaces", Workspace, - {"page": "workspaces", "authz_client": authz_client}, + {"page": "workspaces", "authz_client": deps["authz_client"]}, name="workspaces", ), url(r"/requests", Request, {"page": "requests"}, name="requests"), - url(r"/requests/new", RequestNew, {"page": "requests_new"}, name="request_new"), + url( + r"/requests/new", + RequestNew, + {"page": "requests_new", "requests_client": deps["requests_client"]}, + name="request_new"), url( r"/requests/new/([0-9])", RequestNew, - {"page": "requests_new"}, + {"page": "requests_new", "requests_client": deps["requests_client"]}, name="request_form", ), url(r"/users", MainHandler, {"page": "users"}, name="users"), @@ -67,6 +68,14 @@ def make_app(config,**kwargs): return app +def make_deps(config): + return { + 'authz_client': ApiClient(config["default"]["AUTHZ_BASE_URL"]), + 'authnid_client': ApiClient(config["default"]["AUTHNID_BASE_URL"]), + 'requests_client': ApiClient(config["default"]["REQUESTS_QUEUE_BASE_URL"]) + } + + def make_config(): BASE_CONFIG_FILENAME = os.path.join( os.path.dirname(__file__), diff --git a/config/base.ini b/config/base.ini index fd9962b3..ee980cbf 100644 --- a/config/base.ini +++ b/config/base.ini @@ -7,3 +7,4 @@ AUTHNID_BASE_URL= http://localhost COOKIE_SECRET = some-secret-please-replace SECRET = change_me_into_something_secret CAC_URL = http://localhost:8888/home +REQUESTS_QUEUE_BASE_URL = http://localhost:8003 diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/conftest.py b/tests/conftest.py index 19aa9794..5f28746d 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,9 +1,19 @@ import pytest -from atst.app import make_app, make_config +from atst.app import make_app, make_deps, make_config +from tests.mocks import MockApiClient @pytest.fixture def app(): + TEST_DEPS = { + 'authz_client': MockApiClient('authz'), + 'requests_client': MockApiClient('requests'), + 'authnid_client': MockApiClient('authnid'), + } + config = make_config() - return make_app(config) + deps = make_deps(config) + deps.update(TEST_DEPS) + + return make_app(config, deps) diff --git a/tests/mocks.py b/tests/mocks.py new file mode 100644 index 00000000..e58e46d8 --- /dev/null +++ b/tests/mocks.py @@ -0,0 +1,32 @@ +import tornado.gen +from tornado.httpclient import HTTPRequest, HTTPResponse + + +class MockApiClient(object): + def __init__(self, service): + self.service = service + + @tornado.gen.coroutine + def get(self, path, **kwargs): + return self._get_response('GET', path) + + @tornado.gen.coroutine + def put(self, path, **kwargs): + return self._get_response('PUT', path) + + @tornado.gen.coroutine + def patch(self, path, **kwargs): + return self._get_response('PATCH', path) + + @tornado.gen.coroutine + def post(self, path, **kwargs): + return self._get_response('POST', path) + + @tornado.gen.coroutine + def delete(self, path, **kwargs): + return self._get_response('DELETE', path) + + def _get_response(self, verb, path): + response = HTTPResponse(request=HTTPRequest(path, verb), code=200) + setattr(response, 'json', {}) + return response