Skip to content

Commit 86726df

Browse files
committed
add test for exclusion
1 parent 5e9d4f4 commit 86726df

File tree

2 files changed

+77
-13
lines changed

2 files changed

+77
-13
lines changed

tests/playwright/ai_generated_apps/bookmark_tests/bookmark_exclusion/app-core.py

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,69 @@
11
from starlette.requests import Request
22

3-
from shiny import App, Inputs, Outputs, Session, module, ui
3+
from shiny import App, Inputs, Outputs, Session, module, reactive, render, ui
44
from shiny.bookmark import BookmarkState, RestoreState
55

66

77
@module.ui
8-
def mod_ui(label: str):
8+
def mod_ui():
99
return ui.div(
10-
ui.input_text("text", f"{label} Text", "Initial Module Text"),
11-
ui.input_numeric("num", f"{label} Numeric", 1),
12-
ui.input_text("excluded", f"{label} Excluded", "Module Excluded"),
10+
ui.input_text("text_in", "Initial Module Text"),
11+
ui.output_text("included_module_text"),
12+
ui.input_numeric("num_in", "Enter number", 1),
13+
ui.output_text("included_module_num"),
14+
ui.input_text("text_excl", "Module Excluded"),
15+
ui.output_text("excluded_module_text"),
1316
)
1417

1518

1619
@module.server
1720
def mod_server(input: Inputs, output: Outputs, session: Session):
18-
session.bookmark.exclude.append("excluded")
21+
# 1. Fix: Correct input ID for exclusion
22+
session.bookmark.exclude.append("text_excl") # Changed from "excluded"
23+
24+
@render.text
25+
def included_module_text():
26+
return f"Included text: {input.text_in()}"
27+
28+
@render.text
29+
def included_module_num():
30+
return f"Included num: {input.num_in()}"
31+
32+
@render.text
33+
def excluded_module_text():
34+
return f"Excluded text: {input.text_excl()}"
35+
36+
# 2. Add: Trigger bookmarking when inputs change
37+
@reactive.effect
38+
@reactive.event(input.text_in, input.num_in, ignore_init=True)
39+
async def _():
40+
await session.bookmark()
1941

2042
@session.bookmark.on_bookmark
2143
async def _(state: BookmarkState):
22-
state.values["module_num"] = input.num()
44+
# 3. Store the value directly
45+
state.values["module_num"] = input.num_in()
2346

2447
@session.bookmark.on_restore
2548
def _(state: RestoreState):
49+
# 4. Fix: Correct key name and input access
2650
if "module_num" in state.values:
27-
ui.update_numeric("num", value=state.values["module_num"])
28-
if "text" in state.input:
29-
print(f"module on_restore: text: {state.input['text']}")
51+
ui.update_numeric("num_in", value=state.values["module_num"])
52+
53+
# 5. Fix: Correct input access for module
54+
if "text_in" in state.input:
55+
print(f"module on_restore: text: {state.input['text_in']}")
3056

3157

3258
def app_ui(request: Request):
3359
return ui.page_fluid(
34-
mod_ui("mod1", "Module 1"),
35-
mod_ui("mod2", "Module 2"),
60+
mod_ui("mod1"),
3661
ui.input_bookmark_button(),
3762
)
3863

3964

4065
def server(input: Inputs, output: Outputs, session: Session):
4166
mod_server("mod1")
42-
mod_server("mod2")
4367

4468
@session.bookmark.on_bookmarked
4569
async def _(url: str):
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from playwright.sync_api import Page
2+
3+
from shiny.playwright import controller
4+
from shiny.pytest import create_app_fixture
5+
from shiny.run import ShinyAppProc
6+
7+
app = create_app_fixture(["app-core.py"])
8+
9+
10+
def test_bookmark_exclusion(page: Page, app: ShinyAppProc) -> None:
11+
page.goto(app.url)
12+
13+
mod1_text_box = controller.InputText(page, "mod1-text_in")
14+
mod1_txt = controller.OutputText(page, "mod1-included_module_text")
15+
mod1_txt.expect_value("Included text:")
16+
17+
mod1_num = controller.InputNumeric(page, "mod1-num_in")
18+
mod1_num_txt = controller.OutputText(page, "mod1-included_module_num")
19+
mod1_num_txt.expect_value("Included num: 1")
20+
21+
mod1_excluded = controller.InputText(page, "mod1-text_excl")
22+
mod1_excluded_txt = controller.OutputText(page, "mod1-excluded_module_text")
23+
mod1_excluded_txt.expect_value("Excluded text:")
24+
25+
mod1_text_box.set("Hello world")
26+
mod1_txt.expect_value("Included text: Hello world")
27+
mod1_num.set("10")
28+
mod1_num_txt.expect_value("Included num: 10")
29+
mod1_excluded.set("Hello excluded")
30+
mod1_excluded_txt.expect_value("Excluded text: Hello excluded")
31+
32+
# click bookmark button
33+
page.get_by_role("button", name="🔗 Bookmark...").click()
34+
35+
# reload page
36+
page.reload()
37+
38+
mod1_txt.expect_value("Included text: Hello world")
39+
mod1_num_txt.expect_value("Included num: 10")
40+
mod1_excluded_txt.expect_value("Excluded text:")

0 commit comments

Comments
 (0)