useDebouncedLoading.spec.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. import { afterAll } from 'vitest'
  3. import { ref } from 'vue'
  4. import { useDebouncedLoading } from '#shared/composables/useDebouncedLoading.ts'
  5. describe('useDebouncedLoading', () => {
  6. vi.useFakeTimers()
  7. afterAll(() => {
  8. vi.useRealTimers()
  9. })
  10. it('returns loading and debouncedLoading refs', () => {
  11. const { loading, debouncedLoading } = useDebouncedLoading()
  12. expect(loading.value).toBe(false)
  13. expect(debouncedLoading.value).toBeDefined()
  14. })
  15. it('debounces a loading state and set it to true after the default of 300ms', async () => {
  16. const { loading, debouncedLoading } = useDebouncedLoading()
  17. setTimeout(() => {
  18. loading.value = true
  19. }, 300)
  20. expect(debouncedLoading.value).toBe(false)
  21. await vi.runAllTimersAsync()
  22. expect(debouncedLoading.value).toBe(true)
  23. })
  24. it('accepts isLoading ref', async () => {
  25. const { debouncedLoading } = useDebouncedLoading({
  26. isLoading: ref(true),
  27. })
  28. await vi.runAllTimersAsync()
  29. expect(debouncedLoading.value).toBe(true)
  30. })
  31. it('debounces isLoading ref and updates it after default of 300ms', async () => {
  32. const isLoading = ref(false)
  33. const { debouncedLoading } = useDebouncedLoading({
  34. isLoading,
  35. })
  36. setTimeout(() => {
  37. isLoading.value = true
  38. }, 300)
  39. await vi.runAllTimersAsync()
  40. expect(debouncedLoading.value).toBe(true)
  41. })
  42. })