From bfe4b03a83b8784aaba039e31e2d6fe522c8b3ae Mon Sep 17 00:00:00 2001 From: "Karl O. Pinc" Date: Tue, 13 Nov 2018 20:59:05 -0600 Subject: [PATCH] Make logout route configurable --- src/pgwui_common/__init__.py | 10 ++++- src/pgwui_common/templates/auth_base.mak | 2 +- tests/test___init__.py | 47 ++++++++++++++---------- 3 files changed, 38 insertions(+), 21 deletions(-) diff --git a/src/pgwui_common/__init__.py b/src/pgwui_common/__init__.py index 6669527..c0b827f 100644 --- a/src/pgwui_common/__init__.py +++ b/src/pgwui_common/__init__.py @@ -45,7 +45,15 @@ def base_view(wrapped): def auth_base_view(wrapped): '''Decorator for any view which includes auth_base.mk. ''' - return base_view(wrapped) + def wrapper(request): + '''Add variables needed by auth_base.mk to the response. + ''' + response = base_view(wrapped)(request) + pgwui = response['pgwui'] + pgwui.setdefault('route.logout', + request.route_url('logout')) + return response + return wrapper def includeme(config): diff --git a/src/pgwui_common/templates/auth_base.mak b/src/pgwui_common/templates/auth_base.mak index 9eda515..095e987 100644 --- a/src/pgwui_common/templates/auth_base.mak +++ b/src/pgwui_common/templates/auth_base.mak @@ -49,7 +49,7 @@ <%def name="navbar()"> diff --git a/tests/test___init__.py b/tests/test___init__.py index b002509..7ae2173 100644 --- a/tests/test___init__.py +++ b/tests/test___init__.py @@ -27,6 +27,22 @@ import pgwui_common.__init__ as pgwui_common_init pytest_plugins = ("pgwui",) +# Helper functions and constants + +CSS_URL = 'foo://bar/' + + +def mock_view(request): + return {'pgwui': {'url.css': CSS_URL}} + + +def check_base_view_results(request, pgwui): + assert pgwui['url.css'] == CSS_URL + url = (request.application_url + + pgwui_common_init.DEFAULT_HOME_ROUTE) + assert pgwui['route.home'] == url + + # Unit tests # base_view() @@ -43,36 +59,29 @@ def test_base_view_add(pyramid_request_config): def test_base_view_default(pyramid_request_config): '''The response retains the mock view's variables''' - css_url = 'foo://bar/' - - def mock_view(request): - return {'pgwui': {'url.css': css_url}} - pgwui_common_init.includeme(pyramid_request_config) wrapper = pgwui_common_init.base_view(mock_view) request = get_current_request() response = wrapper(request) pgwui = response['pgwui'] - assert pgwui['url.css'] == css_url - url = (request.application_url - + pgwui_common_init.DEFAULT_HOME_ROUTE) - assert pgwui['route.home'] == url + check_base_view_results(request, pgwui) # auth_base_view() -def test_auth_base_view(monkeypatch): - '''base_view() is called''' - base_view_called = False - - def mock_base_view(wrapped): - nonlocal base_view_called - base_view_called = True +def test_auth_base_view(pyramid_request_config): + '''The response contains base_view and auth_base_view variables''' + pgwui_common_init.includeme(pyramid_request_config) - monkeypatch.setattr(pgwui_common_init, 'base_view', mock_base_view) + logout_route = '/logout' + pyramid_request_config.add_route('logout', logout_route) + wrapper = pgwui_common_init.auth_base_view(mock_view) + request = get_current_request() - pgwui_common_init.auth_base_view(None) - assert base_view_called is True + response = wrapper(request) + pgwui = response['pgwui'] + check_base_view_results(request, pgwui) + assert pgwui['route.logout'] == request.application_url + logout_route # includeme() -- 2.34.1