From 916f833ac16f3d84a443026b2d2cfad5f2aa8761 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 17 Oct 2023 00:14:19 +0200 Subject: [PATCH 1/3] feat(utils): implement verbose helper logic --- packages/core/src/lib/collect-and-persist.ts | 10 +++-- packages/utils/src/index.ts | 1 + packages/utils/src/lib/verbose-utils.spec.ts | 41 ++++++++++++++++++++ packages/utils/src/lib/verbose-utils.ts | 20 ++++++++++ 4 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 packages/utils/src/lib/verbose-utils.spec.ts create mode 100644 packages/utils/src/lib/verbose-utils.ts 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), +}); From 63f3a56ecc47ab70f194bbd5de397dfe050eda44 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 17 Oct 2023 00:26:54 +0200 Subject: [PATCH 2/3] feat(cli-e2e): fix tests --- e2e/cli-e2e/tests/collect.spec.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/e2e/cli-e2e/tests/collect.spec.ts b/e2e/cli-e2e/tests/collect.spec.ts index d807f600d..a80444061 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', '--format=stdout'], + args: [ + '../../dist/packages/cli', + 'collect', + '--verbose', + '--format=stdout', + ], cwd: 'examples/react-todos-app', }); From 2b584592f8fc6e4db361ad06755e68a9a5697e5b Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 17 Oct 2023 12:20:02 +0200 Subject: [PATCH 3/3] refactor: fix format --- e2e/cli-e2e/tests/collect.spec.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/e2e/cli-e2e/tests/collect.spec.ts b/e2e/cli-e2e/tests/collect.spec.ts index 8fe74bc62..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', '--verbose', '--persist.format=stdout'], + args: [ + '../../dist/packages/cli', + 'collect', + '--verbose', + '--persist.format=stdout', + ], cwd: 'examples/react-todos-app', });