Browse Source

Start writing tests for CSS edition

rafalp 6 years ago
parent
commit
6d3c30b69f

+ 2 - 2
misago/themes/admin/tests/conftest.py

@@ -33,8 +33,8 @@ TESTS_DIR = os.path.dirname(os.path.abspath(__file__))
 def css(admin_client, theme):
 def css(admin_client, theme):
     url = reverse("misago:admin:appearance:themes:upload-css", kwargs={"pk": theme.pk})
     url = reverse("misago:admin:appearance:themes:upload-css", kwargs={"pk": theme.pk})
     with open(os.path.join(TESTS_DIR, "css", "test.css")) as fp:
     with open(os.path.join(TESTS_DIR, "css", "test.css")) as fp:
-        admin_client.post(url, {"assets": [fp]})
-    return theme.css.last()
+        response = admin_client.post(url, {"assets": [fp]})
+    return theme.css.get(name="test.css")
 
 
 
 
 @pytest.fixture
 @pytest.fixture

+ 54 - 0
misago/themes/admin/tests/test_css_creation_and_edition.py

@@ -10,6 +10,14 @@ def create_link(theme):
 
 
 
 
 @pytest.fixture
 @pytest.fixture
+def edit_link(theme, css):
+    return reverse(
+        "misago:admin:appearance:themes:edit-css",
+        kwargs={"pk": theme.pk, "css_pk": css.pk},
+    )
+
+
+@pytest.fixture
 def data():
 def data():
     return {"name": "test.css", "source": (".page-header { padding: 0}")}
     return {"name": "test.css", "source": (".page-header { padding: 0}")}
 
 
@@ -110,3 +118,49 @@ def test_css_creation_fails_if_source_is_not_given(
     data["source"] = ""
     data["source"] = ""
     admin_client.post(create_link, data)
     admin_client.post(create_link, data)
     assert not theme.css.exists()
     assert not theme.css.exists()
+
+
+def test_css_creation_form_redirects_user_to_edition_after_creation(
+    theme, admin_client, create_link, data
+):
+    data["stay"] = "1"
+    response = admin_client.post(create_link, data)
+    assert response["location"] == reverse(
+        "misago:admin:appearance:themes:edit-css",
+        kwargs={"pk": theme.pk, "css_pk": theme.css.last().pk},
+    )
+
+
+def test_css_edition_form_is_displayed(admin_client, edit_link, css):
+    response = admin_client.get(edit_link)
+    assert response.status_code == 200
+    assert_contains(response, css.name)
+
+
+def test_css_edition_form_contains_source_file_contents(admin_client, edit_link, css):
+    response = admin_client.get(edit_link)
+    assert_contains(response, css.source_file.read().decode("utf-8"))
+
+
+def test_name_can_be_changed(admin_client, edit_link, css, data):
+    data["name"] = "new-name.css"
+    admin_client.post(edit_link, data)
+
+    css.refresh_from_db()
+    assert css.name == data["name"]
+
+
+def test_name_change_also_changes_source_file_name(admin_client, edit_link, css, data):
+    data["name"] = "new-name.css"
+    admin_client.post(edit_link, data)
+
+    css.refresh_from_db()
+    assert "new-name" in str(css.source_file)
+
+
+def test_css_source_can_be_changed(admin_client, edit_link, css, data):
+    data["source"] = ".misago-footer { display: none; }"
+    admin_client.post(edit_link, data)
+
+    css.refresh_from_db()
+    assert css.source_file.read().decode("utf-8") == data["source"]

+ 6 - 0
misago/themes/admin/views.py

@@ -256,6 +256,12 @@ class NewThemeCss(ThemeCssFormAdmin):
 class EditThemeCss(NewThemeCss):
 class EditThemeCss(NewThemeCss):
     message_submit = _('CSS "%(name)s" has been updated.')
     message_submit = _('CSS "%(name)s" has been updated.')
 
 
+    def get_theme_css_or_none(self, theme, css_pk):
+        try:
+            return theme.css.get(pk=css_pk, url__isnull=True)
+        except ObjectDoesNotExist:
+            return None
+
     def initialize_form(self, form, request, theme, css):
     def initialize_form(self, form, request, theme, css):
         if request.method == "POST":
         if request.method == "POST":
             return form(request.POST, instance=css)
             return form(request.POST, instance=css)