From caa6b7c04b193db4dd5626b271dc8758c55b1aac Mon Sep 17 00:00:00 2001 From: "Karl O. Pinc" Date: Fri, 20 Nov 2020 12:28:19 -0600 Subject: [PATCH] Add logout route when in base view --- src/pgwui_common/pgwui_common.py | 24 +++++++-------- src/pgwui_common/templates/auth_base.mak | 10 ++++--- src/pgwui_common/templates/base.mak | 7 +++-- tests/test_pgwui_common.py | 37 +++++++++++++++++------- 4 files changed, 50 insertions(+), 28 deletions(-) diff --git a/src/pgwui_common/pgwui_common.py b/src/pgwui_common/pgwui_common.py index baaa9d4..66ff862 100644 --- a/src/pgwui_common/pgwui_common.py +++ b/src/pgwui_common/pgwui_common.py @@ -33,9 +33,17 @@ def base_view(wrapped): ''' response = wrapped(request) pgwui = response.get('pgwui', {}) - route = pgwui.setdefault('route', dict()) - route.setdefault('home', - request.route_url('home')) + + routes = pgwui.setdefault('routes', dict()) + routes.setdefault('home', + request.route_url('home')) + try: + logout_route = request.route_url('pgwui_logout') + except KeyError: + pass # A logout route is not required + else: + routes.setdefault('pgwui_logout', logout_route) + response['pgwui'] = pgwui return response return wrapper @@ -47,15 +55,7 @@ def auth_base_view(wrapped): def wrapper(request): '''Add variables needed by auth_base.mk to the response. ''' - response = base_view(wrapped)(request) - pgwui = response['pgwui'] - try: - logout_route = request.route_url('pgwui_logout') - except KeyError: - pass # A logout route is not required - else: - pgwui['route'].setdefault('pgwui_logout', logout_route) - return response + return base_view(wrapped)(request) return wrapper diff --git a/src/pgwui_common/templates/auth_base.mak b/src/pgwui_common/templates/auth_base.mak index 7d797b1..f484290 100644 --- a/src/pgwui_common/templates/auth_base.mak +++ b/src/pgwui_common/templates/auth_base.mak @@ -26,9 +26,11 @@ errors A list of UploadError exceptions. e_cnt (Optional) Number of errors to display. lines (Optional) Number of lines in an uploaded file. - db_changed (Optional) Boolean. Whether the db was changed. + For use with upload_form: csrf_token Token for detecting CSRF. + db_changed Boolean. Whether the db was changed. + session_expired Boolean. Whether the session has expired. last_key Token to detect duplicate uploads. db user @@ -50,9 +52,9 @@ <%def name="navbar()"> diff --git a/src/pgwui_common/templates/base.mak b/src/pgwui_common/templates/base.mak index c5367f2..7cd1c92 100644 --- a/src/pgwui_common/templates/base.mak +++ b/src/pgwui_common/templates/base.mak @@ -23,13 +23,16 @@ Karl O. Pinc - This template uses no variables in it's context. + This template uses the following variables in it's context: + + pgwui Dict + routes Dict of routes, keyed by pgwui component name <%def name="navbar()"> diff --git a/tests/test_pgwui_common.py b/tests/test_pgwui_common.py index 4e3542e..005bf04 100644 --- a/tests/test_pgwui_common.py +++ b/tests/test_pgwui_common.py @@ -23,6 +23,8 @@ import pyramid.config from pyramid.threadlocal import get_current_request import pgwui_common.pgwui_common as pgwui_common +from pgwui_testing import testing + # Activiate our pytest plugin pytest_plugins = ("pgwui",) @@ -55,7 +57,7 @@ def test_base_view_add(pyramid_request_config): pgwui_common.includeme(pyramid_request_config) wrapper = pgwui_common.base_view(mock_view) response = wrapper(request) - assert response['pgwui']['route']['home'] == url + assert response['pgwui']['routes']['home'] == url def test_base_view_default(pyramid_request_config): @@ -68,33 +70,31 @@ def test_base_view_default(pyramid_request_config): check_base_view_results(request, pgwui) -# auth_base_view() - -def test_auth_base_view_logout(pyramid_request_config): - '''The response contains base_view and auth_base_view variables +def test_base_view_logout(pyramid_request_config): + '''The response contains base_view variables when there is a logout route ''' pgwui_common.includeme(pyramid_request_config) logout_route = '/logout' pyramid_request_config.add_route('pgwui_logout', logout_route) - wrapper = pgwui_common.auth_base_view(mock_view) + wrapper = pgwui_common.base_view(mock_view) request = get_current_request() response = wrapper(request) pgwui = response['pgwui'] check_base_view_results(request, pgwui) - assert pgwui['route']['pgwui_logout'] == (request.application_url - + logout_route) + assert pgwui['routes']['pgwui_logout'] == (request.application_url + + logout_route) -def test_auth_base_view_nologout(pyramid_request_config): +def test_base_view_nologout(pyramid_request_config): '''The response contains base_view and auth_base_view variables when there is no logout route ''' pgwui_common.includeme(pyramid_request_config) - wrapper = pgwui_common.auth_base_view(mock_view) + wrapper = pgwui_common.base_view(mock_view) request = get_current_request() response = wrapper(request) @@ -102,6 +102,23 @@ def test_auth_base_view_nologout(pyramid_request_config): check_base_view_results(request, pgwui) +mock_base_view = testing.make_mock_fixture(pgwui_common, 'base_view') + + +# auth_base_view() + +def test_auth_base_view(pyramid_request_config, mock_base_view): + '''Wrapper calls base_view() + ''' + pgwui_common.includeme(pyramid_request_config) + + wrapper = pgwui_common.auth_base_view(mock_view) + request = get_current_request() + wrapper(request) + + mock_base_view.assert_called_once() + + # includeme() def test_includeme_configurecalled(): -- 2.34.1