Skip to content

Commit 46fd953

Browse files
authored
Merge pull request #1484 from nextcloud-libraries/chore/final-interfaces
refactor(headers): use interfaces where possible
2 parents 8b2be4f + 6a42fa9 commit 46fd953

6 files changed

Lines changed: 102 additions & 182 deletions

File tree

__tests__/headers/listHeaders.spec.ts

Lines changed: 56 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
* SPDX-License-Identifier: AGPL-3.0-or-later
44
*/
55

6-
import type { IFolder, IView } from '../../lib/index.ts'
6+
import type { IFileListHeader, IFolder, IView } from '../../lib/index.ts'
77

88
import { beforeEach, describe, expect, test, vi } from 'vitest'
9-
import { getFileListHeaders, Header, registerFileListHeaders } from '../../lib/headers/index.ts'
9+
import { getFileListHeaders, registerFileListHeader } from '../../lib/headers/index.ts'
1010
import { getRegistry } from '../../lib/registry.ts'
1111
import logger from '../../lib/utils/logger.ts'
1212

@@ -16,97 +16,71 @@ describe('FileListHeader init', () => {
1616
})
1717

1818
test('Getting empty uninitialized FileListHeader', () => {
19-
logger.debug = vi.fn()
2019
const headers = getFileListHeaders()
2120
expect(window._nc_filelistheader).toBeDefined()
2221
expect(headers).toHaveLength(0)
23-
expect(logger.debug).toHaveBeenCalledTimes(1)
2422
})
2523

2624
test('register FileListHeader', () => {
27-
logger.debug = vi.fn()
28-
const header = new Header({
25+
const header: IFileListHeader = {
2926
id: 'test',
3027
order: 1,
3128
enabled: () => true,
3229
render: () => {},
3330
updated: () => {},
34-
})
31+
}
3532

3633
expect(header.id).toBe('test')
3734
expect(header.order).toBe(1)
3835
expect(header.enabled!({} as IFolder, {} as IView)).toBe(true)
3936

40-
registerFileListHeaders(header)
37+
registerFileListHeader(header)
4138

4239
expect(window._nc_filelistheader).toHaveLength(1)
4340
expect(getFileListHeaders()).toHaveLength(1)
4441
expect(getFileListHeaders()[0]).toStrictEqual(header)
45-
expect(logger.debug).toHaveBeenCalled()
4642
})
4743

4844
test('register FileListHeader emits registry event', () => {
4945
logger.debug = vi.fn()
5046
const callback = vi.fn()
51-
const header = new Header({
47+
const header: IFileListHeader = {
5248
id: 'test',
5349
order: 1,
5450
enabled: () => true,
5551
render: () => {},
5652
updated: () => {},
57-
})
53+
}
5854

5955
getRegistry().addEventListener('register:listHeader', callback)
60-
registerFileListHeaders(header)
56+
registerFileListHeader(header)
6157
expect(callback).toHaveBeenCalled()
6258
expect(callback.mock.calls[0][0]).toBeInstanceOf(CustomEvent)
6359
expect(callback.mock.calls[0][0].type).toBe('register:listHeader')
6460
expect(callback.mock.calls[0][0].detail).toBe(header)
6561
})
6662

67-
test('getFileListHeaders() returned array is reactive', () => {
68-
logger.debug = vi.fn()
69-
70-
const headers = getFileListHeaders()
71-
// is empty for now
72-
expect(headers).toHaveLength(0)
73-
74-
const header = new Header({
75-
id: 'test',
76-
order: 1,
77-
enabled: () => true,
78-
render: () => {},
79-
updated: () => {},
80-
})
81-
82-
registerFileListHeaders(header)
83-
84-
// Now the array changed as it should be reactive
85-
expect(headers).toHaveLength(1)
86-
expect(headers[0]).toStrictEqual(header)
87-
})
88-
8963
test('Duplicate Header gets rejected', () => {
9064
logger.error = vi.fn()
91-
const header = new Header({
65+
const header: IFileListHeader = {
9266
id: 'test',
9367
order: 1,
9468
render: () => {},
9569
updated: () => {},
96-
})
70+
}
9771

98-
registerFileListHeaders(header)
72+
registerFileListHeader(header)
9973
expect(getFileListHeaders()).toHaveLength(1)
10074
expect(getFileListHeaders()[0]).toStrictEqual(header)
10175

102-
const header2 = new Header({
76+
const header2: IFileListHeader = {
10377
id: 'test',
10478
order: 2,
10579
render: () => {},
10680
updated: () => {},
107-
})
81+
}
10882

109-
registerFileListHeaders(header2)
83+
registerFileListHeader(header2)
11084
expect(getFileListHeaders()).toHaveLength(1)
11185
expect(getFileListHeaders()[0]).toStrictEqual(header)
11286
expect(logger.error).toHaveBeenCalledWith('Header test already registered', { header: header2 })
@@ -115,68 +89,54 @@ describe('FileListHeader init', () => {
11589

11690
describe('FileListHeader validate', () => {
11791
test('Missing required props', () => {
118-
expect(() => {
119-
new Header({
120-
id: null,
121-
render: () => {},
122-
updated: () => {},
123-
} as any as Header)
124-
}).toThrowError('Invalid header: id, render and updated are required')
125-
126-
expect(() => {
127-
new Header({
128-
id: '123',
129-
render: null,
130-
updated: () => {},
131-
} as any as Header)
132-
}).toThrowError('Invalid header: id, render and updated are required')
133-
134-
expect(() => {
135-
new Header({
136-
id: '123',
137-
render: () => {},
138-
updated: null,
139-
} as any as Header)
140-
}).toThrowError('Invalid header: id, render and updated are required')
92+
expect(() => registerFileListHeader({
93+
id: null,
94+
render: () => {},
95+
updated: () => {},
96+
} as unknown as IFileListHeader)).toThrowError('Invalid header: id, render and updated are required')
97+
98+
expect(() => registerFileListHeader({
99+
id: '123',
100+
render: null,
101+
updated: () => {},
102+
} as unknown as IFileListHeader)).toThrowError('Invalid header: id, render and updated are required')
103+
104+
expect(() => registerFileListHeader({
105+
id: '123',
106+
render: () => {},
107+
updated: null,
108+
} as unknown as IFileListHeader)).toThrowError('Invalid header: id, render and updated are required')
141109
})
142110
test('Invalid id', () => {
143-
expect(() => {
144-
new Header({
145-
id: true,
146-
render: () => {},
147-
updated: () => {},
148-
} as any as Header)
149-
}).toThrowError('Invalid id property')
111+
expect(() => registerFileListHeader({
112+
id: true,
113+
render: () => {},
114+
updated: () => {},
115+
} as unknown as IFileListHeader)).toThrowError('Invalid id property')
150116
})
151117
test('Invalid enabled', () => {
152-
expect(() => {
153-
new Header({
154-
id: 'test',
155-
enabled: true,
156-
render: () => {},
157-
updated: () => {},
158-
} as any as Header)
159-
}).toThrowError('Invalid enabled property')
118+
expect(() => registerFileListHeader({
119+
id: 'test',
120+
enabled: true,
121+
render: () => {},
122+
updated: () => {},
123+
} as unknown as IFileListHeader)).toThrowError('Invalid enabled property')
160124
})
161125
test('Invalid render', () => {
162-
expect(() => {
163-
new Header({
164-
id: 'test',
165-
enabled: () => {},
166-
render: true,
167-
updated: () => {},
168-
} as any as Header)
169-
}).toThrowError('Invalid render property')
126+
expect(() => registerFileListHeader({
127+
id: 'test',
128+
enabled: () => {},
129+
render: true,
130+
updated: () => {},
131+
} as unknown as IFileListHeader)).toThrowError('Invalid render property')
170132
})
171133
test('Invalid updated', () => {
172-
expect(() => {
173-
new Header({
174-
id: 'test',
175-
enabled: () => {},
176-
render: () => {},
177-
updated: true,
178-
} as any as Header)
179-
}).toThrowError('Invalid updated property')
134+
expect(() => registerFileListHeader({
135+
id: 'test',
136+
enabled: () => {},
137+
render: () => {},
138+
updated: true,
139+
} as unknown as IFileListHeader)).toThrowError('Invalid updated property')
180140
})
181141
})
182142

@@ -186,13 +146,13 @@ describe('FileListHeader exec', () => {
186146
const render = vi.fn()
187147
const updated = vi.fn()
188148

189-
const header = new Header({
149+
const header: IFileListHeader = {
190150
id: 'test',
191151
order: 1,
192152
enabled,
193153
render,
194154
updated,
195-
})
155+
}
196156

197157
expect(header.enabled).toBe(enabled)
198158
expect(header.render).toBe(render)

lib/headers/functions.ts

Lines changed: 0 additions & 43 deletions
This file was deleted.

lib/headers/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,4 @@
55

66
export type * from './listHeaders.ts'
77

8-
export { Header } from './listHeaders.ts'
9-
export { getFileListHeaders, registerFileListHeaders } from './functions.ts'
8+
export { getFileListHeaders, registerFileListHeader } from './listHeaders.ts'

0 commit comments

Comments
 (0)