test_table.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. """Integration tests for table and related components."""
  2. from typing import Generator
  3. import pytest
  4. from playwright.sync_api import Page
  5. from reflex.testing import AppHarness
  6. expected_col_headers = ["Name", "Age", "Location"]
  7. expected_row_headers = ["John", "Jane", "Joe"]
  8. expected_cells_data = [
  9. ["30", "New York"],
  10. ["31", "San Fransisco"],
  11. ["32", "Los Angeles"],
  12. ]
  13. def Table():
  14. """App using table component."""
  15. import reflex as rx
  16. app = rx.App(state=rx.State)
  17. @app.add_page
  18. def index():
  19. return rx.center(
  20. rx.table.root(
  21. rx.table.header(
  22. rx.table.row(
  23. rx.table.column_header_cell("Name"),
  24. rx.table.column_header_cell("Age"),
  25. rx.table.column_header_cell("Location"),
  26. ),
  27. ),
  28. rx.table.body(
  29. rx.table.row(
  30. rx.table.row_header_cell("John"),
  31. rx.table.cell(30),
  32. rx.table.cell("New York"),
  33. ),
  34. rx.table.row(
  35. rx.table.row_header_cell("Jane"),
  36. rx.table.cell(31),
  37. rx.table.cell("San Fransisco"),
  38. ),
  39. rx.table.row(
  40. rx.table.row_header_cell("Joe"),
  41. rx.table.cell(32),
  42. rx.table.cell("Los Angeles"),
  43. ),
  44. ),
  45. width="100%",
  46. ),
  47. )
  48. @pytest.fixture()
  49. def table_app(tmp_path_factory) -> Generator[AppHarness, None, None]:
  50. """Start Table app at tmp_path via AppHarness.
  51. Args:
  52. tmp_path_factory: pytest tmp_path_factory fixture
  53. Yields:
  54. running AppHarness instance
  55. """
  56. with AppHarness.create(
  57. root=tmp_path_factory.mktemp("table"),
  58. app_source=Table,
  59. ) as harness:
  60. assert harness.app_instance is not None, "app is not running"
  61. yield harness
  62. def test_table(page: Page, table_app: AppHarness):
  63. """Test that a table component is rendered properly.
  64. Args:
  65. table_app: Harness for Table app
  66. page: Playwright page instance
  67. """
  68. assert table_app.frontend_url is not None, "frontend url is not available"
  69. page.goto(table_app.frontend_url)
  70. table = page.get_by_role("table")
  71. # Check column headers
  72. headers = table.get_by_role("columnheader").all_inner_texts()
  73. assert headers == expected_col_headers
  74. # Check rows headers
  75. rows = table.get_by_role("rowheader").all_inner_texts()
  76. assert rows == expected_row_headers
  77. # Check cells
  78. rows = table.get_by_role("cell").all_inner_texts()
  79. for i, expected_row in enumerate(expected_cells_data):
  80. idx = i * 2
  81. assert [rows[idx], rows[idx + 1]] == expected_row