test_node_version.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. """Test for latest node version being able to run reflex."""
  2. from __future__ import annotations
  3. from typing import Any, Generator
  4. import httpx
  5. import pytest
  6. from playwright.sync_api import Page, expect
  7. from reflex.testing import AppHarness
  8. def TestNodeVersionApp():
  9. """A test app for node latest version."""
  10. import reflex as rx
  11. from reflex.utils.prerequisites import get_node_version
  12. class TestNodeVersionConfig(rx.Config):
  13. pass
  14. class TestNodeVersionState(rx.State):
  15. @rx.var
  16. def node_version(self) -> str:
  17. return str(get_node_version())
  18. app = rx.App()
  19. @app.add_page
  20. def index():
  21. return rx.heading("Node Version check v", TestNodeVersionState.node_version)
  22. @pytest.fixture()
  23. def node_version_app(tmp_path) -> Generator[AppHarness, Any, None]:
  24. """Fixture to start TestNodeVersionApp app at tmp_path via AppHarness.
  25. Args:
  26. tmp_path: pytest tmp_path fixture
  27. Yields:
  28. running AppHarness instance
  29. """
  30. with AppHarness.create(
  31. root=tmp_path,
  32. app_source=TestNodeVersionApp, # type: ignore
  33. ) as harness:
  34. yield harness
  35. def test_node_version(node_version_app: AppHarness, page: Page):
  36. """Test for latest node version being able to run reflex.
  37. Args:
  38. node_version_app: running AppHarness instance
  39. page: playwright page instance
  40. """
  41. def get_latest_node_version():
  42. response = httpx.get("https://nodejs.org/dist/index.json")
  43. versions = response.json()
  44. # Assuming the first entry in the API response is the most recent version
  45. if versions:
  46. latest_version = versions[0]["version"]
  47. return latest_version
  48. return None
  49. assert node_version_app.frontend_url is not None
  50. page.goto(node_version_app.frontend_url)
  51. expect(page.get_by_role("heading")).to_have_text(
  52. f"Node Version check {get_latest_node_version()}"
  53. )