Skip to content

Commit e735bf4

Browse files
committed
test(ci): add missing unit tests for CLI helpers
1 parent db3fcce commit e735bf4

File tree

2 files changed

+253
-0
lines changed

2 files changed

+253
-0
lines changed
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
import { DEFAULT_SETTINGS } from '../constants';
2+
import { type CommandContext, createCommandContext } from './context';
3+
4+
describe('createCommandContext', () => {
5+
it('should pick CLI-related settings in standalone mode', () => {
6+
expect(
7+
createCommandContext(
8+
{
9+
bin: 'npx --no-install code-pushup',
10+
config: null,
11+
debug: false,
12+
detectNewIssues: true,
13+
directory: '/test',
14+
logger: console,
15+
monorepo: false,
16+
output: '.code-pushup',
17+
projects: null,
18+
silent: false,
19+
task: 'code-pushup',
20+
},
21+
null,
22+
),
23+
).toStrictEqual<CommandContext>({
24+
project: undefined,
25+
bin: 'npx --no-install code-pushup',
26+
directory: '/test',
27+
config: null,
28+
silent: false,
29+
output: '.code-pushup',
30+
});
31+
});
32+
33+
it('should override some settings when given monorepo project config', () => {
34+
expect(
35+
createCommandContext(
36+
{
37+
bin: 'npx --no-install code-pushup',
38+
config: null,
39+
debug: false,
40+
detectNewIssues: true,
41+
directory: '/test',
42+
logger: console,
43+
monorepo: false,
44+
output: '.code-pushup',
45+
projects: null,
46+
silent: false,
47+
task: 'code-pushup',
48+
},
49+
{
50+
name: 'ui',
51+
directory: '/test/ui',
52+
bin: 'yarn code-pushup',
53+
},
54+
),
55+
).toStrictEqual<CommandContext>({
56+
project: 'ui',
57+
bin: 'yarn code-pushup',
58+
directory: '/test/ui',
59+
config: null,
60+
silent: false,
61+
output: '.code-pushup',
62+
});
63+
});
64+
65+
it('should interpolate project name in output path for monorepo project', () => {
66+
expect(
67+
createCommandContext(
68+
{
69+
...DEFAULT_SETTINGS,
70+
output: '.code-pushup/{project}',
71+
},
72+
{
73+
name: 'website',
74+
bin: 'npx nx run website:code-pushup --',
75+
},
76+
),
77+
).toEqual(
78+
expect.objectContaining<Partial<CommandContext>>({
79+
project: 'website',
80+
bin: 'npx nx run website:code-pushup --',
81+
output: '.code-pushup/website',
82+
}),
83+
);
84+
});
85+
86+
it('should omit {project} placeholder in output path when in standalone mode', () => {
87+
expect(
88+
createCommandContext(
89+
{
90+
...DEFAULT_SETTINGS,
91+
output: '.code-pushup/{project}',
92+
},
93+
undefined,
94+
),
95+
).toEqual(
96+
expect.objectContaining<Partial<CommandContext>>({
97+
output: '.code-pushup/',
98+
}),
99+
);
100+
});
101+
});
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
import { join } from 'node:path';
2+
import {
3+
type PersistedCliFiles,
4+
findPersistedFiles,
5+
persistCliOptions,
6+
persistedCliFiles,
7+
} from './persist';
8+
9+
describe('persistCliOptions', () => {
10+
it('should create CLI arguments for standalone project', () => {
11+
expect(
12+
persistCliOptions({
13+
directory: process.cwd(),
14+
output: '.code-pushup',
15+
}),
16+
).toEqual([
17+
`--persist.outputDir=${join(process.cwd(), '.code-pushup')}`,
18+
'--persist.filename=report',
19+
'--persist.format=json',
20+
'--persist.format=md',
21+
]);
22+
});
23+
24+
it('should create CLI arguments for monorepo project', () => {
25+
expect(
26+
persistCliOptions({
27+
project: 'utils',
28+
directory: process.cwd(),
29+
output: '.code-pushup',
30+
}),
31+
).toEqual([
32+
`--persist.outputDir=${join(process.cwd(), '.code-pushup')}`,
33+
'--persist.filename=utils-report',
34+
'--persist.format=json',
35+
'--persist.format=md',
36+
]);
37+
});
38+
});
39+
40+
describe('persistedCliFiles', () => {
41+
it('should determine persisted files for standalone report', () => {
42+
expect(
43+
persistedCliFiles({
44+
directory: process.cwd(),
45+
output: '.code-pushup',
46+
}),
47+
).toEqual<PersistedCliFiles>({
48+
jsonFilePath: join(process.cwd(), '.code-pushup/report.json'),
49+
mdFilePath: join(process.cwd(), '.code-pushup/report.md'),
50+
artifactData: {
51+
rootDir: join(process.cwd(), '.code-pushup'),
52+
files: [
53+
join(process.cwd(), '.code-pushup/report.json'),
54+
join(process.cwd(), '.code-pushup/report.md'),
55+
],
56+
},
57+
});
58+
});
59+
60+
it('should determine persisted files for monorepo report', () => {
61+
expect(
62+
persistedCliFiles({
63+
directory: process.cwd(),
64+
output: '.code-pushup/auth',
65+
project: 'auth',
66+
}),
67+
).toEqual<PersistedCliFiles>({
68+
jsonFilePath: join(process.cwd(), '.code-pushup/auth/auth-report.json'),
69+
mdFilePath: join(process.cwd(), '.code-pushup/auth/auth-report.md'),
70+
artifactData: {
71+
rootDir: join(process.cwd(), '.code-pushup/auth'),
72+
files: [
73+
join(process.cwd(), '.code-pushup/auth/auth-report.json'),
74+
join(process.cwd(), '.code-pushup/auth/auth-report.md'),
75+
],
76+
},
77+
});
78+
});
79+
80+
it('should determine persisted files for diff in Markdown format only', () => {
81+
expect(
82+
persistedCliFiles({
83+
directory: process.cwd(),
84+
output: '.code-pushup',
85+
isDiff: true,
86+
formats: ['md'],
87+
}),
88+
).toEqual<PersistedCliFiles<'md'>>({
89+
mdFilePath: join(process.cwd(), '.code-pushup/report-diff.md'),
90+
artifactData: {
91+
rootDir: join(process.cwd(), '.code-pushup'),
92+
files: [join(process.cwd(), '.code-pushup/report-diff.md')],
93+
},
94+
});
95+
});
96+
});
97+
98+
describe('findPersistedFiles', () => {
99+
it('should find report files in artifact data for standalone project', () => {
100+
expect(
101+
findPersistedFiles({
102+
rootDir: join(process.cwd(), '.code-pushup'),
103+
files: [
104+
'report-diff.json',
105+
'report-diff.md',
106+
'report.json',
107+
'report.md',
108+
],
109+
}),
110+
).toEqual<PersistedCliFiles>({
111+
jsonFilePath: join(process.cwd(), '.code-pushup/report.json'),
112+
mdFilePath: join(process.cwd(), '.code-pushup/report.md'),
113+
artifactData: {
114+
rootDir: join(process.cwd(), '.code-pushup'),
115+
files: [
116+
join(process.cwd(), '.code-pushup/report.json'),
117+
join(process.cwd(), '.code-pushup/report.md'),
118+
],
119+
},
120+
});
121+
});
122+
123+
it('should find report files in artifact data for monorepo project', () => {
124+
expect(
125+
findPersistedFiles({
126+
rootDir: join(process.cwd(), '.code-pushup'),
127+
files: [
128+
'backend-report-diff.json',
129+
'backend-report-diff.md',
130+
'backend-report.json',
131+
'backend-report.md',
132+
'frontend-report-diff.json',
133+
'frontend-report-diff.md',
134+
'frontend-report.json',
135+
'frontend-report.md',
136+
'report-diff.md',
137+
],
138+
project: 'frontend',
139+
}),
140+
).toEqual<PersistedCliFiles>({
141+
jsonFilePath: join(process.cwd(), '.code-pushup/frontend-report.json'),
142+
mdFilePath: join(process.cwd(), '.code-pushup/frontend-report.md'),
143+
artifactData: {
144+
rootDir: join(process.cwd(), '.code-pushup'),
145+
files: [
146+
join(process.cwd(), '.code-pushup/frontend-report.json'),
147+
join(process.cwd(), '.code-pushup/frontend-report.md'),
148+
],
149+
},
150+
});
151+
});
152+
});

0 commit comments

Comments
 (0)