test_aggrid.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. from selenium.webdriver.common.action_chains import ActionChains
  2. from selenium.webdriver.common.keys import Keys
  3. from nicegui import ui
  4. from .screen import Screen
  5. def test_update_table(screen: Screen):
  6. grid = ui.aggrid({
  7. 'columnDefs': [{'field': 'name'}, {'field': 'age'}],
  8. 'rowData': [{'name': 'Alice', 'age': 18}],
  9. })
  10. screen.open('/')
  11. screen.should_contain('Name')
  12. screen.should_contain('Age')
  13. screen.should_contain('Alice')
  14. screen.should_contain('18')
  15. grid.options['rowData'][0]['age'] = 42
  16. grid.update()
  17. screen.should_contain('42')
  18. def test_add_row(screen: Screen):
  19. grid = ui.aggrid({
  20. 'columnDefs': [{'field': 'name'}, {'field': 'age'}],
  21. 'rowData': [],
  22. })
  23. ui.button('Update', on_click=grid.update)
  24. screen.open('/')
  25. grid.options['rowData'].append({'name': 'Alice', 'age': 18})
  26. screen.click('Update')
  27. screen.wait(0.5)
  28. screen.should_contain('Alice')
  29. screen.should_contain('18')
  30. grid.options['rowData'].append({'name': 'Bob', 'age': 21})
  31. screen.click('Update')
  32. screen.wait(0.5)
  33. screen.should_contain('Alice')
  34. screen.should_contain('18')
  35. screen.should_contain('Bob')
  36. screen.should_contain('21')
  37. def test_click_cell(screen: Screen):
  38. grid = ui.aggrid({
  39. 'columnDefs': [{'field': 'name'}, {'field': 'age'}],
  40. 'rowData': [{'name': 'Alice', 'age': 18}],
  41. })
  42. grid.on('cellClicked', lambda msg: ui.label(f'{msg["args"]["data"]["name"]} has been clicked!'))
  43. screen.open('/')
  44. screen.click('Alice')
  45. screen.should_contain('Alice has been clicked!')
  46. def test_html_columns(screen: Screen):
  47. ui.aggrid({
  48. 'columnDefs': [{'field': 'name'}, {'field': 'age'}],
  49. 'rowData': [{'name': '<span class="text-bold">Alice</span>', 'age': 18}],
  50. }, html_columns=[0])
  51. screen.open('/')
  52. screen.should_contain('Alice')
  53. screen.should_not_contain('<span')
  54. assert 'text-bold' in screen.find('Alice').get_attribute('class')
  55. def test_call_api_method_with_argument(screen: Screen):
  56. grid = ui.aggrid({
  57. 'columnDefs': [{'field': 'name', 'filter': True}],
  58. 'rowData': [{'name': 'Alice'}, {'name': 'Bob'}, {'name': 'Carol'}],
  59. })
  60. filter = {'name': {'filterType': 'text', 'type': 'equals', 'filter': 'Alice'}}
  61. ui.button('Filter', on_click=lambda: grid.call_api_method('setFilterModel', filter))
  62. screen.open('/')
  63. screen.should_contain('Alice')
  64. screen.should_contain('Bob')
  65. screen.should_contain('Carol')
  66. screen.click('Filter')
  67. screen.should_contain('Alice')
  68. screen.should_not_contain('Bob')
  69. screen.should_not_contain('Carol')
  70. def test_get_selected_rows(screen: Screen):
  71. grid = ui.aggrid({
  72. 'columnDefs': [{'field': 'name'}],
  73. 'rowData': [{'name': 'Alice'}, {'name': 'Bob'}, {'name': 'Carol'}],
  74. 'rowSelection': 'multiple',
  75. })
  76. async def get_selected_rows():
  77. ui.label(str(await grid.get_selected_rows()))
  78. ui.button('Get selected rows', on_click=get_selected_rows)
  79. async def get_selected_row():
  80. ui.label(str(await grid.get_selected_row()))
  81. ui.button('Get selected row', on_click=get_selected_row)
  82. screen.open('/')
  83. screen.click('Alice')
  84. screen.find('Bob')
  85. ActionChains(screen.selenium).key_down(Keys.SHIFT).click(screen.find('Bob')).key_up(Keys.SHIFT).perform()
  86. screen.click('Get selected rows')
  87. screen.should_contain("[{'name': 'Alice'}, {'name': 'Bob'}]")
  88. screen.click('Get selected row')
  89. screen.should_contain("{'name': 'Alice'}")