Skip to content

Commit 112ebe7

Browse files
authored
feat(utils): implement verbose helper logic (#121)
1 parent 09ee5ac commit 112ebe7

File tree

5 files changed

+74
-5
lines changed

5 files changed

+74
-5
lines changed

e2e/cli-e2e/tests/collect.spec.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,12 @@ describe('CLI collect', () => {
5555
it('should print report summary to stdout', async () => {
5656
const { code, stdout, stderr } = await executeProcess({
5757
command: 'npx',
58-
args: ['../../dist/packages/cli', 'collect', '--persist.format=stdout'],
58+
args: [
59+
'../../dist/packages/cli',
60+
'collect',
61+
'--verbose',
62+
'--persist.format=stdout',
63+
],
5964
cwd: 'examples/react-todos-app',
6065
});
6166

packages/core/src/lib/collect-and-persist.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
import { pluginReportSchema } from '@code-pushup/models';
2+
import { verboseUtils } from '@code-pushup/utils';
23
import { CollectOptions, collect } from './commands/collect';
34
import { logPersistedResults, persistReport } from './implementation/persist';
45

56
export async function collectAndPersistReports(
6-
config: CollectOptions,
7+
options: CollectOptions,
78
): Promise<void> {
8-
const report = await collect(config);
9+
const { exec } = verboseUtils(options.verbose);
10+
const report = await collect(options);
911

10-
const persistResults = await persistReport(report, config);
11-
logPersistedResults(persistResults);
12+
const persistResults = await persistReport(report, options);
13+
exec(() => logPersistedResults(persistResults));
1214

1315
// validate report and throw if invalid
1416
report.plugins.forEach(plugin => {

packages/utils/src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export { verboseUtils } from './lib/verbose-utils';
12
export {
23
CliArgsObject,
34
ProcessConfig,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
2+
import { mockConsole, unmockConsole } from './mock/helper.mock';
3+
import { verboseUtils } from './verbose-utils';
4+
5+
const verboseHelper = verboseUtils(true);
6+
const noVerboseHelper = verboseUtils(false);
7+
describe('verbose-utils', () => {
8+
let logs: string[] = [];
9+
beforeEach(() => {
10+
mockConsole(args => logs.push(args));
11+
});
12+
afterEach(() => {
13+
logs = [];
14+
unmockConsole();
15+
});
16+
17+
it('exec should work verbose', () => {
18+
const spy = vi.fn();
19+
verboseHelper.exec(spy);
20+
expect(spy).toHaveBeenCalled();
21+
expect(logs.length).toBe(0);
22+
});
23+
24+
it('exec should work no-verbose', () => {
25+
const spy = vi.fn();
26+
noVerboseHelper.exec(spy);
27+
expect(spy).not.toHaveBeenCalled();
28+
expect(logs.length).toBe(0);
29+
});
30+
31+
it('log should work verbose', () => {
32+
verboseHelper.log('42');
33+
expect(logs.length).toBe(1);
34+
expect(logs[0]).toBe('42');
35+
});
36+
37+
it('log should work no-verbose', () => {
38+
noVerboseHelper.log('42');
39+
expect(logs.length).toBe(0);
40+
});
41+
});
+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
function getLogVerbose(verbose: boolean) {
2+
return (...args: unknown[]) => {
3+
if (verbose) {
4+
console.log(...args);
5+
}
6+
};
7+
}
8+
9+
function getExecVerbose(verbose: boolean) {
10+
return (fn: () => unknown) => {
11+
if (verbose) {
12+
fn();
13+
}
14+
};
15+
}
16+
17+
export const verboseUtils = (verbose: boolean) => ({
18+
log: getLogVerbose(verbose),
19+
exec: getExecVerbose(verbose),
20+
});

0 commit comments

Comments
 (0)