test_table.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. from nicegui import ui
  2. from .screen import Screen
  3. def test_update_table(screen: Screen):
  4. table = ui.table({
  5. 'columnDefs': [{'field': 'name'}, {'field': 'age'}],
  6. 'rowData': [{'name': 'Alice', 'age': 18}],
  7. })
  8. screen.open('/')
  9. screen.should_contain('Name')
  10. screen.should_contain('Age')
  11. screen.should_contain('Alice')
  12. screen.should_contain('18')
  13. table.options['rowData'][0]['age'] = 42
  14. table.update()
  15. screen.should_contain('42')
  16. def test_add_row(screen: Screen):
  17. table = ui.table({
  18. 'columnDefs': [{'field': 'name'}, {'field': 'age'}],
  19. 'rowData': [],
  20. })
  21. ui.button('Update', on_click=table.update)
  22. screen.open('/')
  23. table.options['rowData'].append({'name': 'Alice', 'age': 18})
  24. screen.click('Update')
  25. screen.wait(0.5)
  26. screen.should_contain('Alice')
  27. screen.should_contain('18')
  28. table.options['rowData'].append({'name': 'Bob', 'age': 21})
  29. screen.click('Update')
  30. screen.wait(0.5)
  31. screen.should_contain('Alice')
  32. screen.should_contain('18')
  33. screen.should_contain('Bob')
  34. screen.should_contain('21')
  35. def test_click_cell(screen: Screen):
  36. table = ui.table({
  37. 'columnDefs': [{'field': 'name'}, {'field': 'age'}],
  38. 'rowData': [{'name': 'Alice', 'age': 18}],
  39. })
  40. table.on('cellClicked', lambda msg: ui.label(f'{msg["args"]["data"]["name"]} has been clicked!'))
  41. screen.open('/')
  42. screen.click('Alice')
  43. screen.should_contain('Alice has been clicked!')
  44. def test_html_columns(screen: Screen):
  45. ui.table({
  46. 'columnDefs': [{'field': 'name'}, {'field': 'age'}],
  47. 'rowData': [{'name': '<span class="text-bold">Alice</span>', 'age': 18}],
  48. }, html_columns=[0])
  49. screen.open('/')
  50. screen.should_contain('Alice')
  51. screen.should_not_contain('<span')
  52. assert 'text-bold' in screen.find('Alice').get_attribute('class')
  53. def test_call_api_method_with_argument(screen: Screen):
  54. table = ui.table({
  55. 'columnDefs': [{'field': 'name', 'filter': True}],
  56. 'rowData': [{'name': 'Alice'}, {'name': 'Bob'}, {'name': 'Carol'}],
  57. })
  58. filter = {'name': {'filterType': 'text', 'type': 'equals', 'filter': 'Alice'}}
  59. ui.button('Filter', on_click=lambda: table.call_api_method('setFilterModel', filter))
  60. screen.open('/')
  61. screen.should_contain('Alice')
  62. screen.should_contain('Bob')
  63. screen.should_contain('Carol')
  64. screen.click('Filter')
  65. screen.should_contain('Alice')
  66. screen.should_not_contain('Bob')
  67. screen.should_not_contain('Carol')