Make logout route configurable
authorKarl O. Pinc <kop@meme.com>
Wed, 14 Nov 2018 02:59:05 +0000 (20:59 -0600)
committerKarl O. Pinc <kop@meme.com>
Wed, 14 Nov 2018 03:07:44 +0000 (21:07 -0600)
src/pgwui_common/__init__.py
src/pgwui_common/templates/auth_base.mak
tests/test___init__.py

index 6669527a5c2c952ae35b26ea451d43d4e35e7767..c0b827fb96cd052c7787159bf80dc32bb772fc61 100644 (file)
@@ -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):
index 9eda5154323ec1647b780fa9bf51fbc506a8c334..095e98749b534ae664f3cbd8a9510d32e6e0676f 100644 (file)
@@ -49,7 +49,7 @@
 <%def name="navbar()">
   <p class="navbar">
     <a href="${pgwui['route.home']}">HOME</a>
-    | <a href="${request.route_url('logout')}">Logout</a>
+    | <a href="${pgwui['route.logout']}">Logout</a>
   </p>
 </%def>
 
index b0025091c1a0cd0dc4fb5396e30a343dbd14ed77..7ae2173ba18a245f70226e68fcc2898049f5dc40 100644 (file)
@@ -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()