@@ -11,12 +11,14 @@ const {
1111 mockRestartOpenCodeServer,
1212 mockGetOpenCodeImportStatus,
1313 mockListManagedSkills,
14+ mockListOpenCodeDirectoryFiles,
1415} = vi . hoisted ( ( ) => ( {
1516 mockGetOpenCodeConfigs : vi . fn ( ) ,
1617 mockUpdateOpenCodeConfig : vi . fn ( ) ,
1718 mockRestartOpenCodeServer : vi . fn ( ) ,
1819 mockGetOpenCodeImportStatus : vi . fn ( ) ,
1920 mockListManagedSkills : vi . fn ( ) ,
21+ mockListOpenCodeDirectoryFiles : vi . fn ( ) ,
2022} ) )
2123
2224vi . mock ( '@/hooks/useServerHealth' , ( ) => ( {
@@ -34,6 +36,7 @@ vi.mock('@/api/settings', () => ({
3436 restartOpenCodeServer : mockRestartOpenCodeServer ,
3537 getOpenCodeImportStatus : mockGetOpenCodeImportStatus ,
3638 listManagedSkills : mockListManagedSkills ,
39+ listOpenCodeDirectoryFiles : mockListOpenCodeDirectoryFiles ,
3740 syncOpenCodeImport : vi . fn ( ) ,
3841 upgradeOpenCode : vi . fn ( ) ,
3942 } ,
@@ -73,10 +76,39 @@ describe('OpenCodeConfigManager', () => {
7376 mockGetOpenCodeConfigs . mockResolvedValue ( { configs : [ defaultConfig ] } )
7477 mockGetOpenCodeImportStatus . mockResolvedValue ( { } )
7578 mockListManagedSkills . mockResolvedValue ( [ ] )
79+ mockListOpenCodeDirectoryFiles . mockImplementation ( ( kind : 'agents' | 'commands' ) => {
80+ if ( kind === 'commands' ) return Promise . resolve ( [ ] )
81+ return Promise . resolve ( [ ] )
82+ } )
7683 mockUpdateOpenCodeConfig . mockResolvedValue ( defaultConfig )
7784 mockRestartOpenCodeServer . mockResolvedValue ( { success : true , message : 'ok' } )
7885 } )
7986
87+ it ( 'shows uploaded command and agent directory files in settings' , async ( ) => {
88+ mockListOpenCodeDirectoryFiles . mockImplementation ( ( kind : 'agents' | 'commands' ) => {
89+ if ( kind === 'commands' ) return Promise . resolve ( [ { kind, name : 'deploy' , relativePath : 'project/deploy.md' } ] )
90+ return Promise . resolve ( [ { kind, name : 'planner' , relativePath : 'team/planner.md' } ] )
91+ } )
92+
93+ const user = userEvent . setup ( )
94+ renderWithQuery ( < OpenCodeConfigManager hideHealthStatus /> )
95+
96+ await screen . findByText ( 'Commands' )
97+ await vi . waitFor ( ( ) => {
98+ expect ( screen . getAllByText ( '1 configured' ) . length ) . toBeGreaterThanOrEqual ( 2 )
99+ } )
100+
101+ await user . click ( screen . getByRole ( 'button' , { name : / C o m m a n d s / i } ) )
102+ expect ( await screen . findByText ( '/deploy' ) ) . toBeInTheDocument ( )
103+ expect ( screen . getByText ( 'Uploaded file: project/deploy.md' ) ) . toBeInTheDocument ( )
104+
105+ const agentsButton = screen . getAllByRole ( 'button' , { name : / A g e n t s / i } ) . find ( button => button . textContent ?. startsWith ( 'Agents' ) )
106+ expect ( agentsButton ) . toBeDefined ( )
107+ await user . click ( agentsButton ! )
108+ expect ( await screen . findByText ( 'planner' ) ) . toBeInTheDocument ( )
109+ expect ( screen . getByText ( 'Uploaded file: team/planner.md' ) ) . toBeInTheDocument ( )
110+ } )
111+
80112 it ( 'optimistic delete + restart prompt' , async ( ) => {
81113 let resolveUpdate : ( config : OpenCodeConfig ) => void = ( ) => { }
82114 mockUpdateOpenCodeConfig . mockImplementationOnce ( ( ) => new Promise < OpenCodeConfig > ( ( resolve ) => {
0 commit comments