"""Admin view tests: the choose-parent redirect and a smoke test over the admin URLs served by our viewsets.""" from urllib.parse import parse_qs, urlparse import pytest from django.urls import reverse from tests.conftest import EventIndexFactory, GenericPageFactory def _parsed(response): url = urlparse(response["Location"]) return url.path, parse_qs(url.query) def test_choose_parent_no_valid_parent_renders_form(admin_client, db): response = admin_client.get(reverse("events:choose_parent")) assert response.status_code == 200 def test_choose_parent_single_parent_redirects_with_next(admin_client, event_index): response = admin_client.get(reverse("events:choose_parent")) assert response.status_code == 302 path, query = _parsed(response) assert path == reverse("wagtailadmin_pages:add", args=["events", "eventpage", event_index.pk]) assert query["next"] == [reverse("events:index")] def test_choose_parent_multiple_parents_shows_form_then_redirects(admin_client, event_index): # max_count=1 stops a second EventIndex being created through the admin, # but the view logic only cares how many instances exist. second_index = EventIndexFactory(parent=event_index.get_parent(), slug="events-2") response = admin_client.get(reverse("events:choose_parent")) assert response.status_code == 200 response = admin_client.post(reverse("events:choose_parent"), {"parent_page": second_index.pk}) assert response.status_code == 302 path, query = _parsed(response) assert path == reverse("wagtailadmin_pages:add", args=["events", "eventpage", second_index.pk]) assert query["next"] == [reverse("events:index")] @pytest.mark.parametrize( "url_name", [ "wagtailadmin_home", "events:index", "events:choose_parent", "associations:index", "news:index", "venues:index", "wagtailimages:index", "wagtailsnippets_events_eventorganizer:list", "association_chooser:choose", "event_organizer_chooser:choose", ], ) def test_admin_views_render(admin_client, db, url_name): response = admin_client.get(reverse(url_name)) assert response.status_code == 200 def test_page_edit_view_renders_with_custom_editor_assets(admin_client, home_page): """The page editor must load with our Draftail feature and editor JS wired in.""" page = GenericPageFactory(parent=home_page, slug="edit-me") response = admin_client.get(reverse("wagtailadmin_pages:edit", args=[page.pk])) assert response.status_code == 200 content = response.content.decode() assert "button-link" in content # dnscms.rich_text feature on the editor assert "js/page-editor.js" in content # insert_editor_js hook output