From a57b8af24d1feaaeb8fb22d6bf3086d9c189e1df Mon Sep 17 00:00:00 2001 From: artragis Date: Sat, 27 Dec 2025 21:22:50 +0100 Subject: [PATCH 01/33] Automatically check HTML is valid --- .github/workflows/ci.yml | 4 +- requirements-dev.txt | 1 + zds/featured/tests/tests.py | 2 +- zds/forum/tests/tests.py | 2 +- zds/forum/tests/tests_feeds.py | 2 +- zds/forum/tests/tests_views.py | 2 +- zds/gallery/tests/tests_views.py | 2 +- zds/member/tests/views/tests_admin.py | 2 +- .../tests/views/tests_emailproviders.py | 2 +- zds/member/tests/views/tests_hats.py | 2 +- zds/member/tests/views/tests_login.py | 2 +- zds/member/tests/views/tests_moderation.py | 2 +- .../tests/views/tests_password_recovery.py | 2 +- zds/member/tests/views/tests_profile.py | 2 +- zds/member/tests/views/tests_register.py | 3 +- zds/member/tests/views/tests_reports.py | 2 +- zds/member/tests/views/tests_session.py | 2 +- zds/mp/tests/tests_utils.py | 2 +- zds/mp/tests/tests_views.py | 2 +- zds/notification/tests/tests_basics.py | 2 +- zds/notification/tests/tests_tricky.py | 2 +- zds/search/tests/tests_views.py | 2 +- zds/tests/common.py | 95 +++++++++++++++++++ .../tests_createshareablelinkview.py | 3 +- .../tests_deactivateshareablelinkview.py | 2 +- .../tests_deleteshareablelinkview.py | 2 +- .../tests_editshareablelinkview.py | 2 +- .../tests_listshareablelinksview.py | 2 +- .../tests_reactivateshareablelinkview.py | 2 +- .../tests_sharedcontentview.py | 2 +- .../tests/tests_views/tests_addauthor.py | 2 +- .../tests/tests_views/tests_addcontributor.py | 2 +- .../tests/tests_views/tests_addsuggestion.py | 2 +- .../tests/tests_views/tests_beta.py | 2 +- .../tests/tests_views/tests_content.py | 4 +- .../tests_contentvalidationview.py | 2 +- .../tests/tests_views/tests_display.py | 2 +- .../tests/tests_views/tests_edgecases.py | 3 +- .../tests_editcanonicallinkview.py | 2 +- .../tests_views/tests_editcategoriesview.py | 2 +- .../tests_views/tests_editconclusionview.py | 2 +- .../tests_views/tests_editcontentlicense.py | 2 +- .../tests_views/tests_editcontenttags.py | 2 +- .../tests/tests_views/tests_editgoals.py | 2 +- .../tests_views/tests_editintroductionview.py | 2 +- .../tests/tests_views/tests_editlabels.py | 2 +- .../tests/tests_views/tests_editsubtitle.py | 2 +- .../tests_views/tests_editthumbnailview.py | 2 +- .../tests/tests_views/tests_edittitle.py | 2 +- .../tests/tests_views/tests_events.py | 2 +- .../tests/tests_views/tests_masseditgoals.py | 2 +- .../tests/tests_views/tests_published.py | 2 +- .../tests/tests_views/tests_redirect.py | 2 +- .../tests/tests_views/tests_removeauthor.py | 2 +- .../tests_views/tests_removecontributor.py | 2 +- .../tests_views/tests_removesuggestion.py | 2 +- .../tests/tests_views/tests_stats.py | 2 +- .../tests_views/tests_viewcontentsbygoal.py | 2 +- .../tests_views/tests_viewcontentsbylabel.py | 2 +- 59 files changed, 156 insertions(+), 61 deletions(-) create mode 100644 zds/tests/common.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a58ce89a7b..35a1ff3d92 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -219,8 +219,8 @@ jobs: with: node-version: "${{ env.NODE_VERSION }}" - - name: Install Cairo - run: sudo apt-get update && sudo apt-get install libcairo2-dev + - name: Install Cairo and tidylib + run: sudo apt-get update && sudo apt-get install libcairo2-dev pytidylib - name: Install Python dependencies run: pip install -r requirements-ci.txt diff --git a/requirements-dev.txt b/requirements-dev.txt index d924cecfa0..f9a4aa84de 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -10,3 +10,4 @@ PyYAML==6.0.3 selenium==4.38.0 Sphinx==8.2.3 sphinx-rtd-theme==3.0.2 +pytidylib==0.3.2 diff --git a/zds/featured/tests/tests.py b/zds/featured/tests/tests.py index 49ff543f28..d3564f3808 100644 --- a/zds/featured/tests/tests.py +++ b/zds/featured/tests/tests.py @@ -1,7 +1,6 @@ from datetime import date, datetime from django.contrib.contenttypes.models import ContentType -from django.test import TestCase from django.urls import reverse from django.utils.translation import gettext as _ @@ -10,6 +9,7 @@ from zds.forum.tests.factories import ForumCategoryFactory, ForumFactory, TopicFactory from zds.gallery.tests.factories import GalleryFactory, ImageFactory from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.publication_utils import unpublish_content from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import PublishedContentFactory diff --git a/zds/forum/tests/tests.py b/zds/forum/tests/tests.py index 535cf0554c..92d1cd9281 100644 --- a/zds/forum/tests/tests.py +++ b/zds/forum/tests/tests.py @@ -3,7 +3,6 @@ from django.conf import settings from django.contrib.auth.models import Group from django.core import mail -from django.test import TestCase from django.urls import reverse from zds.forum.commons import PostEditMixin @@ -12,6 +11,7 @@ from zds.forum.utils import get_tag_by_title from zds.member.tests.factories import ProfileFactory, StaffProfileFactory from zds.notification.models import TopicAnswerSubscription +from zds.tests.common import ZdsTestCase as TestCase from zds.utils import old_slugify from zds.utils.models import Alert, Tag diff --git a/zds/forum/tests/tests_feeds.py b/zds/forum/tests/tests_feeds.py index 8a7a94a11f..9bb1cc4ccd 100644 --- a/zds/forum/tests/tests_feeds.py +++ b/zds/forum/tests/tests_feeds.py @@ -1,11 +1,11 @@ from django.conf import settings -from django.test import TestCase from django.test.client import RequestFactory from django.urls import reverse from zds.forum.feeds import LastPostsFeedATOM, LastPostsFeedRSS, LastTopicsFeedATOM, LastTopicsFeedRSS from zds.forum.tests.factories import ForumCategoryFactory, ForumFactory, PostFactory, TagFactory, TopicFactory from zds.member.tests.factories import ProfileFactory +from zds.tests.common import ZdsTestCase as TestCase class LastTopicsFeedTest(TestCase): diff --git a/zds/forum/tests/tests_views.py b/zds/forum/tests/tests_views.py index 4d1af27751..200d85a234 100644 --- a/zds/forum/tests/tests_views.py +++ b/zds/forum/tests/tests_views.py @@ -3,7 +3,6 @@ from django.conf import settings from django.contrib.auth.models import Group -from django.test import TestCase from django.urls import reverse from django.utils.translation import gettext_lazy as _ @@ -11,6 +10,7 @@ from zds.forum.tests.factories import PostFactory, TagFactory, create_category_and_forum, create_topic_in_forum from zds.member.tests.factories import DevProfileFactory, ProfileFactory, StaffProfileFactory from zds.notification.models import TopicAnswerSubscription +from zds.tests.common import ZdsTestCase as TestCase from zds.utils.models import CommentEdit, Hat diff --git a/zds/gallery/tests/tests_views.py b/zds/gallery/tests/tests_views.py index 4879fdd27b..ddfb82d6f9 100644 --- a/zds/gallery/tests/tests_views.py +++ b/zds/gallery/tests/tests_views.py @@ -3,13 +3,13 @@ from zipfile import ZipFile from django.conf import settings -from django.test import TestCase from django.urls import reverse from PIL import Image as ImagePIL from zds.gallery.models import Gallery, Image, UserGallery from zds.gallery.tests.factories import GalleryFactory, ImageFactory, UserGalleryFactory from zds.member.tests.factories import ProfileFactory +from zds.tests.common import ZdsTestCase as TestCase class GalleryListViewTest(TestCase): diff --git a/zds/member/tests/views/tests_admin.py b/zds/member/tests/views/tests_admin.py index f1fb15cfbf..d01a8cf039 100644 --- a/zds/member/tests/views/tests_admin.py +++ b/zds/member/tests/views/tests_admin.py @@ -1,12 +1,12 @@ from django.conf import settings from django.contrib.auth.models import Group, User -from django.test import TestCase from django.urls import reverse from zds.forum.tests.factories import ForumCategoryFactory, ForumFactory, TopicFactory from zds.member.models import Profile from zds.member.tests.factories import ProfileFactory, StaffProfileFactory, UserFactory from zds.notification.models import TopicAnswerSubscription +from zds.tests.common import ZdsTestCase as TestCase class MemberTests(TestCase): diff --git a/zds/member/tests/views/tests_emailproviders.py b/zds/member/tests/views/tests_emailproviders.py index 87162bfb0b..e1a4aba9a9 100644 --- a/zds/member/tests/views/tests_emailproviders.py +++ b/zds/member/tests/views/tests_emailproviders.py @@ -1,11 +1,11 @@ from django.conf import settings from django.contrib.auth.models import Group, User -from django.test import TestCase from django.urls import reverse from zds.forum.tests.factories import ForumCategoryFactory, ForumFactory from zds.member.models import BannedEmailProvider, NewEmailProvider, TokenRegister from zds.member.tests.factories import ProfileFactory, StaffProfileFactory, UserFactory +from zds.tests.common import ZdsTestCase as TestCase class EmailProvidersTests(TestCase): diff --git a/zds/member/tests/views/tests_hats.py b/zds/member/tests/views/tests_hats.py index 408f2de7a5..55e3c0ce0a 100644 --- a/zds/member/tests/views/tests_hats.py +++ b/zds/member/tests/views/tests_hats.py @@ -1,12 +1,12 @@ from django.conf import settings from django.contrib.auth.models import Group -from django.test import TestCase from django.urls import reverse from django.utils.translation import gettext_lazy as _ from zds.forum.tests.factories import ForumCategoryFactory, ForumFactory from zds.member.tests.factories import ProfileFactory, StaffProfileFactory, UserFactory from zds.pages.models import GroupContact +from zds.tests.common import ZdsTestCase as TestCase from zds.utils.models import Hat, HatRequest from zds.utils.templatetags.email_obfuscator import obfuscate diff --git a/zds/member/tests/views/tests_login.py b/zds/member/tests/views/tests_login.py index 85acfe76cd..e867f54dbf 100644 --- a/zds/member/tests/views/tests_login.py +++ b/zds/member/tests/views/tests_login.py @@ -2,13 +2,13 @@ from urllib.parse import quote from django.conf import settings -from django.test import TestCase from django.urls import reverse from django.utils.html import escape from zds.member.forms import LoginForm from zds.member.models import Ban, BlockedIP, Profile from zds.member.tests.factories import NonAsciiProfileFactory, ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase class LoginTests(TestCase): diff --git a/zds/member/tests/views/tests_moderation.py b/zds/member/tests/views/tests_moderation.py index 2147236a54..091ac2ac85 100644 --- a/zds/member/tests/views/tests_moderation.py +++ b/zds/member/tests/views/tests_moderation.py @@ -3,7 +3,6 @@ from django.conf import settings from django.contrib.auth.models import Group from django.core import mail -from django.test import TestCase from django.urls import reverse from django.utils.translation import gettext_lazy as _ @@ -12,6 +11,7 @@ from zds.member.tests.factories import ProfileFactory, StaffProfileFactory, UserFactory from zds.member.views.ip_addresses import members_from_ip from zds.notification.models import Notification +from zds.tests.common import ZdsTestCase as TestCase class TestsModeration(TestCase): diff --git a/zds/member/tests/views/tests_password_recovery.py b/zds/member/tests/views/tests_password_recovery.py index dc82bc8198..045d6f83dd 100644 --- a/zds/member/tests/views/tests_password_recovery.py +++ b/zds/member/tests/views/tests_password_recovery.py @@ -1,12 +1,12 @@ from django.conf import settings from django.contrib.auth.models import Group, User from django.core import mail -from django.test import TestCase from django.urls import reverse from zds.forum.tests.factories import ForumCategoryFactory, ForumFactory from zds.member.models import TokenForgotPassword from zds.member.tests.factories import ProfileFactory, StaffProfileFactory, UserFactory +from zds.tests.common import ZdsTestCase as TestCase class MemberTests(TestCase): diff --git a/zds/member/tests/views/tests_profile.py b/zds/member/tests/views/tests_profile.py index a4dfd61646..32571f2899 100644 --- a/zds/member/tests/views/tests_profile.py +++ b/zds/member/tests/views/tests_profile.py @@ -1,11 +1,11 @@ from django.conf import settings from django.contrib.auth.models import Group -from django.test import TestCase from django.urls import reverse from zds.forum.tests.factories import ForumCategoryFactory, ForumFactory, PostFactory, TopicFactory from zds.member.models import Profile from zds.member.tests.factories import DevProfileFactory, ProfileFactory, StaffProfileFactory, UserFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents diff --git a/zds/member/tests/views/tests_register.py b/zds/member/tests/views/tests_register.py index b7857b4c1c..ee26a9fb02 100644 --- a/zds/member/tests/views/tests_register.py +++ b/zds/member/tests/views/tests_register.py @@ -7,7 +7,7 @@ from django.contrib.auth.models import Group, User from django.core import mail from django.core.mail.backends.base import BaseEmailBackend -from django.test import TestCase, override_settings +from django.test import override_settings from django.urls import reverse from django.utils.html import escape from oauth2_provider.models import AccessToken, Application @@ -20,6 +20,7 @@ from zds.member.tests.factories import ProfileFactory, StaffProfileFactory, UserFactory from zds.mp.models import PrivatePost, PrivateTopic from zds.mp.tests.factories import PrivatePostFactory, PrivateTopicFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.database import PublishableContent, PublishedContent from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import BetaContentFactory, PublishableContentFactory, PublishedContentFactory diff --git a/zds/member/tests/views/tests_reports.py b/zds/member/tests/views/tests_reports.py index cda87cdae8..d626d839f4 100644 --- a/zds/member/tests/views/tests_reports.py +++ b/zds/member/tests/views/tests_reports.py @@ -1,11 +1,11 @@ from django.conf import settings from django.contrib.auth.models import Group -from django.test import TestCase from django.urls import reverse from zds.forum.tests.factories import ForumCategoryFactory, ForumFactory from zds.member.tests.factories import ProfileFactory, StaffProfileFactory, UserFactory from zds.mp.models import PrivateTopic +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.utils.models import Alert diff --git a/zds/member/tests/views/tests_session.py b/zds/member/tests/views/tests_session.py index 56524e34ae..ce5660c516 100644 --- a/zds/member/tests/views/tests_session.py +++ b/zds/member/tests/views/tests_session.py @@ -1,7 +1,7 @@ -from django.test import TestCase from django.urls import reverse from zds.member.tests.factories import ProfileFactory +from zds.tests.common import ZdsTestCase as TestCase class SessionManagementTests(TestCase): diff --git a/zds/mp/tests/tests_utils.py b/zds/mp/tests/tests_utils.py index 8db6b2f329..adad5fb2e5 100644 --- a/zds/mp/tests/tests_utils.py +++ b/zds/mp/tests/tests_utils.py @@ -1,11 +1,11 @@ from django.conf import settings from django.contrib.auth.models import Group from django.core import mail -from django.test import TestCase from django.urls import reverse from zds.member.tests.factories import ProfileFactory from zds.mp.models import PrivateTopic +from zds.tests.common import ZdsTestCase as TestCase class MpUtilTest(TestCase): diff --git a/zds/mp/tests/tests_views.py b/zds/mp/tests/tests_views.py index 697ddec5c0..a3a98be503 100644 --- a/zds/mp/tests/tests_views.py +++ b/zds/mp/tests/tests_views.py @@ -2,12 +2,12 @@ from django.conf import settings from django.contrib.auth.models import Group -from django.test import TestCase from django.urls import reverse from zds.member.tests.factories import ProfileFactory, UserFactory from zds.mp.models import PrivatePost, PrivateTopic, PrivateTopicRead, mark_read from zds.mp.tests.factories import PrivatePostFactory, PrivateTopicFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.utils.models import Hat diff --git a/zds/notification/tests/tests_basics.py b/zds/notification/tests/tests_basics.py index 1f25a5254f..1642664af6 100644 --- a/zds/notification/tests/tests_basics.py +++ b/zds/notification/tests/tests_basics.py @@ -6,7 +6,6 @@ from django.contrib.contenttypes.models import ContentType from django.core import mail from django.db import IntegrityError -from django.test import TestCase from django.urls import reverse from zds.forum.models import Topic @@ -30,6 +29,7 @@ PrivateTopicAnswerSubscription, TopicAnswerSubscription, ) +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2 import signals from zds.tutorialv2.models.database import ContentReaction, PublishableContent from zds.tutorialv2.publication_utils import notify_update, publish_content diff --git a/zds/notification/tests/tests_tricky.py b/zds/notification/tests/tests_tricky.py index f36745e43a..a03edefde5 100644 --- a/zds/notification/tests/tests_tricky.py +++ b/zds/notification/tests/tests_tricky.py @@ -2,7 +2,6 @@ from django.conf import settings from django.core import mail -from django.test import TestCase from django.test.utils import override_settings from django.urls import reverse @@ -19,6 +18,7 @@ PingSubscription, TopicAnswerSubscription, ) +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2 import signals from zds.tutorialv2.publication_utils import notify_update, publish_content from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents diff --git a/zds/search/tests/tests_views.py b/zds/search/tests/tests_views.py index 8e4e8b93db..1e3a2f5110 100644 --- a/zds/search/tests/tests_views.py +++ b/zds/search/tests/tests_views.py @@ -4,7 +4,6 @@ from django.conf import settings from django.contrib.auth.models import Group -from django.test import TestCase from django.test.utils import override_settings from django.urls import reverse @@ -12,6 +11,7 @@ from zds.forum.tests.factories import Post, PostFactory, TagFactory, Topic, TopicFactory, create_category_and_forum from zds.member.tests.factories import ProfileFactory, StaffProfileFactory from zds.search.utils import SearchIndexManager +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.database import FakeChapter, PublishableContent, PublishedContent from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import ( diff --git a/zds/tests/common.py b/zds/tests/common.py new file mode 100644 index 0000000000..fd883e4abd --- /dev/null +++ b/zds/tests/common.py @@ -0,0 +1,95 @@ +from http.client import responses + +from django.test import TestCase +from django.test.client import MULTIPART_CONTENT, Client +from tidylib import tidy_document + + +class ZDSResponseWrapper: + def __init__(self, response, path): + self._inner = response + self.path = path + if response.headers.get("Content-Type").startswith("text/html"): + self.html_document, self.errors = tidy_document( + response.content.decode(), + options={ + "doctype": "html5", + "drop-empty-elements": 0, + "fix-style-tags": "no", + # we have proprietary attributes to ensure + # compatibility with antidote + "warn-proprietary-attributes": 0, + "numeric-entities": 1, + }, + ) + self.valid = not self.errors + else: + self.html_document = None + self.valid = False + + def is_html(self): + return self.html_document is not None + + def __getattr__(self, attr): + if not hasattr(self._inner, attr): + raise AttributeError(f"{self.__class__.__name__} object has no attribute {attr}") + return getattr(self._inner, attr) + + +class HTMLValidationMixin: + failureException = AssertionError + + def assert_valid_if_html(self, response: ZDSResponseWrapper): + if response.is_html() and not response.valid: + raise self.failureException(f"{response.path} is not valid HTML: {response.errors}") + + +class HtmlValidationClient(Client, HTMLValidationMixin): + def post( + self, + path: str, + data=None, + content_type=MULTIPART_CONTENT, + follow=False, + secure=False, + *, + headers=None, + query_params=None, + **extra, + ): + response = ZDSResponseWrapper( + super().post(path, data, content_type, follow, secure, headers=headers, query_params=query_params, **extra), + path, + ) + self.assert_valid_if_html(response) + return response + + def get(self, path, data=None, secure=False, *, headers=None, query_params=None, **extra): + response = ZDSResponseWrapper( + super().get(path, data, secure, headers=headers, query_params=query_params, **extra), path=path + ) + self.assert_valid_if_html(response) + return response + + def put( + self, + path, + data="", + content_type="application/octet-stream", + follow=False, + secure=False, + *, + headers=None, + query_params=None, + **extra, + ): + response = ZDSResponseWrapper( + super().put(path, data, content_type, follow, secure, headers=headers, query_params=query_params, **extra), + path, + ) + self.assert_valid_if_html(response) + return response + + +class ZdsTestCase(TestCase): + client_class = HtmlValidationClient diff --git a/zds/tutorialv2/tests/tests_views/shareable_links/tests_createshareablelinkview.py b/zds/tutorialv2/tests/tests_views/shareable_links/tests_createshareablelinkview.py index 181f59afe7..2b0cbb9e92 100644 --- a/zds/tutorialv2/tests/tests_views/shareable_links/tests_createshareablelinkview.py +++ b/zds/tutorialv2/tests/tests_views/shareable_links/tests_createshareablelinkview.py @@ -1,10 +1,9 @@ -from django.test import TestCase from django.urls import reverse from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.shareable_links import ShareableLink from zds.tutorialv2.tests.factories import PublishableContentFactory -from zds.tutorialv2.views.shareable_links import CreateShareableLinkView class CreateShareableLinkTests(TestCase): diff --git a/zds/tutorialv2/tests/tests_views/shareable_links/tests_deactivateshareablelinkview.py b/zds/tutorialv2/tests/tests_views/shareable_links/tests_deactivateshareablelinkview.py index 0b99eec4ea..0c13680b20 100644 --- a/zds/tutorialv2/tests/tests_views/shareable_links/tests_deactivateshareablelinkview.py +++ b/zds/tutorialv2/tests/tests_views/shareable_links/tests_deactivateshareablelinkview.py @@ -1,7 +1,7 @@ -from django.test import TestCase from django.urls import reverse from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.shareable_links import ShareableLink from zds.tutorialv2.tests.factories import PublishableContentFactory from zds.tutorialv2.views.shareable_links import DeactivateShareableLinkView diff --git a/zds/tutorialv2/tests/tests_views/shareable_links/tests_deleteshareablelinkview.py b/zds/tutorialv2/tests/tests_views/shareable_links/tests_deleteshareablelinkview.py index 0ee3f2ecce..e91ecdbe1a 100644 --- a/zds/tutorialv2/tests/tests_views/shareable_links/tests_deleteshareablelinkview.py +++ b/zds/tutorialv2/tests/tests_views/shareable_links/tests_deleteshareablelinkview.py @@ -1,7 +1,7 @@ -from django.test import TestCase from django.urls import reverse from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.shareable_links import ShareableLink from zds.tutorialv2.tests.factories import PublishableContentFactory from zds.tutorialv2.views.shareable_links import DeleteShareableLinkView diff --git a/zds/tutorialv2/tests/tests_views/shareable_links/tests_editshareablelinkview.py b/zds/tutorialv2/tests/tests_views/shareable_links/tests_editshareablelinkview.py index c488d8cbe9..afcd7f28cf 100644 --- a/zds/tutorialv2/tests/tests_views/shareable_links/tests_editshareablelinkview.py +++ b/zds/tutorialv2/tests/tests_views/shareable_links/tests_editshareablelinkview.py @@ -1,9 +1,9 @@ from datetime import datetime -from django.test import TestCase from django.urls import reverse from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.shareable_links import ShareableLink from zds.tutorialv2.tests.factories import PublishableContentFactory from zds.tutorialv2.views.shareable_links import EditShareableLinkView diff --git a/zds/tutorialv2/tests/tests_views/shareable_links/tests_listshareablelinksview.py b/zds/tutorialv2/tests/tests_views/shareable_links/tests_listshareablelinksview.py index e4496ada1c..d02fdb663e 100644 --- a/zds/tutorialv2/tests/tests_views/shareable_links/tests_listshareablelinksview.py +++ b/zds/tutorialv2/tests/tests_views/shareable_links/tests_listshareablelinksview.py @@ -1,8 +1,8 @@ -from django.test import TestCase from django.urls import reverse from django.utils.translation import gettext_lazy as _ from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.shareable_links import ShareableLink from zds.tutorialv2.tests import TutorialTestMixin from zds.tutorialv2.tests.factories import PublishableContentFactory diff --git a/zds/tutorialv2/tests/tests_views/shareable_links/tests_reactivateshareablelinkview.py b/zds/tutorialv2/tests/tests_views/shareable_links/tests_reactivateshareablelinkview.py index 25ba3cb850..5b6ee2b26b 100644 --- a/zds/tutorialv2/tests/tests_views/shareable_links/tests_reactivateshareablelinkview.py +++ b/zds/tutorialv2/tests/tests_views/shareable_links/tests_reactivateshareablelinkview.py @@ -1,7 +1,7 @@ -from django.test import TestCase from django.urls import reverse from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.shareable_links import ShareableLink from zds.tutorialv2.tests.factories import PublishableContentFactory from zds.tutorialv2.views.shareable_links import ReactivateShareableLinkView diff --git a/zds/tutorialv2/tests/tests_views/shareable_links/tests_sharedcontentview.py b/zds/tutorialv2/tests/tests_views/shareable_links/tests_sharedcontentview.py index 2016087ef5..494e13e4ac 100644 --- a/zds/tutorialv2/tests/tests_views/shareable_links/tests_sharedcontentview.py +++ b/zds/tutorialv2/tests/tests_views/shareable_links/tests_sharedcontentview.py @@ -1,7 +1,7 @@ -from django.test import TestCase from django.urls import reverse from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.shareable_links import ShareableLink from zds.tutorialv2.tests.factories import PublishableContentFactory diff --git a/zds/tutorialv2/tests/tests_views/tests_addauthor.py b/zds/tutorialv2/tests/tests_views/tests_addauthor.py index 95d1c4e59e..03670c1515 100644 --- a/zds/tutorialv2/tests/tests_views/tests_addauthor.py +++ b/zds/tutorialv2/tests/tests_views/tests_addauthor.py @@ -2,12 +2,12 @@ from django.conf import settings from django.contrib.auth.models import Group -from django.test import TestCase from django.urls import reverse from zds.gallery.models import GALLERY_WRITE, UserGallery from zds.gallery.tests.factories import UserGalleryFactory from zds.member.tests.factories import ProfileFactory, UserFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.database import PublishableContent from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import PublishableContentFactory diff --git a/zds/tutorialv2/tests/tests_views/tests_addcontributor.py b/zds/tutorialv2/tests/tests_views/tests_addcontributor.py index 69e4234e02..149f02f133 100644 --- a/zds/tutorialv2/tests/tests_views/tests_addcontributor.py +++ b/zds/tutorialv2/tests/tests_views/tests_addcontributor.py @@ -1,12 +1,12 @@ from unittest.mock import patch from django.conf import settings -from django.test import TestCase from django.urls import reverse from django.utils.html import escape from django.utils.translation import gettext_lazy as _ from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models import CONTENT_TYPE_LIST from zds.tutorialv2.models.database import ContentContribution from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents diff --git a/zds/tutorialv2/tests/tests_views/tests_addsuggestion.py b/zds/tutorialv2/tests/tests_views/tests_addsuggestion.py index 183310762a..282f88985e 100644 --- a/zds/tutorialv2/tests/tests_views/tests_addsuggestion.py +++ b/zds/tutorialv2/tests/tests_views/tests_addsuggestion.py @@ -1,11 +1,11 @@ from unittest.mock import patch -from django.test import TestCase from django.urls import reverse from django.utils.html import escape from django.utils.translation import gettext_lazy as _ from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.database import ContentSuggestion from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import PublishableContentFactory, PublishedContentFactory diff --git a/zds/tutorialv2/tests/tests_views/tests_beta.py b/zds/tutorialv2/tests/tests_views/tests_beta.py index c4e427775c..85697ddcc1 100644 --- a/zds/tutorialv2/tests/tests_views/tests_beta.py +++ b/zds/tutorialv2/tests/tests_views/tests_beta.py @@ -1,7 +1,6 @@ from unittest.mock import patch from django.contrib.auth.models import Group -from django.test import TestCase from django.urls import reverse from django.utils.translation import gettext_lazy as _ @@ -11,6 +10,7 @@ from zds.member.tests.factories import ProfileFactory, UserFactory from zds.mp.models import PrivateTopic from zds.notification.models import TopicAnswerSubscription +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.database import PublishableContent from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import ( diff --git a/zds/tutorialv2/tests/tests_views/tests_content.py b/zds/tutorialv2/tests/tests_views/tests_content.py index 550b1b206a..5efd4e0b9b 100644 --- a/zds/tutorialv2/tests/tests_views/tests_content.py +++ b/zds/tutorialv2/tests/tests_views/tests_content.py @@ -10,17 +10,17 @@ from django.contrib import messages from django.contrib.auth.models import Group from django.http import HttpResponseNotAllowed -from django.test import TestCase from django.urls import reverse from zds import json_handler -from zds.forum.models import Post, Topic, TopicRead +from zds.forum.models import Topic, TopicRead from zds.forum.tests.factories import ForumCategoryFactory, ForumFactory from zds.gallery.models import Gallery, Image, UserGallery from zds.gallery.tests.factories import UserGalleryFactory from zds.member.tests.factories import ProfileFactory, StaffProfileFactory, UserFactory from zds.mp.models import PrivatePost, PrivateTopic from zds.notification.models import ContentReactionAnswerSubscription, NewPublicationSubscription, Notification +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.database import PublishableContent, PublishedContent, Validation from zds.tutorialv2.models.help_requests import HelpWriting from zds.tutorialv2.publication_utils import ( diff --git a/zds/tutorialv2/tests/tests_views/tests_contentvalidationview.py b/zds/tutorialv2/tests/tests_views/tests_contentvalidationview.py index 17d9e61f15..bf73b02967 100644 --- a/zds/tutorialv2/tests/tests_views/tests_contentvalidationview.py +++ b/zds/tutorialv2/tests/tests_views/tests_contentvalidationview.py @@ -1,7 +1,7 @@ -from django.test import TestCase from django.urls import reverse from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import PublishableContentFactory, ValidationFactory from zds.tutorialv2.tests.utils import request_validation diff --git a/zds/tutorialv2/tests/tests_views/tests_display.py b/zds/tutorialv2/tests/tests_views/tests_display.py index 008f86cc8c..a69d9f8a55 100644 --- a/zds/tutorialv2/tests/tests_views/tests_display.py +++ b/zds/tutorialv2/tests/tests_views/tests_display.py @@ -1,11 +1,11 @@ from copy import deepcopy from django.conf import settings -from django.test import TestCase from django.test.utils import override_settings from django.urls import reverse from zds.member.tests.factories import ProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.tests import TutorialTestMixin from zds.tutorialv2.tests.factories import PublishedContentFactory from zds.tutorialv2.tests.utils import request_validation diff --git a/zds/tutorialv2/tests/tests_views/tests_edgecases.py b/zds/tutorialv2/tests/tests_views/tests_edgecases.py index ff84effcfa..2e5b792b92 100644 --- a/zds/tutorialv2/tests/tests_views/tests_edgecases.py +++ b/zds/tutorialv2/tests/tests_views/tests_edgecases.py @@ -1,8 +1,7 @@ -from django.conf import settings -from django.test import TestCase from django.urls import reverse from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.database import PublishableContent from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import PublishedContentFactory diff --git a/zds/tutorialv2/tests/tests_views/tests_editcanonicallinkview.py b/zds/tutorialv2/tests/tests_views/tests_editcanonicallinkview.py index 22ae2dc222..889e8fa4e2 100644 --- a/zds/tutorialv2/tests/tests_views/tests_editcanonicallinkview.py +++ b/zds/tutorialv2/tests/tests_views/tests_editcanonicallinkview.py @@ -1,11 +1,11 @@ from unittest.mock import patch -from django.test import TestCase from django.urls import reverse from django.utils.html import escape from django.utils.translation import gettext_lazy as _ from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import PublishableContentFactory from zds.tutorialv2.views.canonical import EditCanonicalLinkForm, EditCanonicalLinkView diff --git a/zds/tutorialv2/tests/tests_views/tests_editcategoriesview.py b/zds/tutorialv2/tests/tests_views/tests_editcategoriesview.py index 5bd7c8312f..158e0fd635 100644 --- a/zds/tutorialv2/tests/tests_views/tests_editcategoriesview.py +++ b/zds/tutorialv2/tests/tests_views/tests_editcategoriesview.py @@ -1,10 +1,10 @@ from unittest.mock import patch -from django.test import TestCase from django.urls import reverse from django.utils.html import escape from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.publication_utils import publish_content from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import PublishableContentFactory diff --git a/zds/tutorialv2/tests/tests_views/tests_editconclusionview.py b/zds/tutorialv2/tests/tests_views/tests_editconclusionview.py index 4b6eded5d9..1c0cd91743 100644 --- a/zds/tutorialv2/tests/tests_views/tests_editconclusionview.py +++ b/zds/tutorialv2/tests/tests_views/tests_editconclusionview.py @@ -1,9 +1,9 @@ from datetime import datetime -from django.test import TestCase from django.urls import reverse from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import PublishableContentFactory diff --git a/zds/tutorialv2/tests/tests_views/tests_editcontentlicense.py b/zds/tutorialv2/tests/tests_views/tests_editcontentlicense.py index 835a355e6a..b10bc6100a 100644 --- a/zds/tutorialv2/tests/tests_views/tests_editcontentlicense.py +++ b/zds/tutorialv2/tests/tests_views/tests_editcontentlicense.py @@ -1,8 +1,8 @@ -from django.test import TestCase from django.urls import reverse from zds.member.models import Profile from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.database import PublishableContent from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import PublishableContentFactory diff --git a/zds/tutorialv2/tests/tests_views/tests_editcontenttags.py b/zds/tutorialv2/tests/tests_views/tests_editcontenttags.py index 943bf97361..8b40caca42 100644 --- a/zds/tutorialv2/tests/tests_views/tests_editcontenttags.py +++ b/zds/tutorialv2/tests/tests_views/tests_editcontenttags.py @@ -1,11 +1,11 @@ from unittest.mock import patch -from django.test import TestCase from django.urls import reverse from django.utils.html import escape from zds.forum.tests.factories import TagFactory from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.database import PublishableContent from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import PublishableContentFactory diff --git a/zds/tutorialv2/tests/tests_views/tests_editgoals.py b/zds/tutorialv2/tests/tests_views/tests_editgoals.py index a0d91a747f..21059ee2ea 100644 --- a/zds/tutorialv2/tests/tests_views/tests_editgoals.py +++ b/zds/tutorialv2/tests/tests_views/tests_editgoals.py @@ -1,9 +1,9 @@ from unittest.mock import patch -from django.test import TestCase from django.urls import reverse from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.tests.factories import GoalFactory, PublishableContentFactory diff --git a/zds/tutorialv2/tests/tests_views/tests_editintroductionview.py b/zds/tutorialv2/tests/tests_views/tests_editintroductionview.py index 540cf3bc75..cffaba6878 100644 --- a/zds/tutorialv2/tests/tests_views/tests_editintroductionview.py +++ b/zds/tutorialv2/tests/tests_views/tests_editintroductionview.py @@ -1,9 +1,9 @@ from datetime import datetime -from django.test import TestCase from django.urls import reverse from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import PublishableContentFactory diff --git a/zds/tutorialv2/tests/tests_views/tests_editlabels.py b/zds/tutorialv2/tests/tests_views/tests_editlabels.py index 08fe336983..979d284b78 100644 --- a/zds/tutorialv2/tests/tests_views/tests_editlabels.py +++ b/zds/tutorialv2/tests/tests_views/tests_editlabels.py @@ -1,10 +1,10 @@ from unittest.mock import patch -from django.test import TestCase from django.urls import reverse from django.utils.translation import gettext_lazy as _ from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.tests.factories import LabelFactory, PublishableContentFactory, PublishedContentFactory diff --git a/zds/tutorialv2/tests/tests_views/tests_editsubtitle.py b/zds/tutorialv2/tests/tests_views/tests_editsubtitle.py index e5b7030de5..6d1f3bc508 100644 --- a/zds/tutorialv2/tests/tests_views/tests_editsubtitle.py +++ b/zds/tutorialv2/tests/tests_views/tests_editsubtitle.py @@ -1,11 +1,11 @@ from datetime import datetime -from django.test import TestCase from django.urls import reverse from django.utils.html import escape from django.utils.translation import gettext_lazy as _ from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.database import PublishableContent from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import PublishableContentFactory diff --git a/zds/tutorialv2/tests/tests_views/tests_editthumbnailview.py b/zds/tutorialv2/tests/tests_views/tests_editthumbnailview.py index 388a10b29e..a62bc68a6f 100644 --- a/zds/tutorialv2/tests/tests_views/tests_editthumbnailview.py +++ b/zds/tutorialv2/tests/tests_views/tests_editthumbnailview.py @@ -2,11 +2,11 @@ from unittest.mock import patch from django.conf import settings -from django.test import TestCase from django.urls import reverse from django.utils.html import escape from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import PublishableContentFactory from zds.tutorialv2.views.thumbnail import EditThumbnailForm, EditThumbnailView diff --git a/zds/tutorialv2/tests/tests_views/tests_edittitle.py b/zds/tutorialv2/tests/tests_views/tests_edittitle.py index c9b3ae53f1..e7921e8576 100644 --- a/zds/tutorialv2/tests/tests_views/tests_edittitle.py +++ b/zds/tutorialv2/tests/tests_views/tests_edittitle.py @@ -1,11 +1,11 @@ from datetime import datetime -from django.test import TestCase from django.urls import reverse from django.utils.html import escape from django.utils.translation import gettext_lazy as _ from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.database import PublishableContent from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import PublishableContentFactory diff --git a/zds/tutorialv2/tests/tests_views/tests_events.py b/zds/tutorialv2/tests/tests_views/tests_events.py index 14693c8177..d39a7569bc 100644 --- a/zds/tutorialv2/tests/tests_views/tests_events.py +++ b/zds/tutorialv2/tests/tests_views/tests_events.py @@ -1,9 +1,9 @@ from django.conf import settings -from django.test import TestCase from django.urls import reverse from zds.gallery.tests.factories import UserGalleryFactory from zds.member.tests.factories import ProfileFactory, StaffProfileFactory, UserFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.database import PublishedContent from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import ( diff --git a/zds/tutorialv2/tests/tests_views/tests_masseditgoals.py b/zds/tutorialv2/tests/tests_views/tests_masseditgoals.py index 3d87c99fe1..da6be12324 100644 --- a/zds/tutorialv2/tests/tests_views/tests_masseditgoals.py +++ b/zds/tutorialv2/tests/tests_views/tests_masseditgoals.py @@ -1,7 +1,7 @@ -from django.test import TestCase from django.urls import reverse from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.goals import Goal from zds.tutorialv2.tests.factories import GoalFactory, PublishableContentFactory, PublishedContentFactory from zds.tutorialv2.views.goals import MassEditGoalsForm diff --git a/zds/tutorialv2/tests/tests_views/tests_published.py b/zds/tutorialv2/tests/tests_views/tests_published.py index 7e3fbe5d0e..bf3e8256f0 100644 --- a/zds/tutorialv2/tests/tests_views/tests_published.py +++ b/zds/tutorialv2/tests/tests_views/tests_published.py @@ -5,7 +5,6 @@ from django.conf import settings from django.contrib.auth.models import Group from django.core import mail -from django.test import TestCase from django.test.utils import override_settings from django.urls import reverse from django.utils.translation import gettext_lazy as _ @@ -16,6 +15,7 @@ from zds.member.tests.factories import ProfileFactory, StaffProfileFactory, UserFactory from zds.mp.models import PrivateTopic, is_privatetopic_unread from zds.notification.models import ContentReactionAnswerSubscription, Notification +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.database import ( ContentReaction, ContentRead, diff --git a/zds/tutorialv2/tests/tests_views/tests_redirect.py b/zds/tutorialv2/tests/tests_views/tests_redirect.py index 50c2a77d7c..c9298c2cf6 100644 --- a/zds/tutorialv2/tests/tests_views/tests_redirect.py +++ b/zds/tutorialv2/tests/tests_views/tests_redirect.py @@ -1,7 +1,7 @@ -from django.test import TestCase from django.urls import reverse from zds.member.tests.factories import ProfileFactory +from zds.tests.common import ZdsTestCase as TestCase class RedirectOldContentOfAuthorTest(TestCase): diff --git a/zds/tutorialv2/tests/tests_views/tests_removeauthor.py b/zds/tutorialv2/tests/tests_views/tests_removeauthor.py index a4fad600c9..cfe9de0fea 100644 --- a/zds/tutorialv2/tests/tests_views/tests_removeauthor.py +++ b/zds/tutorialv2/tests/tests_views/tests_removeauthor.py @@ -2,11 +2,11 @@ from django.conf import settings from django.contrib.auth.models import Group -from django.test import TestCase from django.urls import reverse from zds.gallery.models import UserGallery from zds.member.tests.factories import ProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.database import PublishableContent from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import PublishableContentFactory diff --git a/zds/tutorialv2/tests/tests_views/tests_removecontributor.py b/zds/tutorialv2/tests/tests_views/tests_removecontributor.py index 634ba90f70..cfd42cce5e 100644 --- a/zds/tutorialv2/tests/tests_views/tests_removecontributor.py +++ b/zds/tutorialv2/tests/tests_views/tests_removecontributor.py @@ -1,11 +1,11 @@ from unittest.mock import patch -from django.test import TestCase from django.urls import reverse from django.utils.html import escape from django.utils.translation import gettext_lazy as _ from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.database import ContentContribution from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import ContentContributionRoleFactory, PublishableContentFactory diff --git a/zds/tutorialv2/tests/tests_views/tests_removesuggestion.py b/zds/tutorialv2/tests/tests_views/tests_removesuggestion.py index fd7352b35a..0f0989bbfe 100644 --- a/zds/tutorialv2/tests/tests_views/tests_removesuggestion.py +++ b/zds/tutorialv2/tests/tests_views/tests_removesuggestion.py @@ -1,11 +1,11 @@ from unittest.mock import patch -from django.test import TestCase from django.urls import reverse from django.utils.html import escape from django.utils.translation import gettext_lazy as _ from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.database import ContentSuggestion from zds.tutorialv2.tests import TutorialTestMixin, override_for_contents from zds.tutorialv2.tests.factories import PublishableContentFactory diff --git a/zds/tutorialv2/tests/tests_views/tests_stats.py b/zds/tutorialv2/tests/tests_views/tests_stats.py index 9c5c164421..09e8182ebd 100644 --- a/zds/tutorialv2/tests/tests_views/tests_stats.py +++ b/zds/tutorialv2/tests/tests_views/tests_stats.py @@ -4,13 +4,13 @@ from unittest import mock from django.conf import settings -from django.test import TestCase from django.test.utils import override_settings from django.urls import reverse from django.utils.translation import gettext_lazy as _ from zds.gallery.tests.factories import UserGalleryFactory from zds.member.tests.factories import ProfileFactory, StaffProfileFactory +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.database import PublishedContent, Validation from zds.tutorialv2.publication_utils import publish_content from zds.tutorialv2.tests import TutorialTestMixin diff --git a/zds/tutorialv2/tests/tests_views/tests_viewcontentsbygoal.py b/zds/tutorialv2/tests/tests_views/tests_viewcontentsbygoal.py index 6d780ee215..30084530a8 100644 --- a/zds/tutorialv2/tests/tests_views/tests_viewcontentsbygoal.py +++ b/zds/tutorialv2/tests/tests_views/tests_viewcontentsbygoal.py @@ -1,7 +1,7 @@ from django.core.exceptions import ValidationError -from django.test import TestCase from django.urls import reverse +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.models.goals import Goal from zds.tutorialv2.tests.factories import GoalFactory, PublishedContentFactory diff --git a/zds/tutorialv2/tests/tests_views/tests_viewcontentsbylabel.py b/zds/tutorialv2/tests/tests_views/tests_viewcontentsbylabel.py index 6fc7890dc1..f1b742d49f 100644 --- a/zds/tutorialv2/tests/tests_views/tests_viewcontentsbylabel.py +++ b/zds/tutorialv2/tests/tests_views/tests_viewcontentsbylabel.py @@ -1,6 +1,6 @@ -from django.test import TestCase from django.urls import reverse +from zds.tests.common import ZdsTestCase as TestCase from zds.tutorialv2.tests.factories import LabelFactory, PublishedContentFactory From 128cd5e8c5c1d6f2771665440f69095157ad1c1d Mon Sep 17 00:00:00 2001 From: artragis Date: Sat, 27 Dec 2025 22:21:44 +0100 Subject: [PATCH 02/33] Fix invalid html in some forum pages --- templates/base.html | 2 +- templates/forum/last_topics.html | 2 +- templates/header.html | 4 ++-- templates/mathjax.html | 2 +- templates/member/sidebar.html | 2 +- templates/very_top_banner.html | 8 -------- templates/very_top_banner_style.html | 13 +++++++++++++ zds/forum/views.py | 8 ++++++-- 8 files changed, 25 insertions(+), 16 deletions(-) create mode 100644 templates/very_top_banner_style.html diff --git a/templates/base.html b/templates/base.html index 4f09b398d4..32940c6846 100644 --- a/templates/base.html +++ b/templates/base.html @@ -127,7 +127,7 @@ {% endwith %} {# OpenSearch plugin autodiscovery #} - + {% include "very_top_banner_style.html" %} {% block head_extra %}{% endblock %} diff --git a/templates/forum/last_topics.html b/templates/forum/last_topics.html index 4df8fe1b70..3d2333b31f 100644 --- a/templates/forum/last_topics.html +++ b/templates/forum/last_topics.html @@ -11,7 +11,7 @@ {% block breadcrumb %}
  • -
  • diff --git a/templates/header.html b/templates/header.html index be46f45c16..70c63114b0 100644 --- a/templates/header.html +++ b/templates/header.html @@ -226,10 +226,10 @@
    - +