|
@@ -0,0 +1,94 @@
|
|
|
+from django.core.files.base import ContentFile
|
|
|
+
|
|
|
+from ..activetheme import get_active_theme
|
|
|
+from ..models import Theme
|
|
|
+
|
|
|
+
|
|
|
+def test_active_theme_data_can_be_obtained(db):
|
|
|
+ assert get_active_theme()
|
|
|
+
|
|
|
+
|
|
|
+def test_if_active_theme_is_default_theme_include_defaults_flag_is_set(db):
|
|
|
+ assert get_active_theme()["include_defaults"]
|
|
|
+
|
|
|
+
|
|
|
+def test_if_active_theme_is_default_themes_child_include_defaults_flag_is_set(
|
|
|
+ default_theme, active_theme
|
|
|
+):
|
|
|
+ active_theme.parent = default_theme
|
|
|
+ active_theme.save()
|
|
|
+ assert get_active_theme()["include_defaults"]
|
|
|
+
|
|
|
+
|
|
|
+def test_if_active_theme_is_not_default_themes_child_include_defaults_flag_is_not_set(
|
|
|
+ active_theme
|
|
|
+):
|
|
|
+ assert not get_active_theme()["include_defaults"]
|
|
|
+
|
|
|
+
|
|
|
+def test_active_theme_styles_are_included(active_theme):
|
|
|
+ active_theme.css.create(name="test", url="https://example.com")
|
|
|
+ assert get_active_theme()["styles"]
|
|
|
+
|
|
|
+
|
|
|
+def test_active_theme_parents_styles_are_included(active_theme):
|
|
|
+ parent_theme = Theme.objects.create(name="Parent theme")
|
|
|
+ parent_theme.css.create(name="test", url="https://example.com")
|
|
|
+
|
|
|
+ active_theme.move_to(parent_theme)
|
|
|
+ active_theme.save()
|
|
|
+
|
|
|
+ assert get_active_theme()["styles"]
|
|
|
+
|
|
|
+
|
|
|
+def test_active_theme_child_themes_styles_are_not_included(active_theme):
|
|
|
+ child_theme = Theme.objects.create(parent=active_theme, name="Child theme")
|
|
|
+ child_theme.css.create(name="test", url="https://example.com")
|
|
|
+ assert not get_active_theme()["styles"]
|
|
|
+
|
|
|
+
|
|
|
+def test_active_theme_styles_are_ordered(active_theme):
|
|
|
+ last_css = active_theme.css.create(
|
|
|
+ name="test", url="https://last-example.com", order=1
|
|
|
+ )
|
|
|
+ first_css = active_theme.css.create(
|
|
|
+ name="test", url="https://first-example.com", order=0
|
|
|
+ )
|
|
|
+
|
|
|
+ assert get_active_theme()["styles"] == [first_css.url, last_css.url]
|
|
|
+
|
|
|
+
|
|
|
+def test_active_theme_styles_list_includes_url_to_remote_css(active_theme):
|
|
|
+ css = active_theme.css.create(name="test", url="https://last-example.com")
|
|
|
+ assert get_active_theme()["styles"] == [css.url]
|
|
|
+
|
|
|
+
|
|
|
+def test_active_theme_styles_list_contains_url_to_local_css(active_theme):
|
|
|
+ css = active_theme.css.create(
|
|
|
+ name="test",
|
|
|
+ source_file=ContentFile("body {}", name="test.css"),
|
|
|
+ source_hash="abcdefgh",
|
|
|
+ )
|
|
|
+ assert get_active_theme()["styles"] == [css.source_file.url]
|
|
|
+
|
|
|
+
|
|
|
+def test_active_theme_styles_list_contains_url_to_local_built_css(active_theme):
|
|
|
+ css = active_theme.css.create(
|
|
|
+ name="test",
|
|
|
+ source_needs_building=True,
|
|
|
+ build_file=ContentFile("body {}", name="test.css"),
|
|
|
+ build_hash="abcdefgh",
|
|
|
+ )
|
|
|
+ assert get_active_theme()["styles"] == [css.build_file.url]
|
|
|
+
|
|
|
+
|
|
|
+def test_active_theme_styles_list_exclude_url_to_css_that_has_not_been_built(
|
|
|
+ active_theme
|
|
|
+):
|
|
|
+ active_theme.css.create(
|
|
|
+ name="test",
|
|
|
+ source_file=ContentFile("body {}", name="test.css"),
|
|
|
+ source_hash="abcdefgh",
|
|
|
+ source_needs_building=True,
|
|
|
+ )
|
|
|
+ assert not get_active_theme()["styles"]
|