11import { select } from '@inquirer/prompts' ;
22import { vol } from 'memfs' ;
33import { MEMFS_VOLUME } from '@code-pushup/test-utils' ;
4+ import { logger } from '@code-pushup/utils' ;
45import { addCodePushUpCommand , promptSetupMode } from './monorepo.js' ;
56import type { WizardProject } from './types.js' ;
67import { createTree } from './virtual-fs.js' ;
@@ -10,45 +11,93 @@ vi.mock('@inquirer/prompts', () => ({
1011} ) ) ;
1112
1213describe ( 'promptSetupMode' , ( ) => {
13- it ( 'should return CLI arg when --mode is provided' , async ( ) => {
14- await expect ( promptSetupMode ( 'nx' , { mode : 'standalone' } ) ) . resolves . toBe (
15- 'standalone' ,
14+ it ( 'should skip detection when --mode standalone is provided' , async ( ) => {
15+ await expect (
16+ promptSetupMode ( MEMFS_VOLUME , { mode : 'standalone' } ) ,
17+ ) . resolves . toStrictEqual ( { mode : 'standalone' , tool : null } ) ;
18+ expect ( select ) . not . toHaveBeenCalled ( ) ;
19+ } ) ;
20+
21+ it ( 'should detect tool when --mode monorepo is provided' , async ( ) => {
22+ vol . fromJSON (
23+ { 'pnpm-workspace.yaml' : 'packages:\n - packages/*' } ,
24+ MEMFS_VOLUME ,
1625 ) ;
26+
27+ await expect (
28+ promptSetupMode ( MEMFS_VOLUME , { mode : 'monorepo' } ) ,
29+ ) . resolves . toStrictEqual ( { mode : 'monorepo' , tool : 'pnpm' } ) ;
1730 expect ( select ) . not . toHaveBeenCalled ( ) ;
1831 } ) ;
1932
33+ it ( 'should fall back to standalone with warning when --mode monorepo but no tool detected' , async ( ) => {
34+ vol . fromJSON ( { 'package.json' : '{}' } , MEMFS_VOLUME ) ;
35+
36+ await expect (
37+ promptSetupMode ( MEMFS_VOLUME , { mode : 'monorepo' } ) ,
38+ ) . resolves . toStrictEqual ( { mode : 'standalone' , tool : null } ) ;
39+ expect ( logger . warn ) . toHaveBeenCalledWith (
40+ expect . stringContaining ( 'falling back to standalone' ) ,
41+ ) ;
42+ } ) ;
43+
2044 it ( 'should auto-select monorepo when --yes and tool detected' , async ( ) => {
21- await expect ( promptSetupMode ( 'nx' , { yes : true } ) ) . resolves . toBe (
22- 'monorepo' ,
45+ vol . fromJSON (
46+ { 'pnpm-workspace.yaml' : 'packages:\n - packages/*' } ,
47+ MEMFS_VOLUME ,
2348 ) ;
49+
50+ await expect (
51+ promptSetupMode ( MEMFS_VOLUME , { yes : true } ) ,
52+ ) . resolves . toStrictEqual ( { mode : 'monorepo' , tool : 'pnpm' } ) ;
2453 expect ( select ) . not . toHaveBeenCalled ( ) ;
2554 } ) ;
2655
2756 it ( 'should auto-select standalone when --yes and no tool' , async ( ) => {
28- await expect ( promptSetupMode ( null , { yes : true } ) ) . resolves . toBe (
29- 'standalone' ,
30- ) ;
57+ vol . fromJSON ( { 'package.json' : '{}' } , MEMFS_VOLUME ) ;
58+
59+ await expect (
60+ promptSetupMode ( MEMFS_VOLUME , { yes : true } ) ,
61+ ) . resolves . toStrictEqual ( { mode : 'standalone' , tool : null } ) ;
3162 } ) ;
3263
3364 it ( 'should prompt interactively with monorepo pre-selected when tool detected' , async ( ) => {
65+ vol . fromJSON (
66+ { 'pnpm-workspace.yaml' : 'packages:\n - packages/*' } ,
67+ MEMFS_VOLUME ,
68+ ) ;
3469 vi . mocked ( select ) . mockResolvedValue ( 'monorepo' ) ;
3570
36- await promptSetupMode ( 'pnpm' , { } ) ;
71+ await promptSetupMode ( MEMFS_VOLUME , { } ) ;
3772
3873 expect ( select ) . toHaveBeenCalledWith (
3974 expect . objectContaining ( { default : 'monorepo' } ) ,
4075 ) ;
4176 } ) ;
4277
43- it ( 'should prompt interactively with standalone pre-selected when no tool detected' , async ( ) => {
78+ it ( 'should prompt interactively with standalone pre-selected when no tool' , async ( ) => {
79+ vol . fromJSON ( { 'package.json' : '{}' } , MEMFS_VOLUME ) ;
4480 vi . mocked ( select ) . mockResolvedValue ( 'standalone' ) ;
4581
46- await promptSetupMode ( null , { } ) ;
82+ await promptSetupMode ( MEMFS_VOLUME , { } ) ;
4783
4884 expect ( select ) . toHaveBeenCalledWith (
4985 expect . objectContaining ( { default : 'standalone' } ) ,
5086 ) ;
5187 } ) ;
88+
89+ it ( 'should fall back to standalone with warning when user selects monorepo but no tool detected' , async ( ) => {
90+ vol . fromJSON ( { 'package.json' : '{}' } , MEMFS_VOLUME ) ;
91+ vi . mocked ( select ) . mockResolvedValue ( 'monorepo' ) ;
92+
93+ await expect ( promptSetupMode ( MEMFS_VOLUME , { } ) ) . resolves . toStrictEqual ( {
94+ mode : 'standalone' ,
95+ tool : null ,
96+ } ) ;
97+ expect ( logger . warn ) . toHaveBeenCalledWith (
98+ expect . stringContaining ( 'falling back to standalone' ) ,
99+ ) ;
100+ } ) ;
52101} ) ;
53102
54103describe ( 'addCodePushUpCommand' , ( ) => {
0 commit comments