Skip to content

Commit c8d6cf9

Browse files
committed
Turn navigate_to_page into a decorator
1 parent 2a1fa06 commit c8d6cf9

File tree

3 files changed

+20
-12
lines changed

3 files changed

+20
-12
lines changed

pyproject.toml

+2
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ extra-dependencies = [
9595
"tblib",
9696
"servestatic",
9797
"django-bootstrap5",
98+
"decorator",
99+
98100
]
99101
matrix-name-format = "{variable}-{value}"
100102
# TODO: Remove the `retries` value once we fix flakiness of `test_sync_form_events`

tests/test_app/tests/test_components.py

+5-8
Original file line numberDiff line numberDiff line change
@@ -585,9 +585,8 @@ def test_offline_components(self):
585585

586586

587587
class FormTests(PlaywrightTestCase):
588+
@navigate_to_page("/form/")
588589
def test_basic_form(self):
589-
navigate_to_page(self, "/form/")
590-
591590
try:
592591
from test_app.models import TodoItem
593592

@@ -682,9 +681,8 @@ def test_basic_form(self):
682681
# Make sure no errors remain
683682
assert len(self.page.query_selector_all(".errorlist")) == 0
684683

684+
@navigate_to_page("/form/bootstrap/")
685685
def test_bootstrap_form(self):
686-
navigate_to_page(self, "/form/bootstrap/")
687-
688686
try:
689687
from test_app.models import TodoItem
690688

@@ -780,9 +778,8 @@ def test_bootstrap_form(self):
780778
# Make sure no errors remain
781779
assert len(self.page.query_selector_all(".invalid-feedback")) == 0
782780

781+
@navigate_to_page("/form/model/")
783782
def test_model_form(self):
784-
navigate_to_page(self, "/form/model/")
785-
786783
uuid = uuid4().hex
787784
self.page.wait_for_selector("form")
788785

@@ -816,8 +813,8 @@ def test_model_form(self):
816813
finally:
817814
os.environ.pop("DJANGO_ALLOW_ASYNC_UNSAFE")
818815

816+
@navigate_to_page("/form/sync_event/")
819817
def test_sync_form_events(self):
820-
navigate_to_page(self, "/form/sync_event/")
821818
self.page.wait_for_selector("form")
822819

823820
# Check initial state
@@ -846,8 +843,8 @@ def test_sync_form_events(self):
846843
self.page.wait_for_selector("#receive_data[data-value='true']")
847844
self.page.wait_for_selector("#change[data-value='true']")
848845

846+
@navigate_to_page("/form/async_event/")
849847
def test_async_form_events(self):
850-
navigate_to_page(self, "/form/async_event/")
851848
self.page.wait_for_selector("form")
852849

853850
# Check initial state

tests/test_app/tests/utils.py

+13-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import os
44
import sys
55
from functools import partial
6+
from typing import Callable
67

8+
import decorator
79
from channels.testing import ChannelsLiveServerTestCase
810
from channels.testing.live import make_application
911
from django.core.exceptions import ImproperlyConfigured
@@ -89,7 +91,14 @@ def _post_teardown(self):
8991
occurring due to a bug within `ChannelsLiveServerTestCase`."""
9092

9193

92-
def navigate_to_page(self: PlaywrightTestCase, path: str):
93-
"""Redirect the page's URL to the given link, if the page is not already there."""
94-
if self.page.url != path:
95-
self.page.goto(f"http://{self.host}:{self._port}/{path.lstrip('/')}")
94+
def navigate_to_page(path: str):
95+
def _decorator(func: Callable):
96+
@decorator.decorator
97+
def _wrapper(func: Callable, self: PlaywrightTestCase, *args, **kwargs):
98+
if self.page.url != path:
99+
self.page.goto(f"http://{self.host}:{self._port}/{path.lstrip('/')}")
100+
return func(self, *args, **kwargs)
101+
102+
return _wrapper(func)
103+
104+
return _decorator

0 commit comments

Comments
 (0)