1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- import { computed } from 'vue'
- import { visitView } from '#tests/support/components/visitView.ts'
- import * as utilsBrowser from '#shared/utils/browser.ts'
- import * as utilsPWA from '#shared/utils/pwa.ts'
- import type { Mock } from 'vitest'
- const utilsPWAmock = vi.mocked(utilsPWA)
- const utilsBrowsermock = vi.mocked(utilsBrowser)
- vi.mock('#shared/utils/browser.ts')
- vi.mock('#shared/utils/pwa.ts')
- const mockPWA = ({
- canInstallPWA = false,
- isStandalone = false,
- installPWA = vi.fn(),
- }: {
- canInstallPWA?: boolean
- isStandalone?: boolean
- installPWA?: Mock
- }) => {
- utilsPWAmock.usePWASupport.mockReturnValue({
- canInstallPWA: computed(() => canInstallPWA),
- installPWA,
- })
- vi.spyOn(utilsPWA, 'isStandalone').mockReturnValue(isStandalone)
- }
- describe('Installing Zammad as PWA', () => {
- test("cannot install zammad as PWA, so user doesn't see a button", async () => {
- mockPWA({ canInstallPWA: false, isStandalone: false })
- const view = await visitView('/account')
- expect(view.queryByText('Install')).not.toBeInTheDocument()
- })
- test("already opened as PWA, so user doesn't see a button", async () => {
- mockPWA({ canInstallPWA: false, isStandalone: true })
- const view = await visitView('/account')
- expect(view.queryByText('Install')).not.toBeInTheDocument()
- })
- test('installing PWA, when prompt event is available', async () => {
- const installPWA = vi.fn()
- mockPWA({ canInstallPWA: true, isStandalone: false, installPWA })
- const view = await visitView('/account')
- const install = view.getByText('Install App')
- await view.events.click(install)
- expect(installPWA).toHaveBeenCalled()
- })
- test('installing PWA on iOS - show instructions', async () => {
- utilsBrowsermock.browser.name = 'Safari'
- utilsBrowsermock.os.name = 'iOS'
- mockPWA({ canInstallPWA: false, isStandalone: false })
- const view = await visitView('/account')
- const install = view.getByText('Install App')
- await view.events.click(install)
- expect(
- view.getByText(/To install Zammad as an app, press/),
- ).toBeInTheDocument()
- expect(view.getByIconName('ios-share')).toBeInTheDocument()
- expect(view.getByIconName('add-square')).toBeInTheDocument()
- })
- })
|