Skip to content

Commit 59c351a

Browse files
committed
add tests
1 parent c90fbff commit 59c351a

File tree

8 files changed

+106
-47
lines changed

8 files changed

+106
-47
lines changed

src/reactpy_django/pyscript/layout_handler.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ def build_element_tree(self, layout, parent, model):
4848
if key == "style":
4949
for style_key, style_value in value.items():
5050
setattr(element.style, style_key, style_value)
51+
elif key == "className":
52+
element.className = value
5153
else:
5254
element.setAttribute(key, value)
5355
for event_name, event_handler_model in model.get(
Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,25 @@
11
from reactpy import component, html, use_state
2-
from reactpy_django.components import python_to_pyscript
32

43

54
@component
6-
def embed():
7-
return html.div(
8-
{"className": "embeddable"},
9-
python_to_pyscript("./test_app/pyscript/components/child_embed.py"),
10-
)
11-
12-
13-
@component
14-
def toggeable_embed():
15-
state, set_state = use_state(False)
16-
17-
if not state:
18-
return html.div(
19-
{"className": "embeddable"},
5+
def root():
6+
value, set_value = use_state(0)
7+
return html.article(
8+
{"id": "child"},
9+
"This was embedded via a server-side component.",
10+
html.div(
11+
{"className": "grid"},
2012
html.button(
21-
{"onClick": lambda x: set_state(not state)},
22-
"Click to show/hide",
13+
{"className": "plus", "on_click": lambda event: set_value(value + 1)},
14+
"+",
2315
),
24-
)
25-
26-
return html.div(
27-
{"className": "embeddable"},
28-
html.button(
29-
{"onClick": lambda x: set_state(not state)},
30-
"Click to show/hide",
16+
html.button(
17+
{"className": "minus", "on_click": lambda event: set_value(value - 1)},
18+
"-",
19+
),
20+
),
21+
"Current value",
22+
html.pre(
23+
{"style": {"font-style": "bold"}, "data-value": str(value)}, str(value)
3124
),
32-
python_to_pyscript("./test_app/pyscript/components/child_embed.py"),
3325
)

tests/test_app/pyscript/components/child_embed.py

Lines changed: 0 additions & 16 deletions
This file was deleted.

tests/test_app/pyscript/components/counter.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,20 @@
55
def root():
66
value, set_value = use_state(0)
77
return html.article(
8+
{"id": "counter"},
89
html.div(
910
{"className": "grid"},
10-
html.button({"on_click": lambda event: set_value(value + 1)}, "+"),
11-
html.button({"on_click": lambda event: set_value(value - 1)}, "-"),
11+
html.button(
12+
{"className": "plus", "on_click": lambda event: set_value(value + 1)},
13+
"+",
14+
),
15+
html.button(
16+
{"className": "minus", "on_click": lambda event: set_value(value - 1)},
17+
"-",
18+
),
1219
),
1320
"Current value",
14-
html.pre({"style": {"font-style": "bold"}}, str(value)),
21+
html.pre(
22+
{"style": {"font-style": "bold"}, "data-value": str(value)}, str(value)
23+
),
1524
)

tests/test_app/pyscript/components/hello_world.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33

44
@component
55
def root():
6-
return html.div("hello world")
6+
return html.div({"id": "hello-world"}, "hello world")
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from reactpy import component, html, use_state
2+
from reactpy_django.components import python_to_pyscript
3+
4+
5+
@component
6+
def parent():
7+
return html.div(
8+
{"id": "parent"},
9+
python_to_pyscript("./test_app/pyscript/components/child.py"),
10+
)
11+
12+
13+
@component
14+
def parent_toggle():
15+
state, set_state = use_state(False)
16+
17+
if not state:
18+
return html.div(
19+
{"id": "parent-toggle"},
20+
html.button(
21+
{"onClick": lambda x: set_state(not state)},
22+
"Click to show/hide",
23+
),
24+
)
25+
26+
return html.div(
27+
{"id": "parent-toggle"},
28+
html.button(
29+
{"onClick": lambda x: set_state(not state)},
30+
"Click to show/hide",
31+
),
32+
python_to_pyscript("./test_app/pyscript/components/child.py"),
33+
)

tests/test_app/templates/pyscript.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ <h1>ReactPy PyScript Test Page</h1>
1818
<hr>
1919
{% pyscript_component "./test_app/pyscript/components/counter.py" %}
2020
<hr>
21-
{% component "test_app.pyscript.components.child.embed" %}
21+
{% component "test_app.pyscript.components.server_side.parent" %}
2222
<hr>
23-
{% component "test_app.pyscript.components.child.toggeable_embed" %}
23+
{% component "test_app.pyscript.components.server_side.parent_toggle" %}
2424
<hr>
2525
</body>
2626

tests/test_app/tests/test_components.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -678,3 +678,42 @@ def test_channel_layer_components(self):
678678

679679
finally:
680680
new_page.close()
681+
682+
def test_pyscript_components(self):
683+
new_page = self.browser.new_page()
684+
try:
685+
new_page.goto(f"{self.live_server_url}/pyscript/")
686+
new_page.wait_for_selector("#hello-world")
687+
688+
new_page.wait_for_selector("#counter")
689+
new_page.wait_for_selector("#counter pre[data-value='0']")
690+
new_page.wait_for_selector("#counter .plus").click(delay=CLICK_DELAY)
691+
new_page.wait_for_selector("#counter pre[data-value='1']")
692+
new_page.wait_for_selector("#counter .plus").click(delay=CLICK_DELAY)
693+
new_page.wait_for_selector("#counter pre[data-value='2']")
694+
new_page.wait_for_selector("#counter .minus").click(delay=CLICK_DELAY)
695+
new_page.wait_for_selector("#counter pre[data-value='1']")
696+
697+
new_page.wait_for_selector("#parent")
698+
new_page.wait_for_selector("#child")
699+
new_page.wait_for_selector("#child pre[data-value='0']")
700+
new_page.wait_for_selector("#child .plus").click(delay=CLICK_DELAY)
701+
new_page.wait_for_selector("#child pre[data-value='1']")
702+
new_page.wait_for_selector("#child .plus").click(delay=CLICK_DELAY)
703+
new_page.wait_for_selector("#child pre[data-value='2']")
704+
new_page.wait_for_selector("#child .minus").click(delay=CLICK_DELAY)
705+
new_page.wait_for_selector("#child pre[data-value='1']")
706+
707+
new_page.wait_for_selector("#parent-toggle")
708+
new_page.wait_for_selector("#parent-toggle button").click(delay=CLICK_DELAY)
709+
new_page.wait_for_selector("#parent-toggle")
710+
new_page.wait_for_selector("#parent-toggle pre[data-value='0']")
711+
new_page.wait_for_selector("#parent-toggle .plus").click(delay=CLICK_DELAY)
712+
new_page.wait_for_selector("#parent-toggle pre[data-value='1']")
713+
new_page.wait_for_selector("#parent-toggle .plus").click(delay=CLICK_DELAY)
714+
new_page.wait_for_selector("#parent-toggle pre[data-value='2']")
715+
new_page.wait_for_selector("#parent-toggle .minus").click(delay=CLICK_DELAY)
716+
new_page.wait_for_selector("#parent-toggle pre[data-value='1']")
717+
718+
finally:
719+
new_page.close()

0 commit comments

Comments
 (0)