From 9b2ece0681936b69915e5e8bc0a542c3e74ac8a4 Mon Sep 17 00:00:00 2001 From: Joe Schulte Date: Tue, 22 Oct 2024 22:02:41 -0400 Subject: [PATCH 1/3] adding playwright navbar tests --- .../playwright/shiny/{TODO => }/navbar/app.py | 4 ++ tests/playwright/shiny/navbar/test_navbar.py | 58 +++++++++++++++++++ 2 files changed, 62 insertions(+) rename tests/playwright/shiny/{TODO => }/navbar/app.py (94%) create mode 100644 tests/playwright/shiny/navbar/test_navbar.py diff --git a/tests/playwright/shiny/TODO/navbar/app.py b/tests/playwright/shiny/navbar/app.py similarity index 94% rename from tests/playwright/shiny/TODO/navbar/app.py rename to tests/playwright/shiny/navbar/app.py index d1a750dbc..8c989b623 100644 --- a/tests/playwright/shiny/TODO/navbar/app.py +++ b/tests/playwright/shiny/navbar/app.py @@ -47,6 +47,7 @@ def nav_items(prefix: str) -> list[NavSetArg]: sidebar=my_sidebar, title="page_navbar()", bg="#0062cc", + id="page_navbar", header=ui.markdown( "Testing app for `bslib::nav_spacer()` and `bslib::nav_item()` [#319](https://github.com/rstudio/bslib/pull/319)." ), @@ -55,17 +56,20 @@ def nav_items(prefix: str) -> list[NavSetArg]: ui.h4("navset_card_tab()"), ui.navset_card_tab( *nav_items("navset_card_tab()"), + id="navset_card_tab", sidebar=my_sidebar, ), ui.h4("navset_card_pill()"), ui.navset_card_pill( *nav_items("navset_card_pill()"), + id="navset_card_pill", sidebar=my_sidebar, ), # Do not include `navset_bar()` in example. Ok for testing only ui.h4("navset_bar()"), ui.navset_bar( *nav_items("navset_bar()"), + id="navset_bar", title="Test!", sidebar=my_sidebar, ), diff --git a/tests/playwright/shiny/navbar/test_navbar.py b/tests/playwright/shiny/navbar/test_navbar.py new file mode 100644 index 000000000..eccef7ed2 --- /dev/null +++ b/tests/playwright/shiny/navbar/test_navbar.py @@ -0,0 +1,58 @@ +import pytest +from examples.example_apps import reruns, reruns_delay +from playwright.sync_api import Page + +from shiny.playwright import controller +from shiny.run import ShinyAppProc + + +@pytest.mark.flaky(reruns=reruns, reruns_delay=reruns_delay) +def test_navbar(page: Page, local_app: ShinyAppProc) -> None: + values = ["a", "b", "c"] + + def verify_panel_updates(elem): + a_panel = elem.nav_panel("a") + b_panel = elem.nav_panel("b") + c_panel = elem.nav_panel("c") + a_panel.click() + a_panel.expect_active(True) + b_panel.expect_active(False) + c_panel.expect_active(False) + assert ( + f"{elem.id}(): tab a content\n" + in elem.get_loc_active_content().all_text_contents() + ) + b_panel.click() + a_panel.expect_active(False) + b_panel.expect_active(True) + c_panel.expect_active(False) + assert ( + f"{elem.id}(): tab b content\n" + in elem.get_loc_active_content().all_text_contents() + ) + c_panel.click() + a_panel.expect_active(False) + b_panel.expect_active(False) + c_panel.expect_active(True) + assert ( + f"{elem.id}(): tab c content\n" + in elem.get_loc_active_content().all_text_contents() + ) + + page.goto(local_app.url) + + nav_bar = controller.PageNavbar(page, "page_navbar") + nav_bar.expect_nav_values(values) + verify_panel_updates(nav_bar) + + navset_card_tab = controller.NavsetCardTab(page, "navset_card_tab") + navset_card_tab.expect_nav_values(values) + verify_panel_updates(navset_card_tab) + + navset_card_pill = controller.NavsetCardPill(page, "navset_card_pill") + navset_card_pill.expect_nav_values(values) + verify_panel_updates(navset_card_pill) + + navset_bar = controller.NavsetBar(page, "navset_bar") + navset_bar.expect_nav_values(values) + verify_panel_updates(navset_bar) From 316dbeb3c14bf4ea71dc5082f4dcf3b88d6519bc Mon Sep 17 00:00:00 2001 From: Joe Schulte Date: Tue, 22 Oct 2024 22:04:34 -0400 Subject: [PATCH 2/3] adding spacing to function in navbar tests --- tests/playwright/shiny/navbar/test_navbar.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/playwright/shiny/navbar/test_navbar.py b/tests/playwright/shiny/navbar/test_navbar.py index eccef7ed2..125c36690 100644 --- a/tests/playwright/shiny/navbar/test_navbar.py +++ b/tests/playwright/shiny/navbar/test_navbar.py @@ -14,6 +14,7 @@ def verify_panel_updates(elem): a_panel = elem.nav_panel("a") b_panel = elem.nav_panel("b") c_panel = elem.nav_panel("c") + a_panel.click() a_panel.expect_active(True) b_panel.expect_active(False) @@ -22,6 +23,7 @@ def verify_panel_updates(elem): f"{elem.id}(): tab a content\n" in elem.get_loc_active_content().all_text_contents() ) + b_panel.click() a_panel.expect_active(False) b_panel.expect_active(True) @@ -30,6 +32,7 @@ def verify_panel_updates(elem): f"{elem.id}(): tab b content\n" in elem.get_loc_active_content().all_text_contents() ) + c_panel.click() a_panel.expect_active(False) b_panel.expect_active(False) From 05703481097b573dd8c02f30593388487ef004d0 Mon Sep 17 00:00:00 2001 From: Joe Schulte Date: Wed, 23 Oct 2024 11:03:49 -0400 Subject: [PATCH 3/3] adding typing --- tests/playwright/shiny/navbar/test_navbar.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/playwright/shiny/navbar/test_navbar.py b/tests/playwright/shiny/navbar/test_navbar.py index 125c36690..7a766c1b1 100644 --- a/tests/playwright/shiny/navbar/test_navbar.py +++ b/tests/playwright/shiny/navbar/test_navbar.py @@ -1,3 +1,5 @@ +from typing import Union + import pytest from examples.example_apps import reruns, reruns_delay from playwright.sync_api import Page @@ -10,7 +12,14 @@ def test_navbar(page: Page, local_app: ShinyAppProc) -> None: values = ["a", "b", "c"] - def verify_panel_updates(elem): + def verify_panel_updates( + elem: Union[ + controller.PageNavbar, + controller.NavsetCardTab, + controller.NavsetCardPill, + controller.NavsetBar, + ] + ) -> None: a_panel = elem.nav_panel("a") b_panel = elem.nav_panel("b") c_panel = elem.nav_panel("c")