Add tests for creating / publishing EventPage with a blank (required) from_date field

The fix to EventPageForm.clean addresses a logic bug that existed before the change to validation - if `date_from` was left blank, it would be omitted from `cleaned_data` and so retrieving it would raise an uncaught KeyError.
pull/12964/head
Matt Westcott 2025-02-27 19:24:07 +00:00 zatwierdzone przez Matt Westcott
rodzic a20c55a9bc
commit abb7a687e4
2 zmienionych plików z 102 dodań i 2 usunięć

Wyświetl plik

@ -572,6 +572,106 @@ class TestPageCreation(WagtailTestUtils, TestCase):
).exists()
)
def test_create_eventpage_post_with_blank_start_date(self):
"""
EventPage.date_from has null=True and blank=False; the latter is not enforced when
saving as draft, so an empty date_from should be allowed
"""
post_data = {
"title": "Event page",
"date_from": "",
"slug": "event-page",
"audience": "public",
"location": "London",
"cost": "Free",
"carousel_items-TOTAL_FORMS": 0,
"carousel_items-INITIAL_FORMS": 0,
"carousel_items-MIN_NUM_FORMS": 0,
"carousel_items-MAX_NUM_FORMS": 0,
"speakers-TOTAL_FORMS": 0,
"speakers-INITIAL_FORMS": 0,
"speakers-MIN_NUM_FORMS": 0,
"speakers-MAX_NUM_FORMS": 0,
"related_links-TOTAL_FORMS": 0,
"related_links-INITIAL_FORMS": 0,
"related_links-MIN_NUM_FORMS": 0,
"related_links-MAX_NUM_FORMS": 0,
"head_counts-TOTAL_FORMS": 0,
"head_counts-INITIAL_FORMS": 0,
"head_counts-MIN_NUM_FORMS": 0,
"head_counts-MAX_NUM_FORMS": 0,
}
response = self.client.post(
reverse(
"wagtailadmin_pages:add",
args=("tests", "eventpage", self.root_page.id),
),
post_data,
)
# Find the page and check it
page = Page.objects.get(
path__startswith=self.root_page.path, slug="event-page"
).specific
# Should be redirected to edit page
self.assertRedirects(
response, reverse("wagtailadmin_pages:edit", args=(page.id,))
)
self.assertEqual(page.date_from, None)
self.assertFalse(page.live)
def test_cannot_publish_eventpage_post_with_blank_start_date(self):
"""
EventPage.date_from has null=True and blank=False; the latter is enforced when
publishing, so an empty date_from should not be allowed
"""
post_data = {
"action-publish": "Publish",
"title": "Event page",
"date_from": "",
"slug": "event-page",
"audience": "public",
"location": "London",
"cost": "Free",
"carousel_items-TOTAL_FORMS": 0,
"carousel_items-INITIAL_FORMS": 0,
"carousel_items-MIN_NUM_FORMS": 0,
"carousel_items-MAX_NUM_FORMS": 0,
"speakers-TOTAL_FORMS": 0,
"speakers-INITIAL_FORMS": 0,
"speakers-MIN_NUM_FORMS": 0,
"speakers-MAX_NUM_FORMS": 0,
"related_links-TOTAL_FORMS": 0,
"related_links-INITIAL_FORMS": 0,
"related_links-MIN_NUM_FORMS": 0,
"related_links-MAX_NUM_FORMS": 0,
"head_counts-TOTAL_FORMS": 0,
"head_counts-INITIAL_FORMS": 0,
"head_counts-MIN_NUM_FORMS": 0,
"head_counts-MAX_NUM_FORMS": 0,
}
response = self.client.post(
reverse(
"wagtailadmin_pages:add",
args=("tests", "eventpage", self.root_page.id),
),
post_data,
)
self.assertEqual(response.status_code, 200)
# Check that a form error was raised
self.assertFormError(
response.context["form"], "date_from", "This field is required."
)
# Page should not have been created
self.assertFalse(
Page.objects.filter(
path__startswith=self.root_page.path, slug="event-page"
).exists()
)
def test_create_simplepage_scheduled(self):
go_live_at = timezone.now() + datetime.timedelta(days=1)
expire_at = timezone.now() + datetime.timedelta(days=2)

Wyświetl plik

@ -372,8 +372,8 @@ class EventPageForm(WagtailAdminPageForm):
cleaned_data = super().clean()
# Make sure that the event starts before it ends
start_date = cleaned_data["date_from"]
end_date = cleaned_data["date_to"]
start_date = cleaned_data.get("date_from")
end_date = cleaned_data.get("date_to")
if start_date and end_date and start_date > end_date:
raise ValidationError("The end date must be after the start date")