Fix page copy in Wagtail admin ignores `exclude_fields_in_copy`

pull/8297/head^2
John-Scott Atlakson 2022-02-27 12:30:14 -08:00 zatwierdzone przez Dan Braghis
rodzic 5c31aad368
commit 38f2e0b5b5
6 zmienionych plików z 82 dodań i 8 usunięć

Wyświetl plik

@ -59,6 +59,7 @@ Changelog
* Fix: Add missing `lang` attributes to `<html>` elements (James Ray)
* Fix: Avoid 503 server error when entering tags over 100chars and instead show a user facing validation error (Vu Pham, Khanh Hoang)
* Fix: Ensure `thumb_col_header_text` is correctly used by `ThumbnailMixin` within `ModelAdmin` as the column header label (Kyle J. Roux)
* Fix: page copy in Wagtail admin ignores `exclude_fields_in_copy` (John-Scott Atlakson)
2.16.2 (xx.xx.xxxx) - IN DEVELOPMENT

Wyświetl plik

@ -94,6 +94,7 @@ class LandingPage(Page):
* Add missing translation usage in Workflow templates (Anuja Verma, Saurabh Kumar)
* Avoid 503 server error when entering tags over 100chars and instead show a user facing validation error (Vu Pham, Khanh Hoang)
* Ensure `thumb_col_header_text` is correctly used by `ThumbnailMixin` within `ModelAdmin` as the column header label (Kyle J. Roux)
* Ensure page copy in Wagtail admin doesn't ignore `exclude_fields_in_copy` (John-Scott Atlakson)
## Upgrade considerations

Wyświetl plik

@ -103,12 +103,12 @@ class CopyPageAction:
def _copy_page(
self, page, to=None, update_attrs=None, exclude_fields=None, _mpnode_attrs=None
):
specific_page = page.specific
exclude_fields = (
page.default_exclude_fields_in_copy
+ page.exclude_fields_in_copy
specific_page.default_exclude_fields_in_copy
+ specific_page.exclude_fields_in_copy
+ (exclude_fields or [])
)
specific_page = page.specific
if self.keep_live:
base_update_attrs = {
"alias_of": None,

Wyświetl plik

@ -11,7 +11,13 @@ from wagtail import hooks
from wagtail.api.v2.tests.test_pages import TestPageDetail, TestPageListing
from wagtail.models import GroupPagePermission, Locale, Page, PageLogEntry
from wagtail.test.demosite import models
from wagtail.test.testapp.models import EventIndex, EventPage, SimplePage, StreamPage
from wagtail.test.testapp.models import (
EventIndex,
EventPage,
PageWithExcludedCopyField,
SimplePage,
StreamPage,
)
from wagtail.users.models import UserProfile
from .utils import AdminAPITestCase
@ -1132,6 +1138,20 @@ class TestCopyPageAction(AdminAPITestCase):
new_page = Page.objects.get(id=content["id"])
self.assertEqual(new_page.slug, "new-slug")
def test_copy_page_with_exclude_fields_in_copy(self):
response = self.get_response(21, {})
self.assertEqual(response.status_code, 201)
content = json.loads(response.content.decode("utf-8"))
original_page = PageWithExcludedCopyField.objects.get(pk=21)
new_page = PageWithExcludedCopyField.objects.get(id=content["id"])
self.assertEqual(new_page.content, original_page.content)
self.assertNotEqual(new_page.special_field, original_page.special_field)
self.assertEqual(
new_page.special_field, new_page._meta.get_field("special_field").default
)
def test_copy_page_destination(self):
response = self.get_response(3, {"destination_page_id": 3})

Wyświetl plik

@ -4,7 +4,7 @@ from django.test import TestCase
from django.urls import reverse
from wagtail.models import GroupPagePermission, Page
from wagtail.test.testapp.models import SimplePage
from wagtail.test.testapp.models import PageWithExcludedCopyField, SimplePage
from wagtail.test.utils import WagtailTestUtils
@ -153,6 +153,36 @@ class TestPageCopy(TestCase, WagtailTestUtils):
any(Page.find_problems()), "treebeard found consistency problems"
)
def test_page_with_exclude_fields_in_copy(self):
original_page = self.test_page.add_child(
instance=PageWithExcludedCopyField(
title="Page with exclude_fields_in_copy",
slug="page-with-exclude-fields-in-copy",
content="Copy me",
special_field="Don't copy me",
live=True,
has_unpublished_changes=False,
)
)
post_data = {
"new_title": f"{original_page.title} 2",
"new_slug": f"{original_page.slug}-2",
"new_parent_page": str(self.root_page.id),
"copy_subpages": False,
"publish_copies": False,
"alias": False,
}
self.client.post(
reverse("wagtailadmin_pages:copy", args=(original_page.id,)), post_data
)
# Get copy
page_copy = PageWithExcludedCopyField.objects.get(slug=post_data["new_slug"])
self.assertEqual(page_copy.content, original_page.content)
self.assertNotEqual(page_copy.special_field, original_page.special_field)
self.assertEqual(
page_copy.special_field, page_copy._meta.get_field("special_field").default
)
def test_page_copy_post_copy_subpages(self):
post_data = {
"new_title": "Hello world 2",

Wyświetl plik

@ -22,7 +22,7 @@
"fields": {
"title": "Welcome to the Wagtail test site!",
"draft_title": "Welcome to the Wagtail test site!",
"numchild": 9,
"numchild": 10,
"show_in_menus": false,
"live": true,
"depth": 2,
@ -594,7 +594,6 @@
"content": "<p>collect logs</p>"
}
},
{
"pk": 20,
"model": "wagtailcore.page",
@ -611,7 +610,30 @@
"slug": "does-not-exist"
}
},
{
"pk": 21,
"model": "wagtailcore.page",
"fields": {
"title": "This page has a field that shouldn't be copied",
"draft_title": "This page has a field that shouldn't be copied",
"numchild": 0,
"show_in_menus": true,
"live": true,
"depth": 3,
"content_type": ["tests", "pagewithexcludedcopyfield"],
"path": "000100010010",
"url_path": "/home/page-with-exclude-fields-in-copy/",
"slug": "page-with-exclude-fields-in-copy"
}
},
{
"pk": 21,
"model": "tests.pagewithexcludedcopyfield",
"fields": {
"content": "Copy me.",
"special_field": "Don't copy me."
}
},
{
"pk": 1,
"model": "wagtailcore.site",