test_table.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. import sys
  2. from typing import List, Tuple
  3. import pytest
  4. from reflex.components.chakra.datadisplay.table import Tbody, Tfoot, Thead
  5. from reflex.state import BaseState
  6. PYTHON_GT_V38 = sys.version_info.major >= 3 and sys.version_info.minor > 8
  7. class TableState(BaseState):
  8. """Test State class."""
  9. rows_List_List_str: List[List[str]] = [["random", "row"]]
  10. rows_List_List: List[List] = [["random", "row"]]
  11. rows_List_str: List[str] = ["random", "row"]
  12. rows_Tuple_List_str: Tuple[List[str]] = (["random", "row"],)
  13. rows_Tuple_List: Tuple[List] = ["random", "row"] # type: ignore
  14. rows_Tuple_str_str: Tuple[str, str] = (
  15. "random",
  16. "row",
  17. )
  18. rows_Tuple_Tuple_str_str: Tuple[Tuple[str, str]] = (
  19. (
  20. "random",
  21. "row",
  22. ),
  23. )
  24. rows_Tuple_Tuple: Tuple[Tuple] = (
  25. (
  26. "random",
  27. "row",
  28. ),
  29. )
  30. rows_str: str = "random, row"
  31. headers_List_str: List[str] = ["header1", "header2"]
  32. headers_Tuple_str_str: Tuple[str, str] = (
  33. "header1",
  34. "header2",
  35. )
  36. headers_str: str = "headers1, headers2"
  37. footers_List_str: List[str] = ["footer1", "footer2"]
  38. footers_Tuple_str_str: Tuple[str, str] = (
  39. "footer1",
  40. "footer2",
  41. )
  42. footers_str: str = "footer1, footer2"
  43. if sys.version_info.major >= 3 and sys.version_info.minor > 8:
  44. rows_list_list_str: list[list[str]] = [["random", "row"]]
  45. rows_list_list: list[list] = [["random", "row"]]
  46. rows_list_str: list[str] = ["random", "row"]
  47. rows_tuple_list_str: tuple[list[str]] = (["random", "row"],)
  48. rows_tuple_list: tuple[list] = ["random", "row"] # type: ignore
  49. rows_tuple_str_str: tuple[str, str] = (
  50. "random",
  51. "row",
  52. )
  53. rows_tuple_tuple_str_str: tuple[tuple[str, str]] = (
  54. (
  55. "random",
  56. "row",
  57. ),
  58. )
  59. rows_tuple_tuple: tuple[tuple] = (
  60. (
  61. "random",
  62. "row",
  63. ),
  64. )
  65. valid_extras = (
  66. [
  67. TableState.rows_list_list_str,
  68. TableState.rows_list_list,
  69. TableState.rows_tuple_list_str,
  70. TableState.rows_tuple_list,
  71. TableState.rows_tuple_tuple_str_str,
  72. TableState.rows_tuple_tuple,
  73. ]
  74. if PYTHON_GT_V38
  75. else []
  76. )
  77. invalid_extras = (
  78. [TableState.rows_list_str, TableState.rows_tuple_str_str] if PYTHON_GT_V38 else []
  79. )
  80. @pytest.mark.parametrize(
  81. "rows",
  82. [
  83. [["random", "row"]],
  84. TableState.rows_List_List_str,
  85. TableState.rows_List_List,
  86. TableState.rows_Tuple_List_str,
  87. TableState.rows_Tuple_List,
  88. TableState.rows_Tuple_Tuple_str_str,
  89. TableState.rows_Tuple_Tuple,
  90. *valid_extras,
  91. ],
  92. )
  93. def test_create_table_body_with_valid_rows_prop(rows):
  94. render_dict = Tbody.create(rows=rows).render()
  95. assert render_dict["name"] == "Tbody"
  96. assert len(render_dict["children"]) == 1
  97. @pytest.mark.parametrize(
  98. "rows",
  99. [
  100. ["random", "row"],
  101. "random, rows",
  102. TableState.rows_List_str,
  103. TableState.rows_Tuple_str_str,
  104. TableState.rows_str,
  105. *invalid_extras,
  106. ],
  107. )
  108. def test_create_table_body_with_invalid_rows_prop(rows):
  109. with pytest.raises(TypeError):
  110. Tbody.create(rows=rows)
  111. @pytest.mark.parametrize(
  112. "headers",
  113. [
  114. ["random", "header"],
  115. TableState.headers_List_str,
  116. TableState.headers_Tuple_str_str,
  117. ],
  118. )
  119. def test_create_table_head_with_valid_headers_prop(headers):
  120. render_dict = Thead.create(headers=headers).render()
  121. assert render_dict["name"] == "Thead"
  122. assert len(render_dict["children"]) == 1
  123. assert render_dict["children"][0]["name"] == "Tr"
  124. @pytest.mark.parametrize(
  125. "headers",
  126. [
  127. "random, header",
  128. TableState.headers_str,
  129. ],
  130. )
  131. def test_create_table_head_with_invalid_headers_prop(headers):
  132. with pytest.raises(TypeError):
  133. Thead.create(headers=headers)
  134. @pytest.mark.parametrize(
  135. "footers",
  136. [
  137. ["random", "footers"],
  138. TableState.footers_List_str,
  139. TableState.footers_Tuple_str_str,
  140. ],
  141. )
  142. def test_create_table_footer_with_valid_footers_prop(footers):
  143. render_dict = Tfoot.create(footers=footers).render()
  144. assert render_dict["name"] == "Tfoot"
  145. assert len(render_dict["children"]) == 1
  146. assert render_dict["children"][0]["name"] == "Tr"
  147. @pytest.mark.parametrize(
  148. "footers",
  149. [
  150. "random, footers",
  151. TableState.footers_str,
  152. ],
  153. )
  154. def test_create_table_footer_with_invalid_footers_prop(footers):
  155. with pytest.raises(TypeError):
  156. Tfoot.create(footers=footers)