From de612dca506d3b39cce07303627aa0ff229365fd Mon Sep 17 00:00:00 2001 From: Khaleel Al-Adhami Date: Wed, 5 Feb 2025 17:12:25 -0800 Subject: [PATCH] add integration test --- .../test_extra_overlay_function.py | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 tests/integration/test_extra_overlay_function.py diff --git a/tests/integration/test_extra_overlay_function.py b/tests/integration/test_extra_overlay_function.py new file mode 100644 index 000000000..529044060 --- /dev/null +++ b/tests/integration/test_extra_overlay_function.py @@ -0,0 +1,88 @@ +"""Test case for displaying the connection banner when the websocket drops.""" + +from typing import Generator + +import pytest +from selenium.webdriver.common.by import By + +from reflex.testing import AppHarness, WebDriver + + +def ExtraOverlay(): + import reflex as rx + + # Simulate reflex cloud deploy + rx.config.get_config().extra_overlay_function = "reflex.components.moment.moment" + + def index(): + return rx.vstack( + rx.el.input( + id="token", + value=rx.State.router.session.client_token, + is_read_only=True, + ), + rx.text( + "Hello World", + ), + ) + + app = rx.App(_state=rx.State) + app.add_page(index) + + +@pytest.fixture(scope="module") +def extra_overlay(tmp_path_factory) -> Generator[AppHarness, None, None]: + """Start ExtraOverlay app at tmp_path via AppHarness. + + Args: + tmp_path_factory: pytest tmp_path_factory fixture + + Yields: + running AppHarness instance + """ + with AppHarness.create( + root=tmp_path_factory.mktemp("extra_overlay"), + app_source=ExtraOverlay, + ) as harness: + assert harness.app_instance is not None, "app is not running" + yield harness + + +@pytest.fixture +def driver(extra_overlay: AppHarness): + """Get an instance of the browser open to the extra overlay app. + + Args: + extra_overlay: harness for the ExtraOverlay app. + + Yields: + WebDriver instance. + """ + driver = extra_overlay.frontend() + try: + token_input = driver.find_element(By.ID, "token") + assert token_input + # wait for the backend connection to send the token + token = extra_overlay.poll_for_value(token_input) + assert token is not None + + yield driver + finally: + driver.quit() + + +def test_extra_overlay(driver: WebDriver, extra_overlay: AppHarness): + """Test the ExtraOverlay app. + + Args: + driver: WebDriver instance. + extra_overlay: harness for the ExtraOverlay app. + """ + # Check that the text is displayed. + text = driver.find_element(By.XPATH, "//*[contains(text(), 'Hello World')]") + assert text + assert text.text == "Hello World" + + time = driver.find_element(By.TAG_NAME, "time") + assert time + assert time.text