Make title and slug optional in page previews

pull/12987/head
Sage Abdullah 2025-03-19 18:05:54 +07:00 zatwierdzone przez Matt Westcott
rodzic 9eac93a565
commit d3341e8fa7
2 zmienionych plików z 103 dodań i 2 usunięć

Wyświetl plik

@ -173,7 +173,10 @@ class TestPreview(WagtailTestUtils, TestCase):
)
self.assertNotIn(preview_session_key, self.client.session)
response = self.client.post(preview_url, {**self.post_data, "title": ""})
response = self.client.post(
preview_url,
{**self.post_data, "date_from": "2025-02-31"},
)
# Check the JSON response
self.assertEqual(response.status_code, 200)
@ -311,6 +314,51 @@ class TestPreview(WagtailTestUtils, TestCase):
self.assertTemplateUsed(response, "tests/event_page.html")
self.assertContains(response, "Bare minimum")
def test_preview_on_create_without_title_and_slug(self):
preview_url = reverse(
"wagtailadmin_pages:preview_on_add",
args=("tests", "eventpage", self.home_page.id),
)
preview_session_key = "wagtail-preview-tests-eventpage-{}".format(
self.home_page.id
)
self.assertNotIn(preview_session_key, self.client.session)
response = self.client.post(
preview_url,
{
"carousel_items-TOTAL_FORMS": 0,
"carousel_items-INITIAL_FORMS": 0,
"speakers-TOTAL_FORMS": 0,
"speakers-INITIAL_FORMS": 0,
"related_links-TOTAL_FORMS": 0,
"related_links-INITIAL_FORMS": 0,
"head_counts-TOTAL_FORMS": 0,
"head_counts-INITIAL_FORMS": 0,
},
)
# Check the JSON response
self.assertEqual(response.status_code, 200)
self.assertJSONEqual(
response.content.decode(),
{"is_valid": True, "is_available": True},
)
# Check the user can refresh the preview
preview_session_key = "wagtail-preview-tests-eventpage-{}".format(
self.home_page.id
)
self.assertIn(preview_session_key, self.client.session)
response = self.client.get(preview_url)
# Check the HTML response
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "tests/event_page.html")
self.assertContains(response, "Placeholder title")
def test_preview_on_edit_with_m2m_field(self):
preview_url = reverse(
"wagtailadmin_pages:preview_on_edit", args=(self.event_page.id,)
@ -381,7 +429,10 @@ class TestPreview(WagtailTestUtils, TestCase):
)
# Send an invalid update request
response = self.client.post(preview_url, {**self.post_data, "title": ""})
response = self.client.post(
preview_url,
{**self.post_data, "date_to": "1234-56-78"},
)
self.assertEqual(response.status_code, 200)
self.assertJSONEqual(
response.content.decode(),
@ -440,6 +491,43 @@ class TestPreview(WagtailTestUtils, TestCase):
self.assertTemplateUsed(response, "tests/event_page.html")
self.assertContains(response, "Bare minimum")
def test_preview_on_edit_without_title_and_slug(self):
preview_url = reverse(
"wagtailadmin_pages:preview_on_edit", args=(self.event_page.id,)
)
response = self.client.post(
preview_url,
{
"carousel_items-TOTAL_FORMS": 0,
"carousel_items-INITIAL_FORMS": 0,
"speakers-TOTAL_FORMS": 0,
"speakers-INITIAL_FORMS": 0,
"related_links-TOTAL_FORMS": 0,
"related_links-INITIAL_FORMS": 0,
"head_counts-TOTAL_FORMS": 0,
"head_counts-INITIAL_FORMS": 0,
},
)
# Check the JSON response
self.assertEqual(response.status_code, 200)
self.assertJSONEqual(
response.content.decode(),
{"is_valid": True, "is_available": True},
)
# Check the user can refresh the preview
preview_session_key = f"wagtail-preview-{self.event_page.id}"
self.assertIn(preview_session_key, self.client.session)
response = self.client.get(preview_url)
# Check the HTML response
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, "tests/event_page.html")
self.assertContains(response, "Placeholder title")
def test_preview_on_edit_expiry(self):
initial_datetime = timezone.now()
expiry_datetime = initial_datetime + datetime.timedelta(

Wyświetl plik

@ -1,7 +1,10 @@
import uuid
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import PermissionDenied
from django.http import Http404
from django.shortcuts import get_object_or_404
from django.utils.translation import gettext
from wagtail.admin.views.generic.preview import PreviewOnEdit as GenericPreviewOnEdit
from wagtail.models import Page
@ -43,6 +46,16 @@ class PreviewOnEdit(GenericPreviewOnEdit):
for_user=self.request.user,
)
query_dict = query_dict.copy()
if not query_dict.get("title"):
query_dict["title"] = gettext("Placeholder title")
# Generate a random slug if one is not provided, use UUID to ensure
# uniqueness without needing to hit the database
if not query_dict.get("slug"):
query_dict["slug"] = str(uuid.uuid4())
return form_class(
query_dict,
instance=self.object,