diff --git a/e2e/cli-e2e/tests/collect.spec.ts b/e2e/cli-e2e/tests/collect.spec.ts index a45064011..e8998d083 100644 --- a/e2e/cli-e2e/tests/collect.spec.ts +++ b/e2e/cli-e2e/tests/collect.spec.ts @@ -55,7 +55,12 @@ describe('CLI collect', () => { it('should print report summary to stdout', async () => { const { code, stdout, stderr } = await executeProcess({ command: 'npx', - args: ['../../dist/packages/cli', 'collect', '--persist.format=stdout'], + args: [ + '../../dist/packages/cli', + 'collect', + '--verbose', + '--persist.format=stdout', + ], cwd: 'examples/react-todos-app', }); diff --git a/packages/core/src/lib/collect-and-persist.ts b/packages/core/src/lib/collect-and-persist.ts index 5fa667c85..be515c9fb 100644 --- a/packages/core/src/lib/collect-and-persist.ts +++ b/packages/core/src/lib/collect-and-persist.ts @@ -1,14 +1,16 @@ import { pluginReportSchema } from '@code-pushup/models'; +import { verboseUtils } from '@code-pushup/utils'; import { CollectOptions, collect } from './commands/collect'; import { logPersistedResults, persistReport } from './implementation/persist'; export async function collectAndPersistReports( - config: CollectOptions, + options: CollectOptions, ): Promise { - const report = await collect(config); + const { exec } = verboseUtils(options.verbose); + const report = await collect(options); - const persistResults = await persistReport(report, config); - logPersistedResults(persistResults); + const persistResults = await persistReport(report, options); + exec(() => logPersistedResults(persistResults)); // validate report and throw if invalid report.plugins.forEach(plugin => { diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index ef4457f63..a3595f92e 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1,3 +1,4 @@ +export { verboseUtils } from './lib/verbose-utils'; export { CliArgsObject, ProcessConfig, diff --git a/packages/utils/src/lib/verbose-utils.spec.ts b/packages/utils/src/lib/verbose-utils.spec.ts new file mode 100644 index 000000000..8b457e09b --- /dev/null +++ b/packages/utils/src/lib/verbose-utils.spec.ts @@ -0,0 +1,41 @@ +import { afterEach, beforeEach, describe, expect, it } from 'vitest'; +import { mockConsole, unmockConsole } from './mock/helper.mock'; +import { verboseUtils } from './verbose-utils'; + +const verboseHelper = verboseUtils(true); +const noVerboseHelper = verboseUtils(false); +describe('verbose-utils', () => { + let logs: string[] = []; + beforeEach(() => { + mockConsole(args => logs.push(args)); + }); + afterEach(() => { + logs = []; + unmockConsole(); + }); + + it('exec should work verbose', () => { + const spy = vi.fn(); + verboseHelper.exec(spy); + expect(spy).toHaveBeenCalled(); + expect(logs.length).toBe(0); + }); + + it('exec should work no-verbose', () => { + const spy = vi.fn(); + noVerboseHelper.exec(spy); + expect(spy).not.toHaveBeenCalled(); + expect(logs.length).toBe(0); + }); + + it('log should work verbose', () => { + verboseHelper.log('42'); + expect(logs.length).toBe(1); + expect(logs[0]).toBe('42'); + }); + + it('log should work no-verbose', () => { + noVerboseHelper.log('42'); + expect(logs.length).toBe(0); + }); +}); diff --git a/packages/utils/src/lib/verbose-utils.ts b/packages/utils/src/lib/verbose-utils.ts new file mode 100644 index 000000000..be984a5bc --- /dev/null +++ b/packages/utils/src/lib/verbose-utils.ts @@ -0,0 +1,20 @@ +function getLogVerbose(verbose: boolean) { + return (...args: unknown[]) => { + if (verbose) { + console.log(...args); + } + }; +} + +function getExecVerbose(verbose: boolean) { + return (fn: () => unknown) => { + if (verbose) { + fn(); + } + }; +} + +export const verboseUtils = (verbose: boolean) => ({ + log: getLogVerbose(verbose), + exec: getExecVerbose(verbose), +});