1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
/**
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { beforeEach, describe, expect, test } from 'vitest'
import { defaultView, hasPersonalFilesView } from './filesViews.ts'
describe('hasPersonalFilesView', () => {
beforeEach(() => removeInitialState())
test('enabled if user has unlimited quota', () => {
mockInitialState('files', 'storageStats', { quota: -1 })
expect(hasPersonalFilesView()).toBe(true)
})
test('enabled if user has limited quota', () => {
mockInitialState('files', 'storageStats', { quota: 1234 })
expect(hasPersonalFilesView()).toBe(true)
})
test('disabled if user has no quota', () => {
mockInitialState('files', 'storageStats', { quota: 0 })
expect(hasPersonalFilesView()).toBe(false)
})
})
describe('defaultView', () => {
beforeEach(() => {
document.querySelectorAll('input[type="hidden"]').forEach((el) => {
el.remove()
})
})
test('Returns files view if set', () => {
mockInitialState('files', 'config', { default_view: 'files' })
expect(defaultView()).toBe('files')
})
test('Returns personal view if set and enabled', () => {
mockInitialState('files', 'config', { default_view: 'personal' })
mockInitialState('files', 'storageStats', { quota: -1 })
expect(defaultView()).toBe('personal')
})
test('Falls back to files if personal view is disabled', () => {
mockInitialState('files', 'config', { default_view: 'personal' })
mockInitialState('files', 'storageStats', { quota: 0 })
expect(defaultView()).toBe('files')
})
})
/**
* Remove the mocked initial state
*/
function removeInitialState(): void {
document.querySelectorAll('input[type="hidden"]').forEach((el) => {
el.remove()
})
}
/**
* Helper to mock an initial state value
* @param app - The app
* @param key - The key
* @param value - The value
*/
function mockInitialState(app: string, key: string, value: unknown): void {
const el = document.createElement('input')
el.value = btoa(JSON.stringify(value))
el.id = `initial-state-${app}-${key}`
el.type = 'hidden'
document.head.appendChild(el)
}
|