useRecentSearches.spec.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. // Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. import { createPinia, setActivePinia } from 'pinia'
  3. import { waitForNextTick } from '#tests/support/utils.ts'
  4. import { useRecentSearches } from '../useRecentSearches.ts'
  5. setActivePinia(createPinia())
  6. describe('useRecentSearches', () => {
  7. beforeEach(() => {
  8. localStorage.clear()
  9. })
  10. const { recentSearches, addSearch, removeSearch, clearSearches } =
  11. useRecentSearches()
  12. test('prevents duplicate search terms', () => {
  13. addSearch('test search')
  14. addSearch('test search')
  15. expect(recentSearches.value).toEqual(['test search'])
  16. })
  17. test('maintains maximum length and removes oldest items', () => {
  18. for (let i = 1; i <= 11; i += 1) {
  19. addSearch(`search ${i}`)
  20. }
  21. expect(recentSearches.value).toEqual([
  22. 'search 2',
  23. 'search 3',
  24. 'search 4',
  25. 'search 5',
  26. 'search 6',
  27. 'search 7',
  28. 'search 8',
  29. 'search 9',
  30. 'search 10',
  31. 'search 11',
  32. ])
  33. })
  34. test('removeSearch removes a specific item', () => {
  35. clearSearches()
  36. addSearch('test 1')
  37. addSearch('test 2')
  38. expect(recentSearches.value).toEqual(['test 1', 'test 2'])
  39. removeSearch('test 1')
  40. expect(recentSearches.value).toEqual(['test 2'])
  41. })
  42. test('clearSearches removes all items', () => {
  43. addSearch('test 1')
  44. addSearch('test 2')
  45. clearSearches()
  46. expect(recentSearches.value).toEqual([])
  47. })
  48. test('persists searches in localStorage', async () => {
  49. addSearch('test storage')
  50. await waitForNextTick()
  51. const { recentSearches: newInstance } = useRecentSearches()
  52. expect(newInstance.value).toEqual(['test storage'])
  53. })
  54. })