useBrowserNotifications.spec.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. import { describe } from 'vitest'
  3. import { ref } from 'vue'
  4. import { useBrowserNotifications } from '#shared/composables/useBrowserNotifications.ts'
  5. let permission = vi.hoisted((): string | undefined => 'granted')
  6. vi.mock('@vueuse/core', () => ({
  7. usePermission: () => ref(permission),
  8. }))
  9. describe('useBrowserNotifications', () => {
  10. it('should request granted notification permission', () => {
  11. const { requestNotification } = useBrowserNotifications()
  12. const requestPermissionSpy = vi.spyOn(Notification, 'requestPermission')
  13. requestNotification()
  14. expect(requestPermissionSpy).toHaveBeenCalled()
  15. })
  16. it('returns granted permission when requestNotification is called', async () => {
  17. const { requestNotification, isGranted } = useBrowserNotifications()
  18. await requestNotification()
  19. expect(isGranted.value).toBe(true)
  20. })
  21. it('has by default no notification permission', () => {
  22. permission = undefined
  23. // vi.restoreAllMocks ... does not work here
  24. const { notificationPermission, isGranted } = useBrowserNotifications()
  25. expect(notificationPermission.value).toBe(undefined)
  26. expect(isGranted.value).toBe(false)
  27. })
  28. })