Skip to content

Commit d9e495e

Browse files
committed
test(cli): unify yargs testing
1 parent fd176bb commit d9e495e

8 files changed

Lines changed: 40 additions & 141 deletions

e2e/cli-e2e/tests/print-config.e2e.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
PERSIST_FORMAT,
55
PERSIST_OUTPUT_DIR,
66
} from '@code-pushup/models';
7-
import { executeProcess, objectToCliArgs } from '@code-pushup/utils';
7+
import { executeProcess } from '@code-pushup/utils';
88
import { configFile, extensions } from '../mocks/utils';
99

1010
describe('print-config', () => {

packages/cli/src/lib/autorun/autorun-command.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
upload,
88
} from '@code-pushup/core';
99
import { CLI_NAME } from '../cli';
10-
import { onlyPluginsOption } from '../implementation/only-plugins-options';
10+
import { yargsOnlyPluginsOptionsDefinition } from '../implementation/only-plugins-options';
1111

1212
type AutorunOptions = CollectOptions & UploadOptions;
1313

@@ -16,9 +16,7 @@ export function yargsAutorunCommandObject() {
1616
return {
1717
command,
1818
describe: 'Shortcut for running collect followed by upload',
19-
builder: {
20-
onlyPlugins: onlyPluginsOption,
21-
},
19+
builder: yargsOnlyPluginsOptionsDefinition(),
2220
handler: async <T>(args: ArgumentsCamelCase<T>) => {
2321
console.info(chalk.bold(CLI_NAME));
2422
console.info(chalk.gray(`Run ${command}...`));

packages/cli/src/lib/autorun/autorun-command.unit.test.ts

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import { bundleRequire } from 'bundle-require';
22
import { vol } from 'memfs';
3-
import { beforeEach, describe, expect, it, vi } from 'vitest';
3+
import { describe, expect, it, vi } from 'vitest';
44
import { PortalUploadArgs, uploadToPortal } from '@code-pushup/portal-client';
55
import { collectAndPersistReports } from '@code-pushup/core';
6-
import { MINIMAL_REPORT_MOCK } from '@code-pushup/testing-utils';
7-
import { objectToCliArgs } from '@code-pushup/utils';
6+
import { MEMFS_VOLUME, MINIMAL_REPORT_MOCK } from '@code-pushup/testing-utils';
87
import { DEFAULT_CLI_CONFIGURATION } from '../../../mocks/constants';
98
import { yargsCli } from '../yargs-cli';
109
import { yargsAutorunCommandObject } from './autorun-command';
@@ -17,36 +16,29 @@ vi.mock('@code-pushup/core', async () => {
1716
};
1817
});
1918

20-
const cli = (options = {}) =>
21-
yargsCli(
22-
objectToCliArgs({
23-
_: 'autorun',
24-
verbose: true,
25-
config: '/test/code-pushup.config.ts',
26-
'persist.outputDir': '/test',
27-
...options,
28-
}),
29-
{
30-
...DEFAULT_CLI_CONFIGURATION,
31-
commands: [yargsAutorunCommandObject()],
32-
},
33-
);
34-
3519
describe('autorun-command', () => {
36-
beforeEach(() => {
20+
it('should call collect and upload with correct parameters', async () => {
3721
vol.fromJSON(
3822
{
3923
'my-report.json': JSON.stringify(MINIMAL_REPORT_MOCK),
4024
'code-pushup.config.ts': '', // only needs to exist for stat inside readCodePushupConfig
4125
},
42-
'/test',
26+
MEMFS_VOLUME,
4327
);
44-
});
4528

46-
it('should call collect and upload with correct parameters', async () => {
47-
await cli({
48-
'persist.filename': 'my-report',
49-
}).parseAsync();
29+
await yargsCli(
30+
[
31+
'autorun',
32+
'--verbose',
33+
'--config=/test/code-pushup.config.ts',
34+
'--persist.filename=my-report',
35+
'--persist.outputDir=/test',
36+
],
37+
{
38+
...DEFAULT_CLI_CONFIGURATION,
39+
commands: [yargsAutorunCommandObject()],
40+
},
41+
).parseAsync();
5042

5143
expect(bundleRequire).toHaveBeenCalledWith({
5244
format: 'esm',

packages/cli/src/lib/collect/collect-command.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,14 @@ import {
55
collectAndPersistReports,
66
} from '@code-pushup/core';
77
import { CLI_NAME } from '../cli';
8-
import { onlyPluginsOption } from '../implementation/only-plugins-options';
8+
import { yargsOnlyPluginsOptionsDefinition } from '../implementation/only-plugins-options';
99

1010
export function yargsCollectCommandObject(): CommandModule {
1111
const command = 'collect';
1212
return {
1313
command,
1414
describe: 'Run Plugins and collect results',
15-
builder: {
16-
onlyPlugins: onlyPluginsOption,
17-
},
15+
builder: yargsOnlyPluginsOptionsDefinition(),
1816
handler: async <T>(args: ArgumentsCamelCase<T>) => {
1917
const options = args as unknown as CollectAndPersistReportsOptions;
2018
console.info(chalk.bold(CLI_NAME));

packages/cli/src/lib/implementation/core-config-options.integration.test.ts

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

packages/cli/src/lib/implementation/global-options.integration.test.ts

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

packages/cli/src/lib/implementation/only-plugin-options.integration.test.ts

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

packages/cli/src/lib/yargs-cli.integration.test.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ import { CoreConfig } from '@code-pushup/models';
33
import {
44
CoreConfigCliOptions,
55
GeneralCliOptions,
6+
OnlyPluginsOptions,
67
} from './implementation/model';
8+
import { yargsOnlyPluginsOptionsDefinition } from './implementation/only-plugins-options';
79
import { options } from './options';
810
import { yargsCli } from './yargs-cli';
911

@@ -23,6 +25,14 @@ describe('yargsCli', () => {
2325
expect(parsedArgv.config).toBe('code-pushup.config.js');
2426
});
2527

28+
it('should parse an empty array as a default onlyPlugins option', async () => {
29+
const parsedArgv = await yargsCli<GeneralCliOptions & OnlyPluginsOptions>(
30+
[],
31+
{ options: { ...options, ...yargsOnlyPluginsOptionsDefinition() } },
32+
).parseAsync();
33+
expect(parsedArgv.onlyPlugins).toEqual([]);
34+
});
35+
2636
it('should parse a single boolean negated argument', async () => {
2737
const parsedArgv = await yargsCli<GeneralCliOptions>(['--no-progress'], {
2838
options,
@@ -43,7 +53,7 @@ describe('yargsCli', () => {
4353
['--persist.format=md', '--persist.format=json'],
4454
{ options },
4555
).parseAsync();
46-
expect(parsedArgv.persist.format).toEqual(['md', 'json']);
56+
expect(parsedArgv?.persist?.format).toEqual(['md', 'json']);
4757
});
4858

4959
it('should parse global options correctly', async () => {
@@ -64,7 +74,9 @@ describe('yargsCli', () => {
6474
});
6575

6676
it('should handle global options and middleware argument overrides correctly', async () => {
67-
const parsedArgv = await yargsCli<GeneralCliOptions & CoreConfigCliOptions>(
77+
const parsedArgv = await yargsCli<
78+
GeneralCliOptions & CoreConfigCliOptions & OnlyPluginsOptions
79+
>(
6880
[
6981
'--verbose',
7082
'--persist.format=md',
@@ -74,8 +86,10 @@ describe('yargsCli', () => {
7486
'--upload.project=code-push-down',
7587
'--upload.server=https://code-pushdown.com/api',
7688
'--upload.apiKey=some-api-key',
89+
'--onlyPlugins=lighthouse',
90+
'--onlyPlugins=eslint',
7791
],
78-
{ options },
92+
{ options: { ...options, ...yargsOnlyPluginsOptionsDefinition() } },
7993
).parseAsync();
8094
expect(parsedArgv).toEqual(
8195
expect.objectContaining({
@@ -95,6 +109,7 @@ describe('yargsCli', () => {
95109
server: 'https://code-pushdown.com/api',
96110
apiKey: 'some-api-key',
97111
}),
112+
onlyPlugins: ['lighthouse', 'eslint'],
98113
}),
99114
);
100115
});

0 commit comments

Comments
 (0)