nextcloud-sharing/lib/publicShare.spec.ts

123 строки
2.7 KiB
TypeScript

/**
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: GPL-3.0-or-later
* @vitest-environment happy-dom
*/
import { beforeEach, describe, expect, test, vi } from 'vitest'
const initialState = vi.hoisted(() => ({ loadState: vi.fn() }))
vi.mock('@nextcloud/initial-state', () => initialState)
const mockPublicShare = () => {
initialState.loadState.mockImplementation((app, key) => {
if (key === 'isPublic') {
return true
} else if (key === 'sharingToken') {
return 'modern-token'
}
throw new Error('Unexpected loadState')
})
}
const mockLegacyPublicShare = () => {
initialState.loadState.mockImplementationOnce(() => null)
const input = document.createElement('input')
input.id = 'isPublic'
input.name = 'isPublic'
input.type = 'hidden'
input.value = '1'
document.body.appendChild(input)
const token = document.createElement('input')
token.id = 'sharingToken'
token.type = 'hidden'
token.value = 'legacy-token'
document.body.appendChild(token)
}
describe('isPublicShare', () => {
beforeEach(() => {
vi.resetModules()
vi.resetAllMocks()
// reset JSDom
document.body.innerHTML = ''
})
const isPublicShare = async () => {
const { isPublicShare: publicShare } = await import('./publicShare')
return publicShare()
}
test('no public share', async () => {
initialState.loadState.mockImplementation(() => null)
expect(await isPublicShare()).toBe(false)
expect(initialState.loadState).toBeCalledWith(
'files_sharing',
'isPublic',
null,
)
})
test('public share', async () => {
mockPublicShare()
expect(await isPublicShare()).toBe(true)
expect(initialState.loadState).toBeCalledWith(
'files_sharing',
'isPublic',
null,
)
})
test('legacy public share', async () => {
mockLegacyPublicShare()
expect(await isPublicShare()).toBe(true)
})
})
describe('getSharingToken', () => {
beforeEach(() => {
vi.resetModules()
vi.resetAllMocks()
// reset happy-dom
document.body.innerHTML = ''
})
const getSharingToken = async () => {
const { getSharingToken: sharingToken } = await import('./publicShare')
return sharingToken()
}
test('no public share', async () => {
initialState.loadState.mockImplementation(() => null)
expect(await getSharingToken()).toBe(null)
expect(initialState.loadState).toBeCalledWith(
'files_sharing',
'sharingToken',
null,
)
})
test('public share', async () => {
mockPublicShare()
expect(await getSharingToken()).toBe('modern-token')
expect(initialState.loadState).toBeCalledWith(
'files_sharing',
'sharingToken',
null,
)
})
test('legacy public share', async () => {
mockLegacyPublicShare()
expect(await getSharingToken()).toBe('legacy-token')
})
})