Add tests for ModelViewSet's history view

pull/10919/head
Sage Abdullah 2023-09-19 10:59:32 +01:00
rodzic d7e32c79cc
commit d73f48a735
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: EB1A33CC51CC0217
1 zmienionych plików z 126 dodań i 0 usunięć

Wyświetl plik

@ -1,11 +1,16 @@
import datetime
from io import BytesIO
from django.conf import settings
from django.contrib.admin.utils import quote
from django.contrib.contenttypes.models import ContentType
from django.test import TestCase
from django.urls import reverse
from django.utils.formats import date_format
from django.utils.timezone import make_aware
from openpyxl import load_workbook
from wagtail.models import ModelLogEntry
from wagtail.test.testapp.models import FeatureCompleteToy, JSONStreamModel
from wagtail.test.utils.template_tests import AdminTemplateTestUtils
from wagtail.test.utils.wagtail_tests import WagtailTestUtils
@ -702,6 +707,30 @@ class TestBreadcrumbs(AdminTemplateTestUtils, WagtailTestUtils, TestCase):
response = self.client.get(delete_url)
self.assertBreadcrumbsNotRendered(response.content)
def test_history_view(self):
history_url = reverse(
"feature_complete_toy:history",
args=(quote(self.object.pk),),
)
response = self.client.get(history_url)
items = [
{
"url": reverse("feature_complete_toy:index"),
"label": "Feature complete toys",
},
{
"url": reverse(
"feature_complete_toy:edit", args=(quote(self.object.pk),)
),
"label": str(self.object),
},
{
"url": "",
"label": "History",
},
]
self.assertBreadcrumbsItemsRendered(items, response.content)
class TestLegacyPatterns(WagtailTestUtils, TestCase):
# RemovedInWagtail60Warning: legacy integer pk-based URLs will be removed
@ -736,3 +765,100 @@ class TestLegacyPatterns(WagtailTestUtils, TestCase):
response = self.client.get(legacy_delete_url)
self.assertEqual(delete_url, "/admin/streammodel/delete/1/")
self.assertRedirects(response, delete_url, 301)
class TestHistoryView(WagtailTestUtils, TestCase):
@classmethod
def setUpTestData(cls):
cls.user = cls.create_test_user()
cls.object = FeatureCompleteToy.objects.create(name="Buzz")
cls.url = reverse(
"feature_complete_toy:history",
args=(quote(cls.object.pk),),
)
content_type = ContentType.objects.get_for_model(FeatureCompleteToy)
cls.timestamp_1 = datetime.datetime(2021, 9, 30, 10, 1, 0)
cls.timestamp_2 = datetime.datetime(2022, 5, 10, 12, 34, 0)
if settings.USE_TZ:
cls.timestamp_1 = make_aware(cls.timestamp_1)
cls.timestamp_2 = make_aware(cls.timestamp_2)
ModelLogEntry.objects.create(
content_type=content_type,
label="Test Buzz",
action="wagtail.create",
user=cls.user,
timestamp=cls.timestamp_1,
object_id=cls.object.pk,
)
ModelLogEntry.objects.create(
content_type=content_type,
label="Test Buzz Updated",
action="wagtail.edit",
user=cls.user,
timestamp=cls.timestamp_2,
object_id=cls.object.pk,
)
def setUp(self):
self.login(self.user)
def test_simple(self):
expected = (
("Edited", str(self.user), date_format(self.timestamp_2, "c")),
("Created", str(self.user), date_format(self.timestamp_1, "c")),
)
response = self.client.get(self.url)
soup = self.get_soup(response.content)
rows = soup.select("tbody tr")
self.assertEqual(response.status_code, 200)
self.assertEqual(len(rows), 2)
rendered_rows = []
for row in rows:
cells = []
tds = row.select("td")
self.assertEqual(len(tds), 3)
cells.append(tds[0].text.strip())
cells.append(tds[1].text.strip())
cells.append(tds[2].select_one("time").attrs.get("datetime"))
rendered_rows.append(cells)
for rendered_row, expected_row in zip(rendered_rows, expected):
self.assertSequenceEqual(rendered_row, expected_row)
def test_filters(self):
response = self.client.get(self.url, {"action": "wagtail.edit"})
soup = self.get_soup(response.content)
rows = soup.select("tbody tr")
self.assertEqual(response.status_code, 200)
self.assertEqual(len(rows), 1)
self.assertEqual(rows[0].select_one("td").text.strip(), "Edited")
response = self.client.get(self.url, {"action": "wagtail.create"})
soup = self.get_soup(response.content)
rows = soup.select("tbody tr")
heading = soup.select_one("h2")
self.assertEqual(response.status_code, 200)
self.assertEqual(heading.text.strip(), "There is 1 match")
self.assertEqual(len(rows), 1)
self.assertEqual(rows[0].select_one("td").text.strip(), "Created")
def test_empty(self):
ModelLogEntry.objects.all().delete()
response = self.client.get(self.url)
soup = self.get_soup(response.content)
results = soup.select_one("#listing-results")
table = soup.select_one("table")
self.assertEqual(response.status_code, 200)
self.assertIsNotNone(results)
self.assertEqual(results.text.strip(), "No log entries found.")
self.assertIsNone(table)
def test_edit_view_links_to_history_view(self):
edit_url = reverse("feature_complete_toy:edit", args=(quote(self.object.pk),))
response = self.client.get(edit_url)
soup = self.get_soup(response.content)
header = soup.select_one(".w-slim-header")
history_link = header.find("a", attrs={"href": self.url})
self.assertIsNotNone(history_link)