kopia lustrzana https://github.com/wagtail/wagtail
Add tests for ModelViewSet's history view
rodzic
d7e32c79cc
commit
d73f48a735
|
@ -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)
|
||||
|
|
Ładowanie…
Reference in New Issue