Add logout route when in base view
authorKarl O. Pinc <kop@karlpinc.com>
Fri, 20 Nov 2020 18:28:19 +0000 (12:28 -0600)
committerKarl O. Pinc <kop@karlpinc.com>
Fri, 20 Nov 2020 18:28:19 +0000 (12:28 -0600)
src/pgwui_common/pgwui_common.py
src/pgwui_common/templates/auth_base.mak
src/pgwui_common/templates/base.mak
tests/test_pgwui_common.py

index baaa9d4aeb8360ef90fcdce724cd40cb7e42a6fd..66ff8622bcdc23a1492baa44f3bf33ca90dc7566 100644 (file)
@@ -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
 
 
index 7d797b103499062f26439b2dc2e60b0dc9de6444..f4842900eaad393436a8650256cb893049f29bc6 100644 (file)
     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()">
   <p class="navbar">
-    <a href="${pgwui['route']['home']}">HOME</a>
-    % if 'logout' in pgwui['route']:
-      | <a href="${pgwui['route']['logout']}">Logout</a>
+    <a href="${pgwui['routes']['home']}">HOME</a>
+    % if 'pgwui_logout' in pgwui['routes']:
+      | <a href="${pgwui['routes']['pgwui_logout']}">Logout</a>
     % endif
   </p>
 </%def>
index c5367f254f13270edb95f80ed5bbfc70aacec57a..7cd1c920882e015d1de8bc526a1445716fb10b19 100644 (file)
  
   Karl O. Pinc <kop@meme.com>
 
-  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
 
 </%doc>
 
 <%def name="navbar()">
   <p class="navbar">
-    <a href="${pgwui['route']['home']}">HOME</a>
+    <a href="${pgwui['routes']['home']}">HOME</a>
   </p>
 </%def>
 
index 4e3542e56a0e0e43504bbbc44cd12e3a43ce97af..005bf0446aa793a5def11d3d0db5f4396b07d64e 100644 (file)
@@ -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():