60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
"""Integration tests for a stateless app."""
|
|
|
|
from typing import Generator
|
|
|
|
import httpx
|
|
import pytest
|
|
from playwright.sync_api import Page, expect
|
|
|
|
import reflex as rx
|
|
from reflex.testing import AppHarness
|
|
|
|
|
|
def StatelessApp():
|
|
"""A stateless app that renders a heading."""
|
|
import reflex as rx
|
|
|
|
def index():
|
|
return rx.heading("This is a stateless app")
|
|
|
|
app = rx.App()
|
|
app.add_page(index)
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def stateless_app(tmp_path_factory) -> Generator[AppHarness, None, None]:
|
|
"""Create a stateless app AppHarness.
|
|
|
|
Args:
|
|
tmp_path_factory: pytest fixture for creating temporary directories.
|
|
|
|
Yields:
|
|
AppHarness: A harness for testing the stateless app.
|
|
"""
|
|
with AppHarness.create(
|
|
root=tmp_path_factory.mktemp("stateless_app"),
|
|
app_source=StatelessApp,
|
|
) as harness:
|
|
yield harness
|
|
|
|
|
|
def test_statelessness(stateless_app: AppHarness, page: Page):
|
|
"""Test that the stateless app renders a heading but backend/_event is not mounted.
|
|
|
|
Args:
|
|
stateless_app: A harness for testing the stateless app.
|
|
page: A Playwright page.
|
|
"""
|
|
assert stateless_app.frontend_url is not None
|
|
assert stateless_app.backend is not None
|
|
assert stateless_app.backend.started
|
|
|
|
res = httpx.get(rx.config.get_config().api_url + "/_event")
|
|
assert res.status_code == 404
|
|
|
|
res2 = httpx.get(rx.config.get_config().api_url + "/ping")
|
|
assert res2.status_code == 200
|
|
|
|
page.goto(stateless_app.frontend_url)
|
|
expect(page.get_by_role("heading")).to_have_text("This is a stateless app")
|