-
-
Notifications
You must be signed in to change notification settings - Fork 412
/
multiple-config-files.test.js
137 lines (102 loc) Β· 5.28 KB
/
multiple-config-files.test.js
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
import './__mocks__/resolveConfig.js'
import './__mocks__/dynamicImport.js'
import path from 'node:path'
import { jest as jestGlobals } from '@jest/globals'
import { normalizePath } from '../../lib/normalizePath.js'
import { withGitIntegration } from './__utils__/withGitIntegration.js'
jestGlobals.setTimeout(20000)
jestGlobals.retryTimes(2)
describe('lint-staged', () => {
test(
'supports multiple configuration files',
withGitIntegration(async ({ execGit, gitCommit, readFile, writeFile }) => {
// Add some empty files
await writeFile('file.js', '')
await writeFile('deeper/file.js', '')
await writeFile('deeper/even/file.js', '')
await writeFile('deeper/even/deeper/file.js', '')
await writeFile('a/very/deep/file/path/file.js', '')
const echoJSConfig = (echo) =>
`module.exports = { '*.js': (files) => files.map((f) => \`echo "${echo}" > \${f}\`) }`
await writeFile('.lintstagedrc.js', echoJSConfig('level-0'))
await writeFile('deeper/.lintstagedrc.js', echoJSConfig('level-1'))
await writeFile('deeper/even/.lintstagedrc.js', echoJSConfig('level-2'))
// Stage all files
await execGit(['add', '.'])
// Run lint-staged with `--shell` so that tasks do their thing
await gitCommit({ lintStaged: { shell: true } })
// 'file.js' matched '.lintstagedrc.json'
expect(await readFile('file.js')).toMatch('level-0')
// 'deeper/file.js' matched 'deeper/.lintstagedrc.json'
expect(await readFile('deeper/file.js')).toMatch('level-1')
// 'deeper/even/file.js' matched 'deeper/even/.lintstagedrc.json'
expect(await readFile('deeper/even/file.js')).toMatch('level-2')
// 'deeper/even/deeper/file.js' matched from parent 'deeper/even/.lintstagedrc.json'
expect(await readFile('deeper/even/deeper/file.js')).toMatch('level-2')
// 'a/very/deep/file/path/file.js' matched '.lintstagedrc.json'
expect(await readFile('a/very/deep/file/path/file.js')).toMatch('level-0')
})
)
test(
'supports multiple configuration files with --relative',
withGitIntegration(async ({ execGit, gitCommit, readFile, writeFile }) => {
// Add some empty files
await writeFile('file.js', '')
await writeFile('deeper/file.js', '')
await writeFile('deeper/even/file.js', '')
await writeFile('deeper/even/deeper/file.js', '')
await writeFile('a/very/deep/file/path/file.js', '')
const echoJSConfig = `module.exports = { '*.js': (files) => files.map((f) => \`echo \${f} > \${f}\`) }`
await writeFile('.lintstagedrc.js', echoJSConfig)
await writeFile('deeper/.lintstagedrc.js', echoJSConfig)
await writeFile('deeper/even/.lintstagedrc.js', echoJSConfig)
// Stage all files
await execGit(['add', '.'])
// Run lint-staged with `--shell` so that tasks do their thing
await gitCommit({ lintStaged: { relative: true, shell: true } })
// 'file.js' is relative to '.'
expect(await readFile('file.js')).toMatch('file.js')
// 'deeper/file.js' is relative to 'deeper/'
expect(await readFile('deeper/file.js')).toMatch('file.js')
// 'deeper/even/file.js' is relative to 'deeper/even/'
expect(await readFile('deeper/even/file.js')).toMatch('file.js')
// 'deeper/even/deeper/file.js' is relative to parent 'deeper/even/'
expect(await readFile('deeper/even/deeper/file.js')).toMatch(normalizePath('deeper/file.js'))
// 'a/very/deep/file/path/file.js' is relative to root '.'
expect(await readFile('a/very/deep/file/path/file.js')).toMatch(
normalizePath('a/very/deep/file/path/file.js')
)
})
)
test(
'ignores multiple configs files outside cwd',
withGitIntegration(async ({ cwd, execGit, gitCommit, readFile, writeFile }) => {
// Add some empty files
await writeFile('file.js', '')
await writeFile('deeper/file.js', '')
await writeFile('deeper/even/file.js', '')
await writeFile('deeper/even/deeper/file.js', '')
await writeFile('a/very/deep/file/path/file.js', '')
const echoJSConfig = (echo) =>
`module.exports = { '*.js': (files) => files.map((f) => \`echo ${echo} > \${f}\`) }`
await writeFile('.lintstagedrc.js', echoJSConfig('level-0'))
await writeFile('deeper/.lintstagedrc.js', echoJSConfig('level-1'))
await writeFile('deeper/even/.lintstagedrc.js', echoJSConfig('level-2'))
// Stage all files
await execGit(['add', '.'])
// Run lint-staged with `--shell` so that tasks do their thing
// Run in 'deeper/' so that root config is ignored
await gitCommit({ lintStaged: { shell: true } }, path.join(cwd, 'deeper'))
// 'file.js' was ignored
expect(await readFile('file.js')).toEqual('')
// 'deeper/file.js' matched 'deeper/.lintstagedrc.json'
expect(await readFile('deeper/file.js')).toMatch('level-1')
// 'deeper/even/file.js' matched 'deeper/even/.lintstagedrc.json'
expect(await readFile('deeper/even/file.js')).toMatch('level-2')
// 'deeper/even/deeper/file.js' matched from parent 'deeper/even/.lintstagedrc.json'
expect(await readFile('deeper/even/deeper/file.js')).toMatch('level-2')
// 'a/very/deep/file/path/file.js' was ignored
expect(await readFile('a/very/deep/file/path/file.js')).toEqual('')
})
)
})