Skip to content

Commit eb171c7

Browse files
committed
chore: add tests
1 parent a22bdd9 commit eb171c7

1 file changed

Lines changed: 62 additions & 0 deletions

File tree

test/unit/install-scripts.spec.ts

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import { describe, expect, it } from 'vitest'
2+
import { extractInstallScriptsInfo } from '../../app/utils/install-scripts'
3+
4+
describe('extractInstallScriptsInfo', () => {
5+
it('returns null when no install scripts exist', () => {
6+
expect(extractInstallScriptsInfo(undefined)).toBeNull()
7+
expect(extractInstallScriptsInfo({})).toBeNull()
8+
expect(extractInstallScriptsInfo({ build: 'vite build', test: 'vitest' })).toBeNull()
9+
})
10+
11+
it('detects all install script types with content', () => {
12+
const scripts = {
13+
preinstall: 'node check.js',
14+
install: 'node-gyp rebuild',
15+
postinstall: 'node setup.js',
16+
build: 'vite build', // should be ignored
17+
}
18+
const result = extractInstallScriptsInfo(scripts)
19+
expect(result).toEqual({
20+
scripts: ['preinstall', 'install', 'postinstall'],
21+
content: {
22+
preinstall: 'node check.js',
23+
install: 'node-gyp rebuild',
24+
postinstall: 'node setup.js',
25+
},
26+
npxDependencies: {},
27+
})
28+
})
29+
30+
it('extracts npx packages with versions and flags', () => {
31+
const scripts = {
32+
preinstall: 'npx only-allow pnpm',
33+
postinstall: 'npx -y prisma@5.0.0 generate && npx --yes @scope/pkg db push',
34+
}
35+
const result = extractInstallScriptsInfo(scripts)
36+
expect(result).toEqual({
37+
scripts: ['preinstall', 'postinstall'],
38+
content: {
39+
preinstall: 'npx only-allow pnpm',
40+
postinstall: 'npx -y prisma@5.0.0 generate && npx --yes @scope/pkg db push',
41+
},
42+
npxDependencies: {
43+
'only-allow': 'latest',
44+
'prisma': '5.0.0',
45+
'@scope/pkg': 'latest',
46+
},
47+
})
48+
})
49+
50+
it('ignores npx in non-install scripts and built-in commands', () => {
51+
const scripts = {
52+
prepare: 'npx husky install', // ignored - not install script
53+
postinstall: 'npx node script.js', // node is filtered as builtin
54+
}
55+
const result = extractInstallScriptsInfo(scripts)
56+
expect(result).toEqual({
57+
scripts: ['postinstall'],
58+
content: { postinstall: 'npx node script.js' },
59+
npxDependencies: {},
60+
})
61+
})
62+
})

0 commit comments

Comments
 (0)