add integration test

This commit is contained in:
Khaleel Al-Adhami 2025-02-05 17:12:25 -08:00
parent 323a5fe573
commit de612dca50

View File

@ -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