test_table.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. """Integration tests for table and related components."""
  2. from typing import Generator
  3. import pytest
  4. from playwright.sync_api import Page, expect
  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. expect(table.get_by_role("columnheader")).to_have_count(3)
  73. headers = table.get_by_role("columnheader")
  74. for header, exp_value in zip(headers.all(), expected_col_headers, strict=True):
  75. expect(header).to_have_text(exp_value)
  76. # Check rows headers
  77. rows = table.get_by_role("rowheader")
  78. for row, expected_row in zip(rows.all(), expected_row_headers, strict=True):
  79. expect(row).to_have_text(expected_row)
  80. # Check cells
  81. rows = table.get_by_role("cell").all_inner_texts()
  82. for i, expected_row in enumerate(expected_cells_data):
  83. idx = i * 2
  84. assert [rows[idx], rows[idx + 1]] == expected_row