moving-ticket-overview.spec.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. // Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. import { getAllByTestId, getByTestId, within } from '@testing-library/vue'
  3. import { getByIconName } from '#tests/support/components/iconQueries.ts'
  4. import { visitView } from '#tests/support/components/visitView.ts'
  5. import { mockUserCurrent } from '#tests/support/mock-userCurrent.ts'
  6. import { mockTicketOverviewOrder } from '#tests/support/mocks/ticket-overviews.ts'
  7. import {
  8. NotificationTypes,
  9. useNotifications,
  10. } from '#shared/components/CommonNotifications/index.ts'
  11. import { getTicketOverviewStorage } from '#mobile/entities/ticket/helpers/ticketOverviewStorage.ts'
  12. const actualLocalStorage = window.localStorage
  13. describe('playing with overviews', () => {
  14. beforeEach(() => {
  15. mockUserCurrent({ id: '666' })
  16. mockTicketOverviewOrder()
  17. })
  18. afterEach(() => {
  19. window.localStorage = actualLocalStorage
  20. const { saveOverviews } = getTicketOverviewStorage()
  21. saveOverviews([])
  22. })
  23. it('loading overviews from local storage', async () => {
  24. const { saveOverviews, LOCAL_STORAGE_NAME } = getTicketOverviewStorage()
  25. saveOverviews(['1', '2'])
  26. const view = await visitView('/favorite/ticket-overviews/edit')
  27. const includedOverviewsUtils = within(
  28. await view.findByTestId('includedOverviews'),
  29. )
  30. const includedOverviews =
  31. await includedOverviewsUtils.findAllByTestId('overviewItem')
  32. expect(includedOverviews).toHaveLength(2)
  33. expect(includedOverviews[0]).toHaveTextContent('Overview 1')
  34. expect(includedOverviews[1]).toHaveTextContent('Overview 2')
  35. const excludedOverviewsUtils = within(
  36. await view.findByTestId('excludedOverviews'),
  37. )
  38. const excludedOverviews =
  39. excludedOverviewsUtils.getAllByTestId('overviewItem')
  40. expect(excludedOverviews).toHaveLength(1)
  41. expect(excludedOverviews[0]).toHaveTextContent('Overview 3')
  42. vi.stubGlobal('localStorage', {
  43. getItem: vi.fn(),
  44. setItem: vi.fn(),
  45. })
  46. await view.events.click(view.getByText('Save'))
  47. expect(localStorage.setItem).toHaveBeenCalledWith(
  48. LOCAL_STORAGE_NAME,
  49. '["1","2"]',
  50. )
  51. })
  52. it('removing/adding overviews', async () => {
  53. const { LOCAL_STORAGE_NAME } = getTicketOverviewStorage()
  54. const view = await visitView('/favorite/ticket-overviews/edit')
  55. const buttonsRemove = await view.findAllByIconName('minus')
  56. expect(buttonsRemove).toHaveLength(3)
  57. const [overviewOneButton] = buttonsRemove
  58. await view.events.click(overviewOneButton)
  59. expect(view.getAllByIconName('minus')).toHaveLength(2)
  60. const overviewOneInExcluded = getByTestId(
  61. view.getByTestId('excludedOverviews'),
  62. 'overviewItem',
  63. )
  64. expect(overviewOneInExcluded).toHaveTextContent('Overview 1')
  65. const buttonAdd = getByIconName(overviewOneInExcluded, 'plus')
  66. await view.events.click(buttonAdd)
  67. const includedOverviews = getAllByTestId(
  68. view.getByTestId('includedOverviews'),
  69. 'overviewItem',
  70. )
  71. expect(includedOverviews.at(-1)).toHaveTextContent('Overview 1')
  72. vi.stubGlobal('localStorage', {
  73. getItem: vi.fn(),
  74. setItem: vi.fn(),
  75. })
  76. await view.events.click(view.getByText('Save'))
  77. expect(localStorage.setItem).toHaveBeenCalledWith(
  78. LOCAL_STORAGE_NAME,
  79. '["2","3","1"]',
  80. )
  81. const { notify } = useNotifications()
  82. expect(notify).toHaveBeenCalledWith({
  83. id: 'overview-save',
  84. type: NotificationTypes.Success,
  85. message: 'Ticket Overview settings are saved.',
  86. })
  87. })
  88. it('gives error, when trying to save no overviews', async () => {
  89. const { saveOverviews } = getTicketOverviewStorage()
  90. saveOverviews(['1'])
  91. const view = await visitView('/favorite/ticket-overviews/edit')
  92. const buttonRemove = await view.findByIconName('minus')
  93. await view.events.click(buttonRemove)
  94. await view.events.click(view.getByText('Save'))
  95. const { notify } = useNotifications()
  96. expect(notify).toHaveBeenCalledWith({
  97. id: 'no-overview',
  98. type: NotificationTypes.Error,
  99. message: 'Please select at least one ticket overview',
  100. })
  101. })
  102. })