test_chart.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. from selenium.webdriver.common.by import By
  2. from nicegui import ui
  3. from .screen import Screen
  4. def test_change_chart_series(screen: Screen):
  5. chart = ui.chart({
  6. 'chart': {'type': 'bar'},
  7. 'xAxis': {'categories': ['A', 'B']},
  8. 'series': [
  9. {'name': 'Alpha', 'data': [0.1, 0.2]},
  10. {'name': 'Beta', 'data': [0.3, 0.4]},
  11. ],
  12. }).classes('w-full h-64')
  13. def update():
  14. chart.options['series'][0]['data'][:] = [1, 1]
  15. chart.update()
  16. ui.button('Update', on_click=update)
  17. def get_series_0():
  18. return screen.selenium.find_elements(By.CSS_SELECTOR, '.highcharts-series-0 .highcharts-point')
  19. screen.open('/')
  20. screen.wait(0.5)
  21. before = [bar.size['width'] for bar in get_series_0()]
  22. screen.click('Update')
  23. screen.wait(0.5)
  24. after = [bar.size['width'] for bar in get_series_0()]
  25. assert before[0] < after[0]
  26. assert before[1] < after[1]
  27. def test_adding_chart_series(screen: Screen):
  28. chart = ui.chart({
  29. 'chart': {'type': 'bar'},
  30. 'xAxis': {'categories': ['A', 'B']},
  31. 'series': [],
  32. }).classes('w-full h-64')
  33. def add():
  34. chart.options['series'].append({'name': 'X', 'data': [0.1, 0.2]})
  35. chart.update()
  36. ui.button('Add', on_click=add)
  37. screen.open('/')
  38. screen.click('Add')
  39. screen.wait(0.5)
  40. assert len(screen.selenium.find_elements(By.CSS_SELECTOR, '.highcharts-point')) == 3
  41. def test_removing_chart_series(screen: Screen):
  42. chart = ui.chart({
  43. 'chart': {'type': 'bar'},
  44. 'xAxis': {'categories': ['A', 'B']},
  45. 'series': [
  46. {'name': 'Alpha', 'data': [0.1, 0.2]},
  47. {'name': 'Beta', 'data': [0.3, 0.4]},
  48. ],
  49. }).classes('w-full h-64')
  50. def remove():
  51. chart.options['series'].pop(0)
  52. chart.update()
  53. ui.button('Remove', on_click=remove)
  54. screen.open('/')
  55. screen.click('Remove')
  56. screen.wait(0.5)
  57. assert len(screen.selenium.find_elements(By.CSS_SELECTOR, '.highcharts-point')) == 3
  58. def test_extra(screen: Screen):
  59. ui.chart({'chart': {'type': 'solidgauge'}}, extras=['solid-gauge'])
  60. screen.open('/')
  61. assert screen.selenium.find_elements(By.CSS_SELECTOR, '.highcharts-pane')
  62. def test_missing_extra(screen: Screen):
  63. ui.chart({'chart': {'type': 'solidgauge'}})
  64. screen.open('/')
  65. assert not screen.selenium.find_elements(By.CSS_SELECTOR, '.highcharts-pane')
  66. def test_stock_chart(screen: Screen):
  67. ui.chart({}, type='stockChart', extras=['stock'])
  68. screen.open('/')
  69. assert screen.selenium.find_elements(By.CSS_SELECTOR, '.highcharts-range-selector-buttons')
  70. def test_replace_chart(screen: Screen):
  71. with ui.row() as container:
  72. ui.chart({'series': [{'name': 'A'}]})
  73. def replace():
  74. container.clear()
  75. with container:
  76. ui.chart({'series': [{'name': 'B'}]})
  77. ui.button('Replace', on_click=replace)
  78. screen.open('/')
  79. screen.should_contain('A')
  80. screen.click('Replace')
  81. screen.should_contain('B')
  82. screen.should_not_contain('A')