Skip to content

Commit e730eea

Browse files
committed
Add tests for navigate component
1 parent cac297b commit e730eea

File tree

2 files changed

+56
-3
lines changed

2 files changed

+56
-3
lines changed

docs/src/reference/components.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
::: reactpy_router
22

33
options:
4-
members: ["route", "link"]
4+
members: ["route", "link", "navigate"]

tests/test_router.py

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
from typing import Any
33

44
from playwright.async_api._generated import Browser, Page
5-
from reactpy import Ref, component, html, use_location
5+
from reactpy import Ref, component, html, use_location, use_state
66
from reactpy.testing import DisplayFixture
77

8-
from reactpy_router import browser_router, link, route, use_params, use_search_params
8+
from reactpy_router import browser_router, link, navigate, route, use_params, use_search_params
99

1010
GITHUB_ACTIONS = os.getenv("GITHUB_ACTIONS", "").lower() == "true"
1111
CLICK_DELAY = 350 if GITHUB_ACTIONS else 25 # Delay in miliseconds.
@@ -295,3 +295,56 @@ def sample():
295295
browser_context = browser.contexts[0]
296296
new_page: Page = await browser_context.wait_for_event("page")
297297
await new_page.wait_for_selector("#a")
298+
299+
300+
async def test_navigate_component(display: DisplayFixture):
301+
@component
302+
def navigate_btn():
303+
nav_url, set_nav_url = use_state("")
304+
305+
return html.button(
306+
{"onClick": lambda _: set_nav_url("/a")},
307+
navigate(nav_url) if nav_url else "Click to navigate",
308+
)
309+
310+
@component
311+
def sample():
312+
return browser_router(
313+
route("/", navigate_btn()),
314+
route("/a", html.h1({"id": "a"}, "A")),
315+
)
316+
317+
await display.show(sample)
318+
_button = await display.page.wait_for_selector("button")
319+
await _button.click(delay=CLICK_DELAY)
320+
await display.page.wait_for_selector("#a")
321+
await display.page.go_back()
322+
await display.page.wait_for_selector("button")
323+
324+
325+
async def test_navigate_component_replace(display: DisplayFixture):
326+
@component
327+
def navigate_btn(to: str, replace: bool = False):
328+
nav_url, set_nav_url = use_state("")
329+
330+
return html.button(
331+
{"onClick": lambda _: set_nav_url(to), "id": f"nav-{to.replace('/', '')}"},
332+
navigate(nav_url, replace) if nav_url else f"Navigate to {to}",
333+
)
334+
335+
@component
336+
def sample():
337+
return browser_router(
338+
route("/", navigate_btn("/a")),
339+
route("/a", navigate_btn("/b", replace=True)),
340+
route("/b", html.h1({"id": "b"}, "B")),
341+
)
342+
343+
await display.show(sample)
344+
_button = await display.page.wait_for_selector("#nav-a")
345+
await _button.click(delay=CLICK_DELAY)
346+
_button = await display.page.wait_for_selector("#nav-b")
347+
await _button.click(delay=CLICK_DELAY)
348+
await display.page.wait_for_selector("#b")
349+
await display.page.go_back()
350+
await display.page.wait_for_selector("#nav-a")

0 commit comments

Comments
 (0)