11import * as path from "path"
22
33// Use vi.hoisted to ensure mocks are available during hoisting
4- const { mockHomedir, mockStat, mockReadFile, mockReaddir, mockGetRooDirectoriesForCwd, mockGetGlobalRooDirectory } =
5- vi . hoisted ( ( ) => ( {
6- mockHomedir : vi . fn ( ) ,
7- mockStat : vi . fn ( ) ,
8- mockReadFile : vi . fn ( ) ,
9- mockReaddir : vi . fn ( ) ,
10- mockGetRooDirectoriesForCwd : vi . fn ( ) ,
11- mockGetGlobalRooDirectory : vi . fn ( ) ,
12- } ) )
4+ const {
5+ mockHomedir,
6+ mockStat,
7+ mockReadFile,
8+ mockReaddir,
9+ mockLstat,
10+ mockGetRooDirectoriesForCwd,
11+ mockGetAllRooDirectoriesForCwd,
12+ mockGetAgentsDirectoriesForCwd,
13+ mockGetGlobalRooDirectory,
14+ } = vi . hoisted ( ( ) => ( {
15+ mockHomedir : vi . fn ( ) ,
16+ mockStat : vi . fn ( ) ,
17+ mockReadFile : vi . fn ( ) ,
18+ mockReaddir : vi . fn ( ) ,
19+ mockLstat : vi . fn ( ) ,
20+ mockGetRooDirectoriesForCwd : vi . fn ( ) ,
21+ mockGetAllRooDirectoriesForCwd : vi . fn ( ) ,
22+ mockGetAgentsDirectoriesForCwd : vi . fn ( ) ,
23+ mockGetGlobalRooDirectory : vi . fn ( ) ,
24+ } ) )
1325
1426// Mock os module
1527vi . mock ( "os" , ( ) => ( {
@@ -25,12 +37,15 @@ vi.mock("fs/promises", () => ({
2537 stat : mockStat ,
2638 readFile : mockReadFile ,
2739 readdir : mockReaddir ,
40+ lstat : mockLstat ,
2841 } ,
2942} ) )
3043
3144// Mock the roo-config service
3245vi . mock ( "../../../../services/roo-config" , ( ) => ( {
3346 getRooDirectoriesForCwd : mockGetRooDirectoriesForCwd ,
47+ getAllRooDirectoriesForCwd : mockGetAllRooDirectoriesForCwd ,
48+ getAgentsDirectoriesForCwd : mockGetAgentsDirectoriesForCwd ,
3449 getGlobalRooDirectory : mockGetGlobalRooDirectory ,
3550} ) )
3651
@@ -46,7 +61,13 @@ describe("custom-instructions global .roo support", () => {
4661 vi . clearAllMocks ( )
4762 mockHomedir . mockReturnValue ( mockHomeDir )
4863 mockGetRooDirectoriesForCwd . mockReturnValue ( [ globalRooDir , projectRooDir ] )
64+ // getAllRooDirectoriesForCwd is now async and returns the same directories by default
65+ mockGetAllRooDirectoriesForCwd . mockResolvedValue ( [ globalRooDir , projectRooDir ] )
66+ // getAgentsDirectoriesForCwd returns parent directories (without .roo)
67+ mockGetAgentsDirectoriesForCwd . mockResolvedValue ( [ mockCwd ] )
4968 mockGetGlobalRooDirectory . mockReturnValue ( globalRooDir )
69+ // Default lstat to reject (file not found)
70+ mockLstat . mockRejectedValue ( new Error ( "ENOENT" ) )
5071 } )
5172
5273 afterEach ( ( ) => {
@@ -65,7 +86,11 @@ describe("custom-instructions global .roo support", () => {
6586
6687 // Mock directory reading for global rules
6788 mockReaddir . mockResolvedValueOnce ( [
68- { name : "rules.md" , isFile : ( ) => true , isSymbolicLink : ( ) => false } as any ,
89+ {
90+ name : "rules.md" ,
91+ isFile : ( ) => true ,
92+ isSymbolicLink : ( ) => false ,
93+ } as any ,
6994 ] )
7095
7196 // Mock file reading for the rules.md file
@@ -87,7 +112,11 @@ describe("custom-instructions global .roo support", () => {
87112
88113 // Mock directory reading for project rules
89114 mockReaddir . mockResolvedValueOnce ( [
90- { name : "rules.md" , isFile : ( ) => true , isSymbolicLink : ( ) => false } as any ,
115+ {
116+ name : "rules.md" ,
117+ isFile : ( ) => true ,
118+ isSymbolicLink : ( ) => false ,
119+ } as any ,
91120 ] )
92121
93122 // Mock file reading
@@ -112,8 +141,20 @@ describe("custom-instructions global .roo support", () => {
112141
113142 // Mock directory reading
114143 mockReaddir
115- . mockResolvedValueOnce ( [ { name : "global.md" , isFile : ( ) => true , isSymbolicLink : ( ) => false } as any ] )
116- . mockResolvedValueOnce ( [ { name : "project.md" , isFile : ( ) => true , isSymbolicLink : ( ) => false } as any ] )
144+ . mockResolvedValueOnce ( [
145+ {
146+ name : "global.md" ,
147+ isFile : ( ) => true ,
148+ isSymbolicLink : ( ) => false ,
149+ } as any ,
150+ ] )
151+ . mockResolvedValueOnce ( [
152+ {
153+ name : "project.md" ,
154+ isFile : ( ) => true ,
155+ isSymbolicLink : ( ) => false ,
156+ } as any ,
157+ ] )
117158
118159 // Mock file reading
119160 mockReadFile . mockResolvedValueOnce ( "global rule content" ) . mockResolvedValueOnce ( "project rule content" )
@@ -182,10 +223,18 @@ describe("custom-instructions global .roo support", () => {
182223 // Mock directory reading for mode-specific rules
183224 mockReaddir
184225 . mockResolvedValueOnce ( [
185- { name : "global-mode.md" , isFile : ( ) => true , isSymbolicLink : ( ) => false } as any ,
226+ {
227+ name : "global-mode.md" ,
228+ isFile : ( ) => true ,
229+ isSymbolicLink : ( ) => false ,
230+ } as any ,
186231 ] )
187232 . mockResolvedValueOnce ( [
188- { name : "project-mode.md" , isFile : ( ) => true , isSymbolicLink : ( ) => false } as any ,
233+ {
234+ name : "project-mode.md" ,
235+ isFile : ( ) => true ,
236+ isSymbolicLink : ( ) => false ,
237+ } as any ,
189238 ] )
190239
191240 // Mock file reading for mode-specific rules
0 commit comments