From 215a8343f48f91fc695c62c5b5c5d2f15bcb102e Mon Sep 17 00:00:00 2001 From: Benedikt Bartscher Date: Sat, 27 Jul 2024 21:57:18 +0200 Subject: [PATCH] wip minified state integration test --- tests/integration/test_minified_states.py | 99 +++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 tests/integration/test_minified_states.py diff --git a/tests/integration/test_minified_states.py b/tests/integration/test_minified_states.py new file mode 100644 index 000000000..b78f15710 --- /dev/null +++ b/tests/integration/test_minified_states.py @@ -0,0 +1,99 @@ +"""Integration tests for minified state names.""" + +from __future__ import annotations + +import time +from typing import Generator, Type + +import pytest +from selenium.webdriver.common.by import By +from selenium.webdriver.remote.webdriver import WebDriver +from selenium.webdriver.support import expected_conditions as EC +from selenium.webdriver.support.ui import WebDriverWait + +from reflex.testing import AppHarness + + +def TestApp(): + """A test app for minified state names.""" + import reflex as rx + + class TestAppState(rx.State): + """State for the TestApp app.""" + + pass + + app = rx.App() + + @app.add_page + def index(): + return rx.vstack( + rx.input( + value=TestAppState.router.session.client_token, + is_read_only=True, + id="token", + ), + ) + + +@pytest.fixture(scope="module") +def test_app( + app_harness_env: Type[AppHarness], tmp_path_factory: pytest.TempPathFactory +) -> Generator[AppHarness, None, None]: + """Start TestApp app at tmp_path via AppHarness. + + Args: + app_harness_env: either AppHarness (dev) or AppHarnessProd (prod) + tmp_path_factory: pytest tmp_path_factory fixture + + Yields: + running AppHarness instance + + """ + with app_harness_env.create( + root=tmp_path_factory.mktemp("test_app"), + app_name=f"testapp_{app_harness_env.__name__.lower()}", + app_source=TestApp, # type: ignore + ) as harness: + yield harness + + +@pytest.fixture +def driver(test_app: AppHarness) -> Generator[WebDriver, None, None]: + """Get an instance of the browser open to the test_app app. + + Args: + test_app: harness for TestApp app + + Yields: + WebDriver instance. + + """ + assert test_app.app_instance is not None, "app is not running" + driver = test_app.frontend() + try: + yield driver + finally: + driver.quit() + + +def test_minified_states( + test_app: AppHarness, + driver: WebDriver, +) -> None: + """Test minified state names. + + Args: + test_app: harness for TestApp + driver: WebDriver instance. + + """ + assert test_app.app_instance is not None, "app is not running" + + # get a reference to the connected client + token_input = driver.find_element(By.ID, "token") + assert token_input + + # wait for the backend connection to send the token + token = test_app.poll_for_value(token_input) + assert token