Reference css file by Pyramid asset specification
authorKarl O. Pinc <kop@meme.com>
Wed, 7 Nov 2018 03:10:05 +0000 (21:10 -0600)
committerKarl O. Pinc <kop@meme.com>
Wed, 7 Nov 2018 14:37:26 +0000 (08:37 -0600)
setup.py
src/pgwui_common/__init__.py
src/pgwui_common/templates/base.mak
tests/test___init__.py

index 14651d2c16f0832f48c3aeb8945950eeb47c9378..9141c01f56538c76c69aa47979df3e97212407f6 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -140,6 +140,7 @@ setup(
     # Run-time dependencies.
     install_requires=[
         'pgwui_core==' + version,
+        'pyramid',
         'pyramid_beaker',
         'pyramid_mako',
     ],
index 335bc8a45761e8c4ee79b6d831122de3681b70f7..6f7add28cba3cf3d4506fd4601e70de00993e692 100644 (file)
 '''
 
 
+def base_view(wrapped):
+    '''Decorator for any view which includes base.mk.
+    '''
+    def wrapper(request):
+        '''Add variables missing but needed by base.mk to the response.
+        '''
+        response = wrapped(request)
+        pgwui = response.get('pgwui', {})
+        pgwui.setdefault('url.css',
+                         request.static_url('pgwui_common:static/pgwui.css'))
+        response['pgwui'] = pgwui
+        return response
+    return wrapper
+
+
+def auth_base_view(wrapped):
+    '''Decorator for any view which includes auth_base.mk.
+    '''
+    return base_view(wrapped)
+
+
 def includeme(config):
     '''Pyramid configuration for PGWUI_Common
     '''
     config.include('pyramid_mako')
     config.include('pyramid_beaker')
     config.add_static_view(
-        'static', 'pgwui_common:/static', cache_max_age=3600)
+        'static',
+        'pgwui_common:static/',
+        cache_max_age=3600)
index daa35939cb42d507132753aaecba1351dc610bc2..c51e2e6590cabb933218afd508964fc0491e21fb 100644 (file)
@@ -45,7 +45,7 @@
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   <%block name="meta_keywords" />
   <%block name="meta_description" />
-  <link rel="stylesheet" href="/gombemi.css" type="text/css" />
+  <link rel="stylesheet" href="${pgwui['url.css']}" type="text/css" />
 </head>
 
 <body>
index 917efd60614fa2e0c308a24029d70f013e24f34c..aa06b9963b64118ff94246b5071b5cc516f50675 100644 (file)
 
 # Karl O. Pinc <kop@meme.com>
 
+import pyramid.config
+import pyramid.testing
+import pyramid.threadlocal
+import pytest
 import pgwui_common.__init__ as pgwui_common_init
 
 
-def test_configure_includecalled():
+# Fixtures
 
+@pytest.fixture
+def pyramid_config():
+    yield pyramid.testing.setUp()
+    pyramid.testing.tearDown()
+
+
+@pytest.fixture
+def pyramid_request_config():
+    request = pyramid.testing.DummyRequest()
+    yield pyramid.testing.setUp(request=request)
+    pyramid.testing.tearDown()
+
+
+# Unit tests
+
+# base_view()
+def test_base_view_add(pyramid_request_config):
+    '''The response adds all expected variables'''
+    def mock_view(request):
+        return {}
+
+    pgwui_common_init.includeme(pyramid_request_config)
+    wrapper = pgwui_common_init.base_view(mock_view)
+    response = wrapper(pyramid.threadlocal.get_current_request())
+    assert response['pgwui']['url.css'][0:4] == 'http'
+
+
+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)
+    response = wrapper(pyramid.threadlocal.get_current_request())
+    assert response['pgwui']['url.css'] == css_url
+
+
+# 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
+
+    monkeypatch.setattr(pgwui_common_init, 'base_view', mock_base_view)
+
+    pgwui_common_init.auth_base_view(None)
+    assert base_view_called is True
+
+
+# includeme()
+
+def test_includeme_configurecalled():
+    '''Pyramid Configure() methods are called'''
     class MockConfig():
         def __init__(self):
             self.include_called = False
@@ -39,3 +103,10 @@ def test_configure_includecalled():
     pgwui_common_init.includeme(config)
     assert config.include_called
     assert config.add_static_view_called
+
+
+# Integration tests
+
+def test_includeme():
+    config = pyramid.config.Configurator()
+    pgwui_common_init.includeme(config)