reflex/tests/integration/test_extra_overlay_function.py
Khaleel Al-Adhami 6f4d328cde
add a config variable to add extra overlay components (#4763)
* add a config variable to add extra overlay components

* add integration test

* Apply suggestions from code review

---------

Co-authored-by: Masen Furer <m_github@0x26.net>
2025-02-05 18:34:53 -08:00

88 lines
2.2 KiB
Python

"""Test case for adding an overlay component defined in the rxconfig."""
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
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