diff --git a/docs/src/reference/template-tag.md b/docs/src/reference/template-tag.md index 952d3571..146dae4c 100644 --- a/docs/src/reference/template-tag.md +++ b/docs/src/reference/template-tag.md @@ -159,7 +159,7 @@ This template tag can be used to insert any number of **client-side** ReactPy co By default, the only [available dependencies](./template-tag.md#pyscript-setup) are the Python standard library, `pyscript`, `pyodide`, `reactpy` core. -The entire file path provided is loaded directly into the browser, and must have a `#!python def root()` component to act as the entry point. +Your Python component file will be directly loaded into the browser. It must have a `#!python def root()` component to act as the entry point. diff --git a/tests/test_app/components.py b/tests/test_app/components.py index c505b3f6..bcdf8276 100644 --- a/tests/test_app/components.py +++ b/tests/test_app/components.py @@ -222,8 +222,7 @@ async def async_get_or_create_relational_parent(): async def async_get_relational_parent_query(): - # Sleep to avoid race conditions in the test - # Also serves as a good way of testing whether things are truly async + # This sleep helps test whether queries are run asynchronously. await asyncio.sleep(3) return await async_get_or_create_relational_parent() diff --git a/tests/test_app/prerender/components.py b/tests/test_app/prerender/components.py index 9dbfeb8a..adfdf2fb 100644 --- a/tests/test_app/prerender/components.py +++ b/tests/test_app/prerender/components.py @@ -16,6 +16,7 @@ def prerender_string(): if scope.get("type") == "http": return "prerender_string: Prerendered" + # Simulate a processing delay to mimic the behavior of a slow application sleep(SLEEP_TIME) return "prerender_string: Fully Rendered" diff --git a/tests/test_app/templates/async_event_form.html b/tests/test_app/templates/async_event_form.html index ac98ade6..af77e5c1 100644 --- a/tests/test_app/templates/async_event_form.html +++ b/tests/test_app/templates/async_event_form.html @@ -19,7 +19,7 @@

ReactPy Async Event Form Test Page


- {% component "test_app.forms.components.async_event_form" %} + {% component "test_app.forms.components.async_event_form" prerender="false" %}
diff --git a/tests/test_app/templates/bootstrap_form.html b/tests/test_app/templates/bootstrap_form.html index e9e6738d..0ef218db 100644 --- a/tests/test_app/templates/bootstrap_form.html +++ b/tests/test_app/templates/bootstrap_form.html @@ -21,7 +21,7 @@

ReactPy Bootstrap Form Test Page


- {% component "test_app.forms.components.bootstrap_form" %} + {% component "test_app.forms.components.bootstrap_form" prerender="false" %}
diff --git a/tests/test_app/templates/form.html b/tests/test_app/templates/form.html index 749564b3..ecffc1ac 100644 --- a/tests/test_app/templates/form.html +++ b/tests/test_app/templates/form.html @@ -19,7 +19,7 @@

ReactPy Form Test Page


- {% component "test_app.forms.components.basic_form" %} + {% component "test_app.forms.components.basic_form" prerender="false" %}
diff --git a/tests/test_app/templates/model_form.html b/tests/test_app/templates/model_form.html index 560452e0..3c28eb07 100644 --- a/tests/test_app/templates/model_form.html +++ b/tests/test_app/templates/model_form.html @@ -19,7 +19,7 @@

ReactPy Model Form Test Page


- {% component "test_app.forms.components.database_backed_form" %} + {% component "test_app.forms.components.database_backed_form" prerender="false" %}
diff --git a/tests/test_app/templates/sync_event_form.html b/tests/test_app/templates/sync_event_form.html index 49badba2..c22955d1 100644 --- a/tests/test_app/templates/sync_event_form.html +++ b/tests/test_app/templates/sync_event_form.html @@ -19,7 +19,7 @@

ReactPy Sync Event Form Test Page


- {% component "test_app.forms.components.sync_event_form" %} + {% component "test_app.forms.components.sync_event_form" prerender="false" %}
diff --git a/tests/test_app/tests/test_components.py b/tests/test_app/tests/test_components.py index 4978c236..9f4fc495 100644 --- a/tests/test_app/tests/test_components.py +++ b/tests/test_app/tests/test_components.py @@ -2,7 +2,6 @@ # ruff: noqa: RUF012, N802 import os import socket -from time import sleep from uuid import uuid4 import pytest @@ -314,11 +313,12 @@ def test_component_use_user_data_with_default(self): # Attempt to clear data clear.click(delay=CLICK_DELAY) - sleep(0.25) user_data_div = self.page.wait_for_selector( "#use-user-data-with-default[data-fetch-error=false][data-mutation-error=false][data-loading=false][data-username=user_3]" ) - assert "Data: {'default1': 'value', 'default2': 'value2', 'default3': 'value3'}" in user_data_div.text_content() + expect(self.page.locator("#use-user-data-with-default")).to_contain_text( + "Data: {'default1': 'value', 'default2': 'value2', 'default3': 'value3'}" + ) @navigate_to_page("/") def test_component_use_auth(self): @@ -407,25 +407,20 @@ def test_prerender(self): use_user_ws = self.page.locator("#use-user-ws[data-success=true]") # Check if the prerender occurred properly - string.wait_for() - vdom.wait_for() - component.wait_for() - use_root_id_http.wait_for() + expect(string).to_have_text("prerender_string: Prerendered") + expect(vdom).to_have_text("prerender_vdom: Prerendered") + expect(component).to_have_text("prerender_component: Prerendered") use_user_http.wait_for() - assert string.all_inner_texts() == ["prerender_string: Prerendered"] - assert vdom.all_inner_texts() == ["prerender_vdom: Prerendered"] - assert component.all_inner_texts() == ["prerender_component: Prerendered"] - root_id_value = use_root_id_http.get_attribute("data-value") - assert len(root_id_value) == 36 + root_id = use_root_id_http.get_attribute("data-value") + assert len(use_root_id_http.get_attribute("data-value")) == 36 # Check if the full render occurred - sleep(2) - assert string.all_inner_texts() == ["prerender_string: Fully Rendered"] - assert vdom.all_inner_texts() == ["prerender_vdom: Fully Rendered"] - assert component.all_inner_texts() == ["prerender_component: Fully Rendered"] + expect(string).to_have_text("prerender_string: Fully Rendered") + expect(vdom).to_have_text("prerender_vdom: Fully Rendered") + expect(component).to_have_text("prerender_component: Fully Rendered") use_root_id_ws.wait_for() use_user_ws.wait_for() - assert use_root_id_ws.get_attribute("data-value") == root_id_value + expect(use_root_id_ws).to_have_attribute("data-value", root_id) ############### # Error Tests # @@ -729,8 +724,6 @@ def test_form_basic(self): self.page.wait_for_selector("#id_password_field") self.page.wait_for_selector("#id_model_choice_field") self.page.wait_for_selector("#id_model_multiple_choice_field") - - sleep(1) self.page.wait_for_selector("input[type=submit]").click(delay=CLICK_DELAY) self.page.wait_for_selector(".errorlist") @@ -801,8 +794,6 @@ def test_form_bootstrap(self): self.page.wait_for_selector("#id_boolean_field") self.page.wait_for_selector("#id_char_field") self.page.wait_for_selector("#id_choice_field") - - sleep(1) self.page.wait_for_selector("button[type=submit]").click(delay=CLICK_DELAY) self.page.wait_for_selector(".invalid-feedback") @@ -827,8 +818,6 @@ def test_form_bootstrap(self): def test_form_orm_model(self): uuid = uuid4().hex self.page.wait_for_selector("form") - - sleep(1) self.page.wait_for_selector("input[type=submit]").click(delay=CLICK_DELAY) self.page.wait_for_selector(".errorlist") @@ -872,7 +861,6 @@ def test_form_orm_model(self): # self.page.wait_for_selector("#change[data-value='false']") # # Submit empty the form - # sleep(1) # self.page.wait_for_selector("input[type=submit]").click(delay=CLICK_DELAY) # # The empty form was submitted, should result in an error @@ -902,7 +890,6 @@ def test_form_orm_model(self): # self.page.wait_for_selector("#change[data-value='false']") # # Submit empty the form - # sleep(1) # self.page.wait_for_selector("input[type=submit]").click(delay=CLICK_DELAY) # # The empty form was submitted, should result in an error