From 1c12d9645703195135f1a145e52211266dbb95c9 Mon Sep 17 00:00:00 2001 From: "Storm B. Heg" Date: Thu, 20 Jul 2023 17:32:41 +0200 Subject: [PATCH] Add `WagtailTestUtils.get_soup()` method to get a `BeautifulSoup` object --- CHANGELOG.txt | 1 + docs/releases/5.2.md | 1 + wagtail/admin/tests/test_privacy.py | 15 ++++++++++----- wagtail/test/utils/wagtail_tests.py | 6 ++++++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 73e494f596bd..533cb79f88ad 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -14,6 +14,7 @@ Changelog * Maintenance: Remove unused WorkflowStatus view, urlpattern, and workflow-status.js (Storm Heg) * Maintenance: Add support for options/attrs in Telepath widgets so that attrs render on the created DOM (Storm Heg) * Maintenance: Update pre-commit hooks to be in sync with latest changes to Eslint & Prettier for client-side changes (Storm Heg) + * Maintenance: Add `WagtailTestUtils.get_soup()` method to get a `BeautifulSoup` object from an `HttpResponse` object (Storm Heg) 5.1.1 (xx.xx.xxxx) - IN DEVELOPMENT diff --git a/docs/releases/5.2.md b/docs/releases/5.2.md index e50041110409..19e215227d1a 100644 --- a/docs/releases/5.2.md +++ b/docs/releases/5.2.md @@ -34,6 +34,7 @@ depth: 1 * Remove unused WorkflowStatus view, urlpattern, and workflow-status.js (Storm Heg) * Add support for options/attrs in Telepath widgets so that attrs render on the created DOM (Storm Heg) * Update pre-commit hooks to be in sync with latest changes to Eslint & Prettier for client-side changes (Storm Heg) + * Add `WagtailTestUtils.get_soup()` method to get a `BeautifulSoup` object from an `HttpResponse` object (Storm Heg) ## Upgrade considerations - changes affecting all projects diff --git a/wagtail/admin/tests/test_privacy.py b/wagtail/admin/tests/test_privacy.py index e6bb5b63e52b..324428fe3dda 100644 --- a/wagtail/admin/tests/test_privacy.py +++ b/wagtail/admin/tests/test_privacy.py @@ -364,11 +364,16 @@ def test_explorer_private(self): # Check the response self.assertEqual(response.status_code, 200) - # Check the privacy indicator is private - self.assertContains(response, '
') - self.assertContains( - response, '
' - ) + soup = self.get_soup(response) + + # Check the private privacy indicator is visible + private_indicator = soup.select_one("[data-privacy-sidebar-private]") + # There should not be any classes applied + self.assertEqual(private_indicator["class"], []) + + # Privacy indicator should be hidden + public_indicator = soup.select_one("[data-privacy-sidebar-public].w-hidden") + self.assertIsNotNone(public_indicator) def test_explorer_private_child(self): """ diff --git a/wagtail/test/utils/wagtail_tests.py b/wagtail/test/utils/wagtail_tests.py index fc738f9a82f0..1d72b5596f5e 100644 --- a/wagtail/test/utils/wagtail_tests.py +++ b/wagtail/test/utils/wagtail_tests.py @@ -1,12 +1,18 @@ import warnings from contextlib import contextmanager +from bs4 import BeautifulSoup from django import VERSION as DJANGO_VERSION from django.contrib.auth import get_user_model +from django.http import HttpRequest from django.test.testcases import assert_and_parse_html class WagtailTestUtils: + @staticmethod + def get_soup(request: HttpRequest, parser="html.parser") -> BeautifulSoup: + return BeautifulSoup(request.content, parser) + @staticmethod def create_test_user(): """