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 import datetime
from io import BytesIO from io import BytesIO
from django.conf import settings
from django.contrib.admin.utils import quote from django.contrib.admin.utils import quote
from django.contrib.contenttypes.models import ContentType
from django.test import TestCase from django.test import TestCase
from django.urls import reverse 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 openpyxl import load_workbook
from wagtail.models import ModelLogEntry
from wagtail.test.testapp.models import FeatureCompleteToy, JSONStreamModel from wagtail.test.testapp.models import FeatureCompleteToy, JSONStreamModel
from wagtail.test.utils.template_tests import AdminTemplateTestUtils from wagtail.test.utils.template_tests import AdminTemplateTestUtils
from wagtail.test.utils.wagtail_tests import WagtailTestUtils from wagtail.test.utils.wagtail_tests import WagtailTestUtils
@ -702,6 +707,30 @@ class TestBreadcrumbs(AdminTemplateTestUtils, WagtailTestUtils, TestCase):
response = self.client.get(delete_url) response = self.client.get(delete_url)
self.assertBreadcrumbsNotRendered(response.content) 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): class TestLegacyPatterns(WagtailTestUtils, TestCase):
# RemovedInWagtail60Warning: legacy integer pk-based URLs will be removed # RemovedInWagtail60Warning: legacy integer pk-based URLs will be removed
@ -736,3 +765,100 @@ class TestLegacyPatterns(WagtailTestUtils, TestCase):
response = self.client.get(legacy_delete_url) response = self.client.get(legacy_delete_url)
self.assertEqual(delete_url, "/admin/streammodel/delete/1/") self.assertEqual(delete_url, "/admin/streammodel/delete/1/")
self.assertRedirects(response, delete_url, 301) 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)