Skip to content

Commit 9462fdc

Browse files
committed
test(cli): introduce mocks folder, migrate reusable utils to testing-utils
1 parent f84536e commit 9462fdc

15 files changed

+172
-42
lines changed
File renamed without changes.

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
} from '@code-pushup/portal-client';
99
import { collectAndPersistReports } from '@code-pushup/core';
1010
import { report } from '@code-pushup/models/testing';
11-
import { DEFAULT_CLI_CONFIGURATION } from '../../../test/constants';
11+
import { DEFAULT_CLI_CONFIGURATION } from '../../../mocks/constants';
1212
import { yargsCli } from '../yargs-cli';
1313
import { yargsAutorunCommandObject } from './autorun-command';
1414

@@ -45,12 +45,12 @@ vi.mock('@code-pushup/core', async () => {
4545

4646
// Mock bundleRequire inside importEsmModule used for fetching config
4747
vi.mock('bundle-require', async () => {
48-
const { minimalConfig }: typeof import('@code-pushup/models/testing') =
49-
await vi.importActual('@code-pushup/models/testing');
48+
const { CORE_CONFIG_MOCK }: typeof import('@code-pushup/testing-utils') =
49+
await vi.importActual('@code-pushup/testing-utils');
5050
return {
5151
bundleRequire: vi
5252
.fn()
53-
.mockResolvedValue({ mod: { default: minimalConfig() } }),
53+
.mockResolvedValue({ mod: { default: CORE_CONFIG_MOCK } }),
5454
};
5555
});
5656

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

+8-6
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { vol } from 'memfs';
33
import { beforeEach, describe, expect, it, vi } from 'vitest';
44
import { collectAndPersistReports } from '@code-pushup/core';
55
import { report } from '@code-pushup/models/testing';
6-
import { DEFAULT_CLI_CONFIGURATION } from '../../../test/constants';
6+
import { DEFAULT_CLI_CONFIGURATION } from '../../../mocks/constants';
77
import { yargsCli } from '../yargs-cli';
88
import { yargsCollectCommandObject } from './collect-command';
99

@@ -27,10 +27,12 @@ vi.mock('@code-pushup/core', async () => {
2727

2828
// Mock bundleRequire inside importEsmModule used for fetching config
2929
vi.mock('bundle-require', async () => {
30-
const { config }: typeof import('@code-pushup/models/testing') =
31-
await vi.importActual('@code-pushup/models/testing');
30+
const { CORE_CONFIG_MOCK }: typeof import('@code-pushup/testing-utils') =
31+
await vi.importActual('@code-pushup/testing-utils');
3232
return {
33-
bundleRequire: vi.fn().mockResolvedValue({ mod: { default: config() } }),
33+
bundleRequire: vi
34+
.fn()
35+
.mockResolvedValue({ mod: { default: CORE_CONFIG_MOCK } }),
3436
};
3537
});
3638

@@ -84,7 +86,7 @@ describe('collect-command', () => {
8486
[
8587
'collect',
8688
'--config=/test/code-pushup.config.ts',
87-
'--onlyPlugins=lighthouse',
89+
'--onlyPlugins=cypress',
8890
],
8991
{
9092
...DEFAULT_CLI_CONFIGURATION,
@@ -100,7 +102,7 @@ describe('collect-command', () => {
100102
expect(collectAndPersistReports).toHaveBeenCalledWith(
101103
expect.objectContaining({
102104
config: '/test/code-pushup.config.ts',
103-
plugins: [expect.objectContaining({ slug: 'lighthouse' })],
105+
plugins: [expect.objectContaining({ slug: 'cypress' })],
104106
}),
105107
);
106108
});

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

+15-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { join } from 'node:path';
1+
import { dirname, join } from 'node:path';
2+
import { fileURLToPath } from 'node:url';
23
import { SpyInstance, describe, expect } from 'vitest';
34
import { configMiddleware } from './config-middleware';
45

@@ -8,7 +9,19 @@ describe('configMiddleware', () => {
89
beforeAll(() => {
910
cwdSpy = vi.spyOn(process, 'cwd');
1011
cwdSpy.mockReturnValue(
11-
join(process.cwd(), 'testing-utils', 'src', 'lib', 'fixtures', 'configs'),
12+
join(
13+
fileURLToPath(dirname(import.meta.url)),
14+
'..',
15+
'..',
16+
'..',
17+
'..',
18+
'..',
19+
'testing-utils',
20+
'src',
21+
'lib',
22+
'fixtures',
23+
'configs',
24+
),
1225
);
1326
});
1427

packages/cli/src/lib/print-config/print-config-command.unit.test.ts

+20-10
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,45 @@
11
import { dirname, join } from 'path';
22
import { fileURLToPath } from 'url';
33
import { SpyInstance, describe, expect } from 'vitest';
4-
import { DEFAULT_CLI_CONFIGURATION } from '../../../test/constants';
4+
import { DEFAULT_CLI_CONFIGURATION } from '../../../mocks/constants';
55
import { yargsCli } from '../yargs-cli';
66
import { yargsConfigCommandObject } from './print-config-command';
77

88
describe('print-config-command', () => {
99
let logSpy: SpyInstance;
10+
let cwdSpy: SpyInstance;
1011

1112
beforeEach(() => {
1213
logSpy = vi.spyOn(console, 'log');
14+
cwdSpy = vi.spyOn(process, 'cwd');
15+
cwdSpy.mockReturnValue(
16+
join(
17+
fileURLToPath(dirname(import.meta.url)),
18+
'..',
19+
'..',
20+
'..',
21+
'..',
22+
'..',
23+
'testing-utils',
24+
'src',
25+
'lib',
26+
'fixtures',
27+
'configs',
28+
),
29+
);
1330
});
1431

1532
afterEach(() => {
1633
logSpy.mockRestore();
34+
cwdSpy.mockRestore();
1735
});
1836

1937
it('should filter out meta arguments and kebab duplicates', async () => {
20-
const configPath = join(
21-
fileURLToPath(dirname(import.meta.url)),
22-
'..',
23-
'..',
24-
'..',
25-
'test',
26-
'all-values.config.ts',
27-
);
2838
await yargsCli(
2939
[
3040
'print-config',
3141
'--verbose',
32-
`--config=${configPath}`,
42+
`--config=code-pushup.config.ts`,
3343
'--persist.outputDir=destinationDir',
3444
],
3545
{ ...DEFAULT_CLI_CONFIGURATION, commands: [yargsConfigCommandObject()] },

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
uploadToPortal,
88
} from '@code-pushup/portal-client';
99
import { report } from '@code-pushup/models/testing';
10-
import { DEFAULT_CLI_CONFIGURATION } from '../../../test/constants';
10+
import { DEFAULT_CLI_CONFIGURATION } from '../../../mocks/constants';
1111
import { yargsCli } from '../yargs-cli';
1212
import { yargsUploadCommandObject } from './upload-command';
1313

@@ -36,12 +36,12 @@ vi.mock('fs/promises', async () => {
3636

3737
// Mock bundleRequire inside importEsmModule used for fetching config
3838
vi.mock('bundle-require', async () => {
39-
const { minimalConfig }: typeof import('@code-pushup/models/testing') =
40-
await vi.importActual('@code-pushup/models/testing');
39+
const { CORE_CONFIG_MOCK }: typeof import('@code-pushup/testing-utils') =
40+
await vi.importActual('@code-pushup/testing-utils');
4141
return {
4242
bundleRequire: vi
4343
.fn()
44-
.mockResolvedValue({ mod: { default: minimalConfig() } }),
44+
.mockResolvedValue({ mod: { default: CORE_CONFIG_MOCK } }),
4545
};
4646
});
4747

packages/cli/tsconfig.lib.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@
1111
"vite.config.integration.ts",
1212
"src/**/*.test.ts",
1313
"src/**/*.mock.ts",
14-
"test/**/*.ts"
14+
"mocks/**/*.ts"
1515
]
1616
}

packages/cli/tsconfig.test.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"include": [
88
"vite.config.unit.ts",
99
"vite.config.integration.ts",
10-
"test/**/*.ts",
10+
"mocks/**/*.ts",
1111
"src/**/*.test.ts",
1212
"src/**/*.test.tsx",
1313
"src/**/*.test.js",

testing-utils/src/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1+
export * from './lib/fixtures/configs/core-config.mock';
2+
export * from './lib/fixtures/report.mock';
13
export * from './lib/testing-utils';

testing-utils/src/lib/fixtures/code-pushup.config.ts

-14
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { join } from 'node:path';
2+
import { type CoreConfig } from '@code-pushup/models';
3+
4+
export default {
5+
persist: { outputDir: join('tmp', 'ts'), filename: 'output.json' },
6+
upload: {
7+
organization: 'code-pushup',
8+
project: 'cli-ts',
9+
apiKey: 'e2e-api-key',
10+
server: 'https://e2e.com/api',
11+
},
12+
categories: [],
13+
plugins: [
14+
{
15+
audits: [
16+
{
17+
slug: 'node-version',
18+
title: 'Node version',
19+
description: 'prints node version to file',
20+
docsUrl: 'https://nodejs.org/',
21+
},
22+
],
23+
runner: {
24+
command: 'node',
25+
args: ['-v'],
26+
outputFile: 'output.json',
27+
},
28+
groups: [],
29+
slug: 'plugin-1',
30+
title: 'plugin 1',
31+
icon: 'javascript',
32+
},
33+
],
34+
} satisfies CoreConfig;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import { CoreConfig } from '../../../../../packages/models/src';
2+
3+
export const CORE_CONFIG_MOCK = {
4+
persist: { outputDir: 'test', filename: 'output.json' },
5+
upload: {
6+
organization: 'code-pushup',
7+
project: 'cli',
8+
apiKey: 'dummy-api-key',
9+
server: 'https://example.com/api',
10+
},
11+
categories: [
12+
{
13+
slug: 'bug-prevention',
14+
title: 'Bug prevention',
15+
refs: [
16+
{
17+
type: 'audit',
18+
plugin: 'vitest',
19+
slug: 'vitest-unit-tests',
20+
weight: 1,
21+
},
22+
{
23+
type: 'audit',
24+
plugin: 'cypress',
25+
slug: 'cypress-e2e-tests',
26+
weight: 1,
27+
},
28+
],
29+
},
30+
],
31+
plugins: [
32+
{
33+
slug: 'vitest',
34+
title: 'Vitest results',
35+
icon: 'vitest',
36+
description: 'Vitest test results analysis',
37+
docsUrl: 'https://vitest.dev/',
38+
audits: [
39+
{
40+
slug: 'vitest-unit-tests',
41+
title: 'Vitest unit tests',
42+
description: 'Vitest unit tests results analysis',
43+
docsUrl: 'https://vitest.dev/',
44+
},
45+
],
46+
runner: {
47+
command: 'npx',
48+
args: ['nx run cli:unit-test'],
49+
outputFile: 'cli-unit-tests.json',
50+
},
51+
},
52+
{
53+
slug: 'cypress',
54+
title: 'Cypress results',
55+
icon: 'cypress',
56+
description: 'Cypress test results analysis',
57+
docsUrl: 'https://Cypress.dev/',
58+
audits: [
59+
{
60+
slug: 'cypress-e2e-tests',
61+
title: 'Cypress e2e tests',
62+
description: 'Cypress e2e tests results analysis',
63+
docsUrl: 'https://docs.cypress.io/',
64+
},
65+
],
66+
runner: {
67+
command: 'npx',
68+
args: ['cypress run'],
69+
outputFile: 'ui-e2e-tests.json',
70+
},
71+
},
72+
],
73+
} satisfies CoreConfig;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { type Report } from '../../../../packages/models/src';
2+
3+
export const REPORT_MOCK = {
4+
packageName: '@code-pushup/core',
5+
version: '0.0.1',
6+
date: '2023-08-16T09:00:00.000Z',
7+
duration: 666,
8+
categories: [],
9+
plugins: [],
10+
} satisfies Report;

0 commit comments

Comments
 (0)