aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files/src/utils/filesViews.spec.ts
blob: e8c2ab3a6c193e06345f06dc1afbb06d9d18da25 (plain)
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)
}