@@ -25,4 +25,38 @@ describe("GoogleDriveFileSystem", () => {
2525
2626 await expect ( fs . delete ( "missing.txt" ) ) . resolves . toBeUndefined ( ) ;
2727 } ) ;
28+
29+ it ( "ensureDirExists should create missing nested directories and return final id" , async ( ) => {
30+ const fs = new GoogleDriveFileSystem ( "/" , "token" ) ;
31+ const findSpy = vi . spyOn ( fs , "findFolderByName" ) . mockResolvedValue ( null ) ;
32+ const createSpy = vi
33+ . spyOn ( fs , "createFolder" )
34+ . mockResolvedValueOnce ( { id : "id-A" , name : "A" } )
35+ . mockResolvedValueOnce ( { id : "id-B" , name : "B" } ) ;
36+
37+ await expect ( fs . ensureDirExists ( "/A/B" ) ) . resolves . toBe ( "id-B" ) ;
38+
39+ expect ( findSpy . mock . calls ) . toEqual ( [
40+ [ "A" , "appDataFolder" ] ,
41+ [ "B" , "id-A" ] ,
42+ ] ) ;
43+ expect ( createSpy . mock . calls ) . toEqual ( [
44+ [ "A" , "appDataFolder" ] ,
45+ [ "B" , "id-A" ] ,
46+ ] ) ;
47+ } ) ;
48+
49+ it ( "writer should ensure directory from root when filesystem is opened in subdir" , async ( ) => {
50+ const fs = new GoogleDriveFileSystem ( "/Base" , "token" ) ;
51+ const writer = await fs . create ( "file.txt" ) ;
52+ const ensureSpy = vi . spyOn ( fs , "ensureDirExists" ) . mockResolvedValue ( "base-id" ) ;
53+ const findSpy = vi . spyOn ( fs , "findFileInDirectory" ) . mockResolvedValue ( null ) ;
54+ const requestSpy = vi . spyOn ( fs , "request" ) . mockResolvedValue ( { } ) ;
55+
56+ await expect ( writer . write ( "content" ) ) . resolves . toBeUndefined ( ) ;
57+
58+ expect ( ensureSpy ) . toHaveBeenCalledWith ( "/Base" ) ;
59+ expect ( findSpy ) . toHaveBeenCalledWith ( "file.txt" , "base-id" ) ;
60+ expect ( requestSpy ) . toHaveBeenCalledTimes ( 1 ) ;
61+ } ) ;
2862} ) ;
0 commit comments