123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- from pathlib import Path
- import pytest
- from django.core.files.base import ContentFile
- from django.urls import reverse
- from ....cache.test import assert_invalidates_cache
- from ....test import assert_has_error_message
- from ... import THEME_CACHE
- from ...models import Theme, Css, Media
- @pytest.fixture
- def delete_link(theme):
- return reverse("misago:admin:appearance:themes:delete", kwargs={"pk": theme.pk})
- def test_theme_without_children_can_be_deleted(admin_client, delete_link, theme):
- admin_client.post(delete_link)
- with pytest.raises(Theme.DoesNotExist):
- theme.refresh_from_db()
- def test_theme_css_are_deleted_together_with_theme(admin_client, delete_link, css):
- admin_client.post(delete_link)
- with pytest.raises(Css.DoesNotExist):
- css.refresh_from_db()
- def test_theme_source_css_files_are_deleted_together_with_theme(
- admin_client, delete_link, css
- ):
- admin_client.post(delete_link)
- assert not Path(css.source_file.path).exists()
- def test_theme_build_css_files_are_deleted_together_with_theme(
- admin_client, delete_link, css
- ):
- css.build_file = ContentFile("body {}", name="test.css")
- css.build_hash = "abcdefgh"
- css.save()
- admin_client.post(delete_link)
- assert not Path(css.build_file.path).exists()
- def test_theme_media_are_deleted_together_with_theme(admin_client, delete_link, media):
- admin_client.post(delete_link)
- with pytest.raises(Media.DoesNotExist):
- media.refresh_from_db()
- def test_theme_images_are_deleted_together_with_theme(admin_client, delete_link, image):
- admin_client.post(delete_link)
- with pytest.raises(Media.DoesNotExist):
- image.refresh_from_db()
- def test_theme_media_files_are_deleted_together_with_theme(
- admin_client, delete_link, media
- ):
- admin_client.post(delete_link)
- assert not Path(media.file.path).exists()
- def test_theme_image_files_are_deleted_together_with_theme(
- admin_client, delete_link, image
- ):
- admin_client.post(delete_link)
- assert not Path(image.thumbnail.path).exists()
- def test_theme_is_deleted_with_children(admin_client, delete_link, theme):
- Theme.objects.create(name="Child Theme", parent=theme)
- admin_client.post(delete_link)
- assert Theme.objects.count() == 1
- def test_theme_children_are_deleted_recursively(admin_client, delete_link, theme):
- child_theme = Theme.objects.create(name="Child Theme", parent=theme)
- Theme.objects.create(name="Descendant Theme", parent=child_theme)
- Theme.objects.create(name="Descendant Theme", parent=child_theme)
- admin_client.post(delete_link)
- assert Theme.objects.count() == 1
- def test_children_theme_can_be_deleted(admin_client, delete_link, theme, other_theme):
- theme.move_to(other_theme)
- theme.save()
- admin_client.post(delete_link)
- with pytest.raises(Theme.DoesNotExist):
- theme.refresh_from_db()
- def test_deleting_children_theme_doesnt_delete_parent_themes(
- admin_client, delete_link, theme, other_theme
- ):
- theme.move_to(other_theme)
- theme.save()
- admin_client.post(delete_link)
- other_theme.refresh_from_db()
- def test_deleting_theme_invalidates_themes_cache(admin_client, delete_link):
- with assert_invalidates_cache(THEME_CACHE):
- admin_client.post(delete_link)
- def test_deleting_default_theme_sets_error_message(admin_client, default_theme):
- delete_link = reverse(
- "misago:admin:appearance:themes:delete", kwargs={"pk": default_theme.pk}
- )
- response = admin_client.post(delete_link)
- assert_has_error_message(response)
- def test_default_theme_is_not_deleted(admin_client, default_theme):
- delete_link = reverse(
- "misago:admin:appearance:themes:delete", kwargs={"pk": default_theme.pk}
- )
- admin_client.post(delete_link)
- default_theme.refresh_from_db()
- def test_deleting_active_theme_sets_error_message(admin_client, theme):
- theme.is_active = True
- theme.save()
- delete_link = reverse(
- "misago:admin:appearance:themes:delete", kwargs={"pk": theme.pk}
- )
- response = admin_client.post(delete_link)
- assert_has_error_message(response)
- def test_active_theme_is_not_deleted(admin_client, theme):
- theme.is_active = True
- theme.save()
- delete_link = reverse(
- "misago:admin:appearance:themes:delete", kwargs={"pk": theme.pk}
- )
- admin_client.post(delete_link)
- theme.refresh_from_db()
- def test_deleting_theme_containing_active_child_theme_sets_error_message(
- admin_client, theme, other_theme
- ):
- other_theme.move_to(theme)
- other_theme.is_active = True
- other_theme.save()
- delete_link = reverse(
- "misago:admin:appearance:themes:delete", kwargs={"pk": theme.pk}
- )
- response = admin_client.post(delete_link)
- assert_has_error_message(response)
- def test_theme_containing_active_child_theme_is_not_deleted(
- admin_client, theme, other_theme
- ):
- other_theme.move_to(theme)
- other_theme.is_active = True
- other_theme.save()
- delete_link = reverse(
- "misago:admin:appearance:themes:delete", kwargs={"pk": theme.pk}
- )
- admin_client.post(delete_link)
- theme.refresh_from_db()
|