Browse Source

Fix `CODERED_BANNER` setting not appearing in Wagtail Admin (#459)

James Osgood 3 years ago
parent
commit
499aea57a3

+ 8 - 0
coderedcms/static/coderedcms/css/codered-admin.css

@@ -290,6 +290,14 @@ input[type='checkbox']::before, input[type='radio']::before {
     }
 }
 
+/* Display the optional banner above main content */
+
+.codered-banner {
+    position: absolute;
+}
+.codered-banner ~ .content-wrapper {
+    padding-top: calc(1.5em + 8px);
+}
 
 /* Custom */
 

+ 4 - 0
coderedcms/templates/wagtailadmin/base.html

@@ -1,6 +1,10 @@
 {% extends "wagtailadmin/base.html" %}
 {% load wagtailimages_tags wagtailsettings_tags %}
 
+{% block furniture %}
+    {% include "coderedcms/includes/codered_banner.html" %}
+    {{ block.super }}
+{% endblock %}
 
 {% block branding_logo %}
     {% if settings.coderedcms.LayoutSettings.logo %}

+ 53 - 0
coderedcms/tests/test_templates.py

@@ -0,0 +1,53 @@
+from unittest.mock import patch
+
+import pytest
+from django.contrib.auth import get_user_model
+from django.test import TestCase
+
+from coderedcms.templatetags.coderedcms_tags import cr_settings
+
+EXPECTED_BANNER_HTML = """
+<div class="codered-banner" style="background-color:#f00; color:#fff; width:100%; padding:4px;">
+    Test
+</div>
+"""
+
+
+@pytest.mark.django_db
+class TestSiteBanner(TestCase):
+
+    @patch.dict(cr_settings, {"BANNER": "Test"})
+    def test_with_banner(self):
+        response = self.client.get("/")
+        self.assertEqual(response.status_code, 200)
+        self.assertInHTML(EXPECTED_BANNER_HTML, response.content.decode("utf-8"))
+
+    def test_without_banner(self):
+        response = self.client.get("/")
+        self.assertEqual(response.status_code, 200)
+        self.assertNotIn("codered-banner", response.content.decode("utf-8"))
+
+
+@pytest.mark.django_db
+class TestWagtailAdminBanner(TestCase):
+    def setUp(self):
+        admin = get_user_model().objects.create_superuser(
+            "admin",
+            email="admin@example.com",
+            password="admin"
+        )
+        self.client.force_login(admin)
+
+    def tearDown(self):
+        self.client.logout()
+
+    @patch.dict(cr_settings, {"BANNER": "Test"})
+    def test_with_banner(self):
+        response = self.client.get("/admin/")
+        self.assertEqual(response.status_code, 200)
+        self.assertInHTML(EXPECTED_BANNER_HTML, response.content.decode("utf-8"))
+
+    def test_without_banner(self):
+        response = self.client.get("/admin/")
+        self.assertEqual(response.status_code, 200)
+        self.assertNotIn("codered-banner", response.content.decode("utf-8"))

+ 2 - 0
docs/releases/v0.23.0.rst

@@ -9,6 +9,8 @@ New features
 Bug fixes
 ---------
 
+* Fix the ``CODERED_BANNER`` :doc:`setting </reference/django_settings>`
+  not being applied to the site's CMS.
 
 Maintenance
 -----------