From e851717d9c4919a9a039cdcf71eb3202f8d89415 Mon Sep 17 00:00:00 2001 From: Sage Abdullah <sage.abdullah@torchbox.com> Date: Fri, 23 Aug 2024 13:06:36 +0100 Subject: [PATCH] Update Python tests to reflect the new PreviewController changes --- wagtail/admin/tests/pages/test_preview.py | 148 ++++++++++++--------- wagtail/snippets/tests/test_preview.py | 150 +++++++++++++--------- wagtail/snippets/tests/test_snippets.py | 6 +- 3 files changed, 178 insertions(+), 126 deletions(-) diff --git a/wagtail/admin/tests/pages/test_preview.py b/wagtail/admin/tests/pages/test_preview.py index e85ca48293..f8222f0d7b 100644 --- a/wagtail/admin/tests/pages/test_preview.py +++ b/wagtail/admin/tests/pages/test_preview.py @@ -446,31 +446,33 @@ class TestEnablePreview(WagtailTestUtils, TestCase): self.assertEqual(response.status_code, 200) - # Should show the preview panel - self.assertContains(response, 'data-side-panel="preview"') - self.assertContains(response, 'data-action="%s"' % preview_url) - # Should have the preview side panel toggle button soup = self.get_soup(response.content) + self.assertIsNotNone(soup.select_one('[data-side-panel="preview"]')) toggle_button = soup.find("button", {"data-side-panel-toggle": "preview"}) self.assertIsNotNone(toggle_button) self.assertEqual("w-tooltip w-kbd", toggle_button["data-controller"]) self.assertEqual("mod+p", toggle_button["data-w-kbd-key-value"]) + # Should set the preview URL value on the controller + controller = soup.select_one('[data-controller="w-preview"]') + self.assertIsNotNone(controller) + self.assertEqual(controller.get("data-w-preview-url-value"), preview_url) + # Should show the iframe - self.assertContains( - response, - '<iframe id="preview-iframe" loading="lazy" title="Preview" class="w-preview__iframe" data-preview-iframe aria-describedby="w-preview-error-banner">', - ) + iframe = controller.select_one("#w-preview-iframe") + self.assertIsNotNone(iframe) + self.assertEqual(iframe.get("data-w-preview-target"), "iframe") # Should show the new tab button with the default mode set - self.assertContains(response, f'href="{new_tab_url}" target="_blank"') + new_tab_button = controller.select_one('a[data-w-preview-target="newTab"]') + self.assertIsNotNone(new_tab_button) + self.assertEqual(new_tab_button["href"], new_tab_url) + self.assertEqual(new_tab_button["target"], "_blank") # Should not show the preview mode selection - self.assertNotContains( - response, - '<select id="id_preview_mode" name="preview_mode" class="w-preview__mode-select" data-preview-mode-select>', - ) + mode_select = controller.select_one('[data-w-preview-target="mode"]') + self.assertIsNone(mode_select) def test_show_preview_panel_on_create_with_multiple_modes(self): create_url = self.get_url_on_add("add", self.multiple) @@ -483,28 +485,34 @@ class TestEnablePreview(WagtailTestUtils, TestCase): # Should show the preview panel self.assertContains(response, 'data-side-panel-toggle="preview"') self.assertContains(response, 'data-side-panel="preview"') - self.assertContains(response, 'data-action="%s"' % preview_url) + + # Should set the preview URL value on the controller + soup = self.get_soup(response.content) + controller = soup.select_one('[data-controller="w-preview"]') + self.assertIsNotNone(controller) + self.assertEqual(controller.get("data-w-preview-url-value"), preview_url) # Should show the iframe - self.assertContains( - response, - '<iframe id="preview-iframe" loading="lazy" title="Preview" class="w-preview__iframe" data-preview-iframe aria-describedby="w-preview-error-banner">', - ) + iframe = controller.select_one("#w-preview-iframe") + self.assertIsNotNone(iframe) + self.assertEqual(iframe.get("data-w-preview-target"), "iframe") # Should show the new tab button with the default mode set and correctly quoted - self.assertContains(response, f'href="{new_tab_url}" target="_blank"') + new_tab_button = controller.select_one('a[data-w-preview-target="newTab"]') + self.assertIsNotNone(new_tab_button) + self.assertEqual(new_tab_button["href"], new_tab_url) + self.assertEqual(new_tab_button["target"], "_blank") - # should show the preview mode selection - self.assertContains( - response, - '<select id="id_preview_mode" name="preview_mode" class="w-preview__mode-select" data-preview-mode-select>', - ) - self.assertContains(response, '<option value="original">Original</option>') - - # Should respect the default_preview_mode - self.assertContains( - response, '<option value="alt#1" selected>Alternate</option>' - ) + # should show the preview mode selection with the default mode selected + mode_select = controller.select_one('[data-w-preview-target="mode"]') + self.assertIsNotNone(mode_select) + self.assertEqual(mode_select["id"], "id_preview_mode") + default_option = mode_select.select_one('option[value="alt#1"]') + self.assertIsNotNone(default_option) + self.assertIsNotNone(default_option.get("selected")) + other_option = mode_select.select_one('option[value="original"]') + self.assertIsNotNone(other_option) + self.assertIsNone(other_option.get("selected")) def test_show_preview_panel_on_edit_with_single_mode(self): edit_url = self.get_url_on_edit("edit", self.single) @@ -514,25 +522,33 @@ class TestEnablePreview(WagtailTestUtils, TestCase): self.assertEqual(response.status_code, 200) - # Should show the preview panel - self.assertContains(response, 'data-side-panel-toggle="preview"') - self.assertContains(response, 'data-side-panel="preview"') - self.assertContains(response, 'data-action="%s"' % preview_url) + # Should have the preview side panel toggle button + soup = self.get_soup(response.content) + self.assertIsNotNone(soup.select_one('[data-side-panel="preview"]')) + toggle_button = soup.find("button", {"data-side-panel-toggle": "preview"}) + self.assertIsNotNone(toggle_button) + self.assertEqual("w-tooltip w-kbd", toggle_button["data-controller"]) + self.assertEqual("mod+p", toggle_button["data-w-kbd-key-value"]) + + # Should set the preview URL value on the controller + controller = soup.select_one('[data-controller="w-preview"]') + self.assertIsNotNone(controller) + self.assertEqual(controller.get("data-w-preview-url-value"), preview_url) # Should show the iframe - self.assertContains( - response, - '<iframe id="preview-iframe" loading="lazy" title="Preview" class="w-preview__iframe" data-preview-iframe aria-describedby="w-preview-error-banner">', - ) + iframe = controller.select_one("#w-preview-iframe") + self.assertIsNotNone(iframe) + self.assertEqual(iframe.get("data-w-preview-target"), "iframe") # Should show the new tab button with the default mode set - self.assertContains(response, f'href="{new_tab_url}" target="_blank"') + new_tab_button = controller.select_one('a[data-w-preview-target="newTab"]') + self.assertIsNotNone(new_tab_button) + self.assertEqual(new_tab_button["href"], new_tab_url) + self.assertEqual(new_tab_button["target"], "_blank") # Should not show the preview mode selection - self.assertNotContains( - response, - '<select id="id_preview_mode" name="preview_mode" class="w-preview__mode-select" data-preview-mode-select>', - ) + mode_select = controller.select_one('[data-w-preview-target="mode"]') + self.assertIsNone(mode_select) def test_show_preview_panel_on_edit_with_multiple_modes(self): edit_url = self.get_url_on_edit("edit", self.multiple) @@ -545,28 +561,34 @@ class TestEnablePreview(WagtailTestUtils, TestCase): # Should show the preview panel self.assertContains(response, 'data-side-panel-toggle="preview"') self.assertContains(response, 'data-side-panel="preview"') - self.assertContains(response, 'data-action="%s"' % preview_url) + + # Should set the preview URL value on the controller + soup = self.get_soup(response.content) + controller = soup.select_one('[data-controller="w-preview"]') + self.assertIsNotNone(controller) + self.assertEqual(controller.get("data-w-preview-url-value"), preview_url) # Should show the iframe - self.assertContains( - response, - '<iframe id="preview-iframe" loading="lazy" title="Preview" class="w-preview__iframe" data-preview-iframe aria-describedby="w-preview-error-banner">', - ) + iframe = controller.select_one("#w-preview-iframe") + self.assertIsNotNone(iframe) + self.assertEqual(iframe.get("data-w-preview-target"), "iframe") # Should show the new tab button with the default mode set and correctly quoted - self.assertContains(response, f'href="{new_tab_url}" target="_blank"') + new_tab_button = controller.select_one('a[data-w-preview-target="newTab"]') + self.assertIsNotNone(new_tab_button) + self.assertEqual(new_tab_button["href"], new_tab_url) + self.assertEqual(new_tab_button["target"], "_blank") - # should show the preview mode selection - self.assertContains( - response, - '<select id="id_preview_mode" name="preview_mode" class="w-preview__mode-select" data-preview-mode-select>', - ) - self.assertContains(response, '<option value="original">Original</option>') - - # Should respect the default_preview_mode - self.assertContains( - response, '<option value="alt#1" selected>Alternate</option>' - ) + # should show the preview mode selection with the default mode selected + mode_select = controller.select_one('[data-w-preview-target="mode"]') + self.assertIsNotNone(mode_select) + self.assertEqual(mode_select["id"], "id_preview_mode") + default_option = mode_select.select_one('option[value="alt#1"]') + self.assertIsNotNone(default_option) + self.assertIsNotNone(default_option.get("selected")) + other_option = mode_select.select_one('option[value="original"]') + self.assertIsNotNone(other_option) + self.assertIsNone(other_option.get("selected")) def test_show_preview_on_revisions_list(self): latest_revision = self.single.save_revision(log_action=True) @@ -612,7 +634,8 @@ class TestDisablePreviewButton(WagtailTestUtils, TestCase): ) self.assertNotContains(response, 'data-side-panel-toggle="preview"') self.assertNotContains(response, 'data-side-panel="preview"') - self.assertNotContains(response, 'data-action="%s"' % preview_url) + self.assertNotContains(response, 'data-controller="w-preview"') + self.assertNotContains(response, preview_url) def test_disable_preview_on_edit(self): stream_page = StreamPage(title="stream page", body=[("text", "hello")]) @@ -629,7 +652,8 @@ class TestDisablePreviewButton(WagtailTestUtils, TestCase): ) self.assertNotContains(response, 'data-side-panel-toggle="preview"') self.assertNotContains(response, 'data-side-panel="preview"') - self.assertNotContains(response, 'data-action="%s"' % preview_url) + self.assertNotContains(response, 'data-controller="w-preview"') + self.assertNotContains(response, preview_url) def test_disable_preview_on_revisions_list(self): stream_page = StreamPage(title="stream page", body=[("text", "hello")]) diff --git a/wagtail/snippets/tests/test_preview.py b/wagtail/snippets/tests/test_preview.py index 8e9eb1fcf0..646531242c 100644 --- a/wagtail/snippets/tests/test_preview.py +++ b/wagtail/snippets/tests/test_preview.py @@ -296,31 +296,33 @@ class TestEnablePreview(WagtailTestUtils, TestCase): self.assertEqual(response.status_code, 200) - # Should show the preview panel - self.assertContains(response, 'data-side-panel="preview"') - self.assertContains(response, 'data-action="%s"' % preview_url) - # Should have the preview side panel toggle button soup = self.get_soup(response.content) + self.assertIsNotNone(soup.select_one('[data-side-panel="preview"]')) toggle_button = soup.find("button", {"data-side-panel-toggle": "preview"}) self.assertIsNotNone(toggle_button) self.assertEqual("w-tooltip w-kbd", toggle_button["data-controller"]) self.assertEqual("mod+p", toggle_button["data-w-kbd-key-value"]) + # Should set the preview URL value on the controller + controller = soup.select_one('[data-controller="w-preview"]') + self.assertIsNotNone(controller) + self.assertEqual(controller.get("data-w-preview-url-value"), preview_url) + # Should show the iframe - self.assertContains( - response, - '<iframe id="preview-iframe" loading="lazy" title="Preview" class="w-preview__iframe" data-preview-iframe aria-describedby="w-preview-error-banner">', - ) + iframe = controller.select_one("#w-preview-iframe") + self.assertIsNotNone(iframe) + self.assertEqual(iframe.get("data-w-preview-target"), "iframe") # Should show the new tab button with the default mode set - self.assertContains(response, f'href="{new_tab_url}" target="_blank"') + new_tab_button = controller.select_one('a[data-w-preview-target="newTab"]') + self.assertIsNotNone(new_tab_button) + self.assertEqual(new_tab_button["href"], new_tab_url) + self.assertEqual(new_tab_button["target"], "_blank") # Should not show the preview mode selection - self.assertNotContains( - response, - '<select id="id_preview_mode" name="preview_mode" class="w-preview__mode-select" data-preview-mode-select>', - ) + mode_select = controller.select_one('[data-w-preview-target="mode"]') + self.assertIsNone(mode_select) def test_show_preview_panel_on_create_with_multiple_modes(self): create_url = self.get_url(self.multiple, "add") @@ -333,28 +335,35 @@ class TestEnablePreview(WagtailTestUtils, TestCase): # Should show the preview panel self.assertContains(response, 'data-side-panel-toggle="preview"') self.assertContains(response, 'data-side-panel="preview"') - self.assertContains(response, 'data-action="%s"' % preview_url) + + # Should set the preview URL value on the controller + soup = self.get_soup(response.content) + controller = soup.select_one('[data-controller="w-preview"]') + self.assertIsNotNone(controller) + self.assertEqual(controller.get("data-w-preview-url-value"), preview_url) # Should show the iframe - self.assertContains( - response, - '<iframe id="preview-iframe" loading="lazy" title="Preview" class="w-preview__iframe" data-preview-iframe aria-describedby="w-preview-error-banner">', - ) + iframe = controller.select_one("#w-preview-iframe") + self.assertIsNotNone(iframe) + self.assertEqual(iframe.get("data-w-preview-target"), "iframe") # Should show the new tab button with the default mode set and correctly quoted - self.assertContains(response, f'href="{new_tab_url}" target="_blank"') + new_tab_button = controller.select_one('a[data-w-preview-target="newTab"]') + self.assertIsNotNone(new_tab_button) + self.assertEqual(new_tab_button["href"], new_tab_url) + self.assertEqual(new_tab_button["target"], "_blank") - # should show the preview mode selection - self.assertContains( - response, - '<select id="id_preview_mode" name="preview_mode" class="w-preview__mode-select" data-preview-mode-select>', - ) - self.assertContains(response, '<option value="">Normal</option>') - - # Should respect the default_preview_mode - self.assertContains( - response, '<option value="alt#1" selected>Alternate</option>' - ) + # should show the preview mode selection with the default mode selected + mode_select = controller.select_one('[data-w-preview-target="mode"]') + self.assertIsNotNone(mode_select) + self.assertEqual(mode_select["id"], "id_preview_mode") + default_option = mode_select.select_one('option[value="alt#1"]') + self.assertIsNotNone(default_option) + self.assertIsNotNone(default_option.get("selected")) + other_option = mode_select.select_one('option[value=""]') + self.assertIsNotNone(other_option) + self.assertEqual(other_option.text.strip(), "Normal") + self.assertIsNone(other_option.get("selected")) def test_show_preview_panel_on_edit_with_single_mode(self): edit_url = self.get_url(self.single, "edit", args=(self.single.pk,)) @@ -366,25 +375,33 @@ class TestEnablePreview(WagtailTestUtils, TestCase): self.assertEqual(response.status_code, 200) - # Should show the preview panel - self.assertContains(response, 'data-side-panel-toggle="preview"') - self.assertContains(response, 'data-side-panel="preview"') - self.assertContains(response, 'data-action="%s"' % preview_url) + # Should have the preview side panel toggle button + soup = self.get_soup(response.content) + self.assertIsNotNone(soup.select_one('[data-side-panel="preview"]')) + toggle_button = soup.find("button", {"data-side-panel-toggle": "preview"}) + self.assertIsNotNone(toggle_button) + self.assertEqual("w-tooltip w-kbd", toggle_button["data-controller"]) + self.assertEqual("mod+p", toggle_button["data-w-kbd-key-value"]) + + # Should set the preview URL value on the controller + controller = soup.select_one('[data-controller="w-preview"]') + self.assertIsNotNone(controller) + self.assertEqual(controller.get("data-w-preview-url-value"), preview_url) # Should show the iframe - self.assertContains( - response, - '<iframe id="preview-iframe" loading="lazy" title="Preview" class="preview-panel__iframe" data-preview-iframe aria-describedby="w-preview-error-banner">', - ) + iframe = controller.select_one("#w-preview-iframe") + self.assertIsNotNone(iframe) + self.assertEqual(iframe.get("data-w-preview-target"), "iframe") # Should show the new tab button with the default mode set - self.assertContains(response, f'href="{new_tab_url}" target="_blank"') + new_tab_button = controller.select_one('a[data-w-preview-target="newTab"]') + self.assertIsNotNone(new_tab_button) + self.assertEqual(new_tab_button["href"], new_tab_url) + self.assertEqual(new_tab_button["target"], "_blank") # Should not show the preview mode selection - self.assertNotContains( - response, - '<select id="id_preview_mode" name="preview_mode" class="w-preview__mode-select" data-preview-mode-select>', - ) + mode_select = controller.select_one('[data-w-preview-target="mode"]') + self.assertIsNone(mode_select) def test_show_preview_panel_on_edit_with_multiple_modes(self): edit_url = self.get_url(self.multiple, "edit", args=(self.multiple.pk,)) @@ -399,28 +416,35 @@ class TestEnablePreview(WagtailTestUtils, TestCase): # Should show the preview panel self.assertContains(response, 'data-side-panel-toggle="preview"') self.assertContains(response, 'data-side-panel="preview"') - self.assertContains(response, 'data-action="%s"' % preview_url) + + # Should set the preview URL value on the controller + soup = self.get_soup(response.content) + controller = soup.select_one('[data-controller="w-preview"]') + self.assertIsNotNone(controller) + self.assertEqual(controller.get("data-w-preview-url-value"), preview_url) # Should show the iframe - self.assertContains( - response, - '<iframe id="preview-iframe" loading="lazy" title="Preview" class="w-preview__iframe" data-preview-iframe aria-describedby="w-preview-error-banner">', - ) + iframe = controller.select_one("#w-preview-iframe") + self.assertIsNotNone(iframe) + self.assertEqual(iframe.get("data-w-preview-target"), "iframe") # Should show the new tab button with the default mode set and correctly quoted - self.assertContains(response, f'href="{new_tab_url}" target="_blank"') + new_tab_button = controller.select_one('a[data-w-preview-target="newTab"]') + self.assertIsNotNone(new_tab_button) + self.assertEqual(new_tab_button["href"], new_tab_url) + self.assertEqual(new_tab_button["target"], "_blank") - # should show the preview mode selection - self.assertContains( - response, - '<select id="id_preview_mode" name="preview_mode" class="w-preview__mode-select" data-preview-mode-select>', - ) - self.assertContains(response, '<option value="">Normal</option>') - - # Should respect the default_preview_mode - self.assertContains( - response, '<option value="alt#1" selected>Alternate</option>' - ) + # should show the preview mode selection with the default mode selected + mode_select = controller.select_one('[data-w-preview-target="mode"]') + self.assertIsNotNone(mode_select) + self.assertEqual(mode_select["id"], "id_preview_mode") + default_option = mode_select.select_one('option[value="alt#1"]') + self.assertIsNotNone(default_option) + self.assertIsNotNone(default_option.get("selected")) + other_option = mode_select.select_one('option[value=""]') + self.assertIsNotNone(other_option) + self.assertEqual(other_option.text.strip(), "Normal") + self.assertIsNone(other_option.get("selected")) def test_show_preview_on_revisions_list(self): latest_revision = self.multiple.save_revision(log_action=True) @@ -459,7 +483,8 @@ class TestDisablePreviewWithEmptyModes(WagtailTestUtils, TestCase): preview_url = self.get_url("preview_on_add") self.assertNotContains(response, 'data-side-panel-toggle="preview"') self.assertNotContains(response, 'data-side-panel="preview"') - self.assertNotContains(response, 'data-action="%s"' % preview_url) + self.assertNotContains(response, 'data-controller="w-preview"') + self.assertNotContains(response, preview_url) def test_disable_preview_on_edit(self): response = self.client.get(self.get_url("edit", args=(self.snippet.pk,))) @@ -468,7 +493,8 @@ class TestDisablePreviewWithEmptyModes(WagtailTestUtils, TestCase): preview_url = self.get_url("preview_on_edit", args=(self.snippet.pk,)) self.assertNotContains(response, 'data-side-panel-toggle="preview"') self.assertNotContains(response, 'data-side-panel="preview"') - self.assertNotContains(response, 'data-action="%s"' % preview_url) + self.assertNotContains(response, 'data-controller="w-preview"') + self.assertNotContains(response, preview_url) def test_disable_preview_on_revisions_list(self): latest_revision = self.snippet.save_revision(log_action=True) diff --git a/wagtail/snippets/tests/test_snippets.py b/wagtail/snippets/tests/test_snippets.py index ba52eac43d..d7953ee232 100644 --- a/wagtail/snippets/tests/test_snippets.py +++ b/wagtail/snippets/tests/test_snippets.py @@ -4502,10 +4502,12 @@ class TestSnippetRevisions(WagtailTestUtils, TestCase): # Should show the preview panel preview_url = self.get_url("preview_on_edit") self.assertContains(response, 'data-side-panel="preview"') - self.assertContains(response, f'data-action="{preview_url}"') + soup = self.get_soup(response.content) + controller = soup.select_one('[data-controller="w-preview"]') + self.assertIsNotNone(controller) + self.assertEqual(controller.get("data-w-preview-url-value"), preview_url) # Should have the preview side panel toggle button - soup = self.get_soup(response.content) toggle_button = soup.find("button", {"data-side-panel-toggle": "preview"}) self.assertIsNotNone(toggle_button) self.assertEqual("w-tooltip w-kbd", toggle_button["data-controller"])