Add tests for UserObjectsInWorkflowModerationPanel query count

pull/11461/head
Sage Abdullah 2024-02-12 16:13:44 +00:00 zatwierdzone przez Matt Westcott
rodzic 2b9776faa4
commit 8870c9c52c
1 zmienionych plików z 81 dodań i 3 usunięć

Wyświetl plik

@ -1,13 +1,19 @@
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType
from django.test import TestCase
from django.urls import reverse
from django.utils import timezone
from freezegun import freeze_time
from wagtail.admin.views.home import LockedPagesPanel, RecentEditsPanel
from wagtail.admin.views.home import (
LockedPagesPanel,
RecentEditsPanel,
UserObjectsInWorkflowModerationPanel,
)
from wagtail.coreutils import get_dummy_request
from wagtail.models import Page, Workflow
from wagtail.test.testapp.models import SimplePage
from wagtail.models import GroupPagePermission, Page, Workflow, WorkflowContentType
from wagtail.test.testapp.models import FullFeaturedSnippet, SimplePage
from wagtail.test.utils import WagtailTestUtils
@ -224,3 +230,75 @@ class TestLockedPagesQueryCount(WagtailTestUtils, TestCase):
expected_titles = {"Ameristralia Day", "Steal underpants", "Saint Patrick"}
titles = {e.get_text(strip=True) for e in soup.select(".title-wrapper a")}
self.assertEqual(titles, expected_titles)
class UserObjectsInWorkflowModerationQueryCount(WagtailTestUtils, TestCase):
fixtures = ["test.json"]
def setUp(self):
self.superuser = self.create_superuser(username="admin", password="password")
self.bob = self.create_user(username="bob", password="password")
self.someone_else = self.create_user(
username="someoneelse", password="password"
)
editors = Group.objects.get(name="Editors")
editors.user_set.add(self.bob, self.someone_else)
workflow = Workflow.objects.first()
WorkflowContentType.objects.create(
workflow=workflow,
content_type=ContentType.objects.get_for_model(FullFeaturedSnippet),
)
GroupPagePermission.objects.create(
group=editors, page=Page.get_first_root_node(), permission_type="change"
)
editors.permissions.add(
Permission.objects.get(codename="change_fullfeaturedsnippet")
)
# Pages owned by bob, but workflow started by someone else
Page.objects.filter(id__in=[9, 12]).update(owner=self.bob)
for page in Page.objects.filter(id__in=[9, 12]).specific():
page.save_revision()
workflow.start(page, self.someone_else)
# Lock it to test the lock indicator
page.locked = True
page.locked_by = self.superuser
page.locked_at = timezone.now()
page.save()
# Page workflow started by bob
for page in Page.objects.filter(id__in=[4, 13]).specific():
page.save_revision()
workflow.start(page, self.bob)
# Snippet workflow started by bob
for i in range(1, 3):
obj = FullFeaturedSnippet.objects.create(text=f"Some obj {i}")
obj.save_revision()
workflow.start(obj, self.bob)
self.dummy_request = get_dummy_request()
self.dummy_request.user = self.bob
def test_panel_query_count(self):
panel = UserObjectsInWorkflowModerationPanel()
parent_context = {"request": self.dummy_request}
# Warm up the cache
html = panel.render_html(parent_context)
with self.assertNumQueries(6):
html = panel.render_html(parent_context)
soup = self.get_soup(html)
self.assertEqual(len(soup.select('svg use[href="#icon-lock"]')), 2)
expected_titles = [
"Some obj 2",
"Some obj 1",
"Saint Patrick (single event)",
"Christmas",
"Steal underpants",
"Ameristralia Day",
]
titles = [e.get_text(strip=True) for e in soup.select(".title-wrapper a")]
self.assertEqual(titles, expected_titles)