Add tests for external-to-internal link converter when wagtail_serve URL is not registered

pull/12010/head
Sage Abdullah 2024-06-21 12:41:39 +01:00 zatwierdzone przez Matt Westcott
rodzic a7af760aa7
commit fb3a6b1b31
1 zmienionych plików z 85 dodań i 0 usunięć

Wyświetl plik

@ -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)