@@ -11,12 +11,13 @@ import { describe, it, expect, vi, beforeEach } from 'vitest';
1111import { render , screen , waitFor } from '@testing-library/react' ;
1212import userEvent from '@testing-library/user-event' ;
1313
14- const { openMock, validateMock } = vi . hoisted ( ( ) => ( {
15- openMock : vi . fn ( ) ,
14+ const { validateMock } = vi . hoisted ( ( ) => ( {
1615 validateMock : vi . fn ( ) ,
1716} ) ) ;
1817
19- vi . mock ( '@tauri-apps/plugin-dialog' , ( ) => ( { open : openMock } ) ) ;
18+ // `@tauri-apps/plugin-dialog` is mocked globally in setup.ts (open: vi.fn()).
19+ // We reconfigure that shared mock per-test via vi.importMock (a static import
20+ // of this mocked-only package isn't Vite-resolvable from the test).
2021vi . mock ( '@/lib/api/workspaceBindings' , ( ) => ( { validateWorkspaceRoot : validateMock } ) ) ;
2122vi . mock ( '@/lib/api/featureSets' , ( ) => ( {
2223 isStarterFeatureSet : ( fs : { feature_set_type : string } ) =>
@@ -50,7 +51,6 @@ const props = (over: any = {}) => ({
5051
5152describe ( 'WorkspaceSetupWizard' , ( ) => {
5253 beforeEach ( ( ) => {
53- openMock . mockReset ( ) ;
5454 validateMock . mockReset ( ) ;
5555 } ) ;
5656
@@ -87,6 +87,25 @@ describe('WorkspaceSetupWizard', () => {
8787 expect ( p . onClose ) . not . toHaveBeenCalled ( ) ;
8888 } ) ;
8989
90+ it ( 'does not offer an already-mapped folder in the detected list' , ( ) => {
91+ // The quick-pick list filters out folders that already have a binding, so a
92+ // mapped folder can't be re-picked there; an unmapped one is still offered.
93+ // (Picking a mapped folder via the OS dialog is guarded separately by the
94+ // alreadyMapped check, which disables Next and shows an inline error.)
95+ render (
96+ < WorkspaceSetupWizard
97+ { ...props ( {
98+ reportedRoots : [ '/proj/app' , '/proj/other' ] ,
99+ existingBindings : [
100+ { id : 'b1' , workspace_root : '/proj/app' , space_id : 's1' , feature_set_ids : [ 'fs_starter' ] } ,
101+ ] ,
102+ } ) }
103+ />
104+ ) ;
105+ expect ( screen . queryByRole ( 'button' , { name : / \/ p r o j \/ a p p $ / } ) ) . toBeNull ( ) ;
106+ expect ( screen . getByRole ( 'button' , { name : / \/ p r o j \/ o t h e r $ / } ) ) . toBeTruthy ( ) ;
107+ } ) ;
108+
90109 it ( 'lets you go Back from a later step' , async ( ) => {
91110 const user = userEvent . setup ( ) ;
92111 render ( < WorkspaceSetupWizard { ...props ( ) } /> ) ;
0 commit comments