Skip to content

Commit b1e4978

Browse files
committed
feat(tests): Add test cases for asset name handling
Signed-off-by: Ferdinand Thiessen <[email protected]>
1 parent 0f61f77 commit b1e4978

File tree

2 files changed

+63
-3
lines changed

2 files changed

+63
-3
lines changed

__tests__/appconfig.spec.ts

+39-3
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
*
44
* SPDX-License-Identifier: AGPL-3.0-or-later
55
*/
6-
7-
import { build } from 'vite'
86
// ok as this is just for tests
97
// eslint-disable-next-line n/no-extraneous-import
10-
import type { RollupOutput, OutputChunk } from 'rollup'
8+
import type { RollupOutput, OutputOptions, OutputChunk } from 'rollup'
9+
import { build, resolveConfig } from 'vite'
1110
import { describe, it, expect } from 'vitest'
1211
import { createAppConfig } from '../lib/appConfig'
1312
import { fileURLToPath } from 'url'
1413
import { resolve } from 'path'
14+
import { LibraryOptions } from '../lib/libConfig'
1515

1616
const __dirname = fileURLToPath(new URL('.', import.meta.url))
1717

@@ -32,4 +32,40 @@ describe('app config', () => {
3232
expect(code.includes('process.env')).toBe(false)
3333
expect(code).toMatchSnapshot()
3434
})
35+
36+
it('moves CSS assets to css/', async () => {
37+
const resolved = await createConfig('build', 'development')
38+
39+
const output = resolved.build.rollupOptions.output as OutputOptions
40+
expect(typeof output?.assetFileNames).toBe('function')
41+
const assetFileNames = output?.assetFileNames as ((chunkInfo: unknown) => string)
42+
expect(assetFileNames({ name: 'some.css' })).toBe('css/@nextcloud-vite-config-[name].css')
43+
expect(assetFileNames({ name: 'other/file.css' })).toBe('css/@nextcloud-vite-config-[name].css')
44+
})
45+
46+
it('moves image assets to img/', async () => {
47+
const resolved = await createConfig('build', 'development')
48+
49+
const output = resolved.build.rollupOptions.output as OutputOptions
50+
expect(typeof output?.assetFileNames).toBe('function')
51+
const assetFileNames = output?.assetFileNames as ((chunkInfo: unknown) => string)
52+
expect(assetFileNames({ name: 'some.png' })).toBe('img/[name][extname]')
53+
expect(assetFileNames({ name: 'some.svg' })).toBe('img/[name][extname]')
54+
expect(assetFileNames({ name: 'some.jpg' })).toBe('img/[name][extname]')
55+
expect(assetFileNames({ name: 'some.ico' })).toBe('img/[name][extname]')
56+
})
57+
58+
it('allow custom asset names', async () => {
59+
const resolved = await createConfig('build', 'development', { assetFileNames: (({ name }) => name === 'main.css' ? 'css/app-styles.css' : undefined) as never })
60+
61+
const output = resolved.build.rollupOptions.output as OutputOptions
62+
expect(typeof output?.assetFileNames).toBe('function')
63+
const assetFileNames = output?.assetFileNames as ((chunkInfo: unknown) => string)
64+
expect(assetFileNames({ name: 'main.css' })).toBe('css/app-styles.css')
65+
expect(assetFileNames({ name: 'foo.css' })).toBe('css/@nextcloud-vite-config-[name].css')
66+
})
67+
68+
const createConfig = async (command: 'build' | 'serve' = 'build', mode: 'development' | 'production' = 'production', options?: LibraryOptions) => await resolveConfig(await createAppConfig({
69+
main: 'src/main.js',
70+
}, options)({ command, mode, ssrBuild: false }), command)
3571
})

__tests__/libconfig.spec.ts

+24
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,30 @@ describe('library config', () => {
4646
// and minify disabled
4747
expect(resolved.build.minify).toBe(false)
4848
})
49+
50+
it('keep name without inlining the CSS assets ', async () => {
51+
const resolved = await createConfig('build', 'development')
52+
53+
expect(resolved.build.rollupOptions.output?.[0].assetFileNames).not.toBe(undefined)
54+
expect(resolved.build.rollupOptions.output?.[0].assetFileNames({ name: 'some.css' })).toBe('[name].css')
55+
expect(resolved.build.rollupOptions.output?.[0].assetFileNames({ name: 'some.nfo' })).toBe('assets/[name]-[hash][extname]')
56+
})
57+
58+
it('move CSS files to asset directory when inlining CSS', async () => {
59+
const resolved = await createConfig('build', 'development', { inlineCSS: true })
60+
61+
expect(resolved.build.rollupOptions.output?.[0].assetFileNames).not.toBe(undefined)
62+
expect(resolved.build.rollupOptions.output?.[0].assetFileNames({ name: 'some.css' })).toBe('assets/[name]-[hash][extname]')
63+
expect(resolved.build.rollupOptions.output?.[0].assetFileNames({ name: 'some.nfo' })).toBe('assets/[name]-[hash][extname]')
64+
})
65+
66+
it('allow custom asset names', async () => {
67+
const resolved = await createConfig('build', 'development', { assetFileNames: (({ name }) => name === 'foo.css' ? 'bar.css' : undefined) as never })
68+
69+
expect(resolved.build.rollupOptions.output?.[0].assetFileNames).not.toBe(undefined)
70+
expect(resolved.build.rollupOptions.output?.[0].assetFileNames({ name: 'foo.css' })).toBe('bar.css')
71+
expect(resolved.build.rollupOptions.output?.[0].assetFileNames({ name: 'baz.css' })).toBe('[name].css')
72+
})
4973
})
5074

5175
const createConfig = async (command: 'build' | 'serve' = 'build', mode: 'development' | 'production' = 'production', options?: LibraryOptions) => await resolveConfig(await createLibConfig({

0 commit comments

Comments
 (0)