test_metric_indicator.py 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. # Copyright 2021-2024 Avaiga Private Limited
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
  4. # the License. You may obtain a copy of the License at
  5. #
  6. # http://www.apache.org/licenses/LICENSE-2.0
  7. #
  8. # Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
  9. # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  10. # specific language governing permissions and limitations under the License.
  11. import inspect
  12. from importlib import util
  13. import pytest
  14. if util.find_spec("playwright"):
  15. from playwright._impl._page import Page
  16. from taipy.gui import Gui
  17. @pytest.mark.extension
  18. def test_has_default_value(page: Page, gui: Gui, helpers):
  19. page_md = """
  20. <|100|metric|>
  21. """
  22. gui._set_frame(inspect.currentframe())
  23. gui.add_page(name="test", page=page_md)
  24. helpers.run_e2e(gui)
  25. page.goto("./test")
  26. page.wait_for_selector(".plot-container")
  27. events_list = page.locator("//*[@class='js-plotly-plot']//*[name()='svg'][2]//*[local-name()='text']")
  28. gauge_value = events_list.nth(0).text_content()
  29. assert gauge_value == "100"
  30. @pytest.mark.extension
  31. def test_show_increase_delta_value(page: Page, gui: Gui, helpers):
  32. page_md = """
  33. <|100|metric|delta=20|type=linear|>
  34. """
  35. gui._set_frame(inspect.currentframe())
  36. gui.add_page(name="test", page=page_md)
  37. helpers.run_e2e(gui)
  38. page.goto("./test")
  39. page.wait_for_selector(".plot-container")
  40. events_list = page.locator("//*[@class='js-plotly-plot']//*[name()='svg'][2]//*[local-name()='text']")
  41. delta_value = events_list.nth(1).text_content()
  42. assert delta_value == "▲20"
  43. @pytest.mark.extension
  44. def test_show_decrease_delta_value(page: Page, gui: Gui, helpers):
  45. page_md = """
  46. <|100|metric|delta=-20|type=linear|>
  47. """
  48. gui._set_frame(inspect.currentframe())
  49. gui.add_page(name="test", page=page_md)
  50. helpers.run_e2e(gui)
  51. page.goto("./test")
  52. page.wait_for_selector(".plot-container")
  53. events_list = page.locator("//*[@class='js-plotly-plot']//*[name()='svg'][2]//*[local-name()='text']")
  54. delta_value = events_list.nth(1).text_content()
  55. assert delta_value == "▼−20"
  56. @pytest.mark.teste2e
  57. def test_show_linear_chart(page: Page, gui: Gui, helpers):
  58. page_md = """
  59. <|100|metric|delta=-20|type=linear|>
  60. """
  61. gui._set_frame(inspect.currentframe())
  62. gui.add_page(name="test", page=page_md)
  63. helpers.run_e2e(gui)
  64. page.goto("./test")
  65. page.wait_for_selector(".plot-container")
  66. chart = page.locator("//*[@class='js-plotly-plot']//*[name()='svg'][2]//*[@class='bullet']")
  67. assert chart.is_visible()
  68. @pytest.mark.teste2e
  69. def test_show_circular_chart_as_default_type(page: Page, gui: Gui, helpers):
  70. page_md = """
  71. <|100|metric|>
  72. """
  73. gui._set_frame(inspect.currentframe())
  74. gui.add_page(name="test", page=page_md)
  75. helpers.run_e2e(gui)
  76. page.goto("./test")
  77. page.wait_for_selector(".plot-container")
  78. chart = page.locator("//*[@class='js-plotly-plot']//*[name()='svg'][2]//*[@class='angular']")
  79. assert chart.is_visible()
  80. @pytest.mark.teste2e
  81. def test_format_converter_integer_to_binary(page: Page, gui: Gui, helpers):
  82. page_md = """
  83. <|50|metric|show_value=True|delta=20|format=%b|>
  84. """
  85. gui._set_frame(inspect.currentframe())
  86. gui.add_page(name="test", page=page_md)
  87. helpers.run_e2e(gui)
  88. page.goto("./test")
  89. page.wait_for_selector(".plot-container")
  90. number = page.locator(
  91. "//*[@class='js-plotly-plot']//*[name()='svg'][2]//*[@class='number']")
  92. assert number.text_content() == "110010"
  93. @pytest.mark.teste2e
  94. def test_format_converter_integer_to_signed_decimal_d_type(page: Page, gui: Gui, helpers):
  95. page_md = """
  96. <|50|metric|show_value=True|delta=20|format=%d|>
  97. """
  98. gui._set_frame(inspect.currentframe())
  99. gui.add_page(name="test", page=page_md)
  100. helpers.run_e2e(gui)
  101. page.goto("./test")
  102. page.wait_for_selector(".plot-container")
  103. number = page.locator(
  104. "//*[@class='js-plotly-plot']//*[name()='svg'][2]//*[@class='number']")
  105. assert number.text_content() == "50"
  106. @pytest.mark.teste2e
  107. def test_format_converter_integer_to_signed_decimal_i_type(page: Page, gui: Gui, helpers):
  108. page_md = """
  109. <|50|metric|show_value=True|delta=20|format=%i|>
  110. """
  111. gui._set_frame(inspect.currentframe())
  112. gui.add_page(name="test", page=page_md)
  113. helpers.run_e2e(gui)
  114. page.goto("./test")
  115. page.wait_for_selector(".plot-container")
  116. number = page.locator(
  117. "//*[@class='js-plotly-plot']//*[name()='svg'][2]//*[@class='number']")
  118. assert number.text_content() == "50"
  119. @pytest.mark.teste2e
  120. def test_format_converter_yields_float_using_science_notation(page: Page, gui: Gui, helpers):
  121. page_md = """
  122. <|50|metric|show_value=True|delta=20|format=%e|>
  123. """
  124. gui._set_frame(inspect.currentframe())
  125. gui.add_page(name="test", page=page_md)
  126. helpers.run_e2e(gui)
  127. page.goto("./test")
  128. page.wait_for_selector(".plot-container")
  129. number = page.locator(
  130. "//*[@class='js-plotly-plot']//*[name()='svg'][2]//*[@class='number']")
  131. assert number.text_content() == "5.000000e+1"
  132. @pytest.mark.teste2e
  133. def test_format_converter_yields_float_using_fixed_point_notation_f_type(page: Page, gui: Gui, helpers):
  134. page_md = """
  135. <|99.99|metric|show_value=True|delta=20|format=%.2f|>
  136. """
  137. gui._set_frame(inspect.currentframe())
  138. gui.add_page(name="test", page=page_md)
  139. helpers.run_e2e(gui)
  140. page.goto("./test")
  141. page.wait_for_selector(".plot-container")
  142. number = page.locator(
  143. "//*[@class='js-plotly-plot']//*[name()='svg'][2]//*[@class='number']")
  144. assert number.text_content() == "99.99"
  145. @pytest.mark.teste2e
  146. def test_format_converter_yields_float_using_fixed_point_notation_g_type(page: Page, gui: Gui, helpers):
  147. page_md = """
  148. <|50.555|metric|show_value=True|delta=20|format=%.2g|>
  149. """
  150. gui._set_frame(inspect.currentframe())
  151. gui.add_page(name="test", page=page_md)
  152. helpers.run_e2e(gui)
  153. page.goto("./test")
  154. page.wait_for_selector(".plot-container")
  155. number = page.locator(
  156. "//*[@class='js-plotly-plot']//*[name()='svg'][2]//*[@class='number']")
  157. assert number.text_content() == "51"
  158. @pytest.mark.teste2e
  159. def test_format_converter_yields_integer_as_octal(page: Page, gui: Gui, helpers):
  160. page_md = """
  161. <|50|metric|show_value=True|delta=20|format=%o|>
  162. """
  163. gui._set_frame(inspect.currentframe())
  164. gui.add_page(name="test", page=page_md)
  165. helpers.run_e2e(gui)
  166. page.goto("./test")
  167. page.wait_for_selector(".plot-container")
  168. number = page.locator(
  169. "//*[@class='js-plotly-plot']//*[name()='svg'][2]//*[@class='number']")
  170. assert number.text_content() == "62"
  171. @pytest.mark.teste2e
  172. def test_format_converter_yields_integer_as_hexadecimal(page: Page, gui: Gui, helpers):
  173. page_md = """
  174. <|50|metric|show_value=True|delta=20|format=%x|>
  175. """
  176. gui._set_frame(inspect.currentframe())
  177. gui.add_page(name="test", page=page_md)
  178. helpers.run_e2e(gui)
  179. page.goto("./test")
  180. page.wait_for_selector(".plot-container")
  181. number = page.locator(
  182. "//*[@class='js-plotly-plot']//*[name()='svg'][2]//*[@class='number']")
  183. assert number.text_content() == "32"
  184. @pytest.mark.teste2e
  185. def test_format_converter_yields_integer_as_uppercase_hexadecimal(page: Page, gui: Gui, helpers):
  186. page_md = """
  187. <|50|metric|show_value=True|delta=20|format=%X|>
  188. """
  189. gui._set_frame(inspect.currentframe())
  190. gui.add_page(name="test", page=page_md)
  191. helpers.run_e2e(gui)
  192. page.goto("./test")
  193. page.wait_for_selector(".plot-container")
  194. number = page.locator(
  195. "//*[@class='js-plotly-plot']//*[name()='svg'][2]//*[@class='number']")
  196. assert number.text_content() == "32"
  197. @pytest.mark.teste2e
  198. def test_format_converter_yields_integer_as_unsigned_decimal(page: Page, gui: Gui, helpers):
  199. page_md = """
  200. <|-50|metric|show_value=True|delta=20|format=%u|>
  201. """
  202. gui._set_frame(inspect.currentframe())
  203. gui.add_page(name="test", page=page_md)
  204. helpers.run_e2e(gui)
  205. page.goto("./test")
  206. page.wait_for_selector(".plot-container")
  207. number = page.locator(
  208. "//*[@class='js-plotly-plot']//*[name()='svg'][2]//*[@class='number']")
  209. assert number.text_content() == "(50)"
  210. @pytest.mark.teste2e
  211. def test_format_converter_yields_edge_cases(page: Page, gui: Gui, helpers):
  212. page_md = """
  213. <|50|metric|show_value=True|format=a%%b%dc%%d|>
  214. """
  215. gui._set_frame(inspect.currentframe())
  216. gui.add_page(name="test", page=page_md)
  217. helpers.run_e2e(gui)
  218. page.goto("./test")
  219. page.wait_for_selector(".plot-container")
  220. number = page.locator(
  221. "//*[@class='js-plotly-plot']//*[name()='svg'][2]//*[@class='number']")
  222. assert number.text_content() == "a%b50c%d"