From fb3a6b1b3118743c132d7770fd2e3aad401ccd95 Mon Sep 17 00:00:00 2001 From: Sage Abdullah Date: Fri, 21 Jun 2024 12:41:39 +0100 Subject: [PATCH] Add tests for external-to-internal link converter when wagtail_serve URL is not registered --- wagtail/admin/tests/test_page_chooser.py | 85 ++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/wagtail/admin/tests/test_page_chooser.py b/wagtail/admin/tests/test_page_chooser.py index 836055699b..0469142708 100644 --- a/wagtail/admin/tests/test_page_chooser.py +++ b/wagtail/admin/tests/test_page_chooser.py @@ -724,6 +724,7 @@ class TestChooserExternalLink(WagtailTestUtils, TestCase): self.assertEqual( response_json["external"]["url"], "http://localhost/about?test=1" ) + self.assertEqual(response_json["internal"]["url"], "/about/") self.assertEqual(response_json["internal"]["id"], self.internal_page.pk) def test_convert_relative_external_link_to_internal_link(self): @@ -752,6 +753,7 @@ class TestChooserExternalLink(WagtailTestUtils, TestCase): self.assertEqual(response_json["result"]["url"], url) self.assertEqual(response_json["result"]["title"], title) + self.assertNotIn("id", response_json["result"]) @override_settings(WAGTAILADMIN_EXTERNAL_LINK_CONVERSION="exact") def test_no_confirm_external_to_internal_link_when_exact(self): @@ -767,6 +769,7 @@ class TestChooserExternalLink(WagtailTestUtils, TestCase): self.assertEqual(response_json["result"]["url"], url) self.assertEqual(response_json["result"]["title"], title) + self.assertNotIn("id", response_json["result"]) @override_settings(WAGTAILADMIN_EXTERNAL_LINK_CONVERSION="confirm") def test_convert_external_link_to_internal_link_with_confirm_setting(self): @@ -785,6 +788,88 @@ class TestChooserExternalLink(WagtailTestUtils, TestCase): self.assertEqual(response_json["step"], "confirm_external_to_internal") self.assertEqual(response_json["external"]["url"], url) + self.assertEqual(response_json["internal"]["url"], "/about/") + self.assertEqual(response_json["internal"]["id"], self.internal_page.pk) + + +@override_settings(ROOT_URLCONF="wagtail.test.headless_urls") +class TestChooserExternalLinkWithNoServePath(TestChooserExternalLink): + def test_convert_external_to_internal_link(self): + # Normally this should be converted without any confirmation, but since + # the serve path is not registered, the page route will resolve to None, + # so the user should be asked to confirm the conversion. + # As a result, this test is now identical to + # test_convert_external_link_to_internal_link_with_confirm_setting + response = self.post( + { + "external-link-chooser-url": "http://localhost/about/", + "external-link-chooser-link_text": "about", + } + ) + self.assertEqual(response.status_code, 200) + response_json = json.loads(response.content.decode()) + self.assertEqual(response_json["step"], "confirm_external_to_internal") + self.assertEqual(response_json["external"]["url"], "http://localhost/about/") + self.assertIsNone(response_json["internal"]["url"]) + self.assertEqual(response_json["internal"]["id"], self.internal_page.pk) + + def test_convert_external_link_with_query_parameters_to_internal_link(self): + response = self.post( + { + "external-link-chooser-url": "http://localhost/about?test=1", + "external-link-chooser-link_text": "about", + } + ) + self.assertEqual(response.status_code, 200) + response_json = json.loads(response.content.decode()) + + # Query parameters will get stripped, so the user should get asked to confirm the conversion + self.assertEqual(response_json["step"], "confirm_external_to_internal") + + self.assertEqual( + response_json["external"]["url"], "http://localhost/about?test=1" + ) + # The serve path is not registered, so the page route will resolve to None + self.assertIsNone(response_json["internal"]["url"]) + self.assertEqual(response_json["internal"]["id"], self.internal_page.pk) + + def test_convert_relative_external_link_to_internal_link(self): + response = self.post( + { + "external-link-chooser-url": "/about/", + "external-link-chooser-link_text": "about", + } + ) + self.assertEqual(response.status_code, 200) + response_json = json.loads(response.content.decode()) + # As with test_convert_external_to_internal_link, normally this doesn't + # require confirmation, but since the serve path is not registered, the + # full URL of the page is None, thus triggering the confirmation + self.assertEqual(response_json["step"], "confirm_external_to_internal") + self.assertEqual(response_json["external"]["url"], "/about/") + # The serve path is not registered, so the page route will resolve to None + self.assertIsNone(response_json["internal"]["url"]) + self.assertEqual(response_json["internal"]["id"], self.internal_page.pk) + + @override_settings(WAGTAILADMIN_EXTERNAL_LINK_CONVERSION="confirm") + def test_convert_external_link_to_internal_link_with_confirm_setting(self): + url = "http://localhost/about/" + response = self.post( + { + "external-link-chooser-url": url, + "external-link-chooser-link_text": "about", + } + ) + self.assertEqual(response.status_code, 200) + response_json = json.loads(response.content.decode()) + + # The serve path is not registered so the URL can never be identical, + # which means the setting doesn't matter in this case, but we keep the + # test case anyway to ensure that the confirmation step is triggered + self.assertEqual(response_json["step"], "confirm_external_to_internal") + + self.assertEqual(response_json["external"]["url"], url) + self.assertIsNone(response_json["internal"]["url"]) self.assertEqual(response_json["internal"]["id"], self.internal_page.pk)