@@ -127,4 +127,55 @@ describe("OneDriveFileSystem", () => {
127127 name : "B" ,
128128 } ) ;
129129 } ) ;
130+
131+ it ( "writer should upload empty string with simple PUT" , async ( ) => {
132+ const fs = new OneDriveFileSystem ( "/" , "token" ) ;
133+ const requestSpy = vi . spyOn ( fs , "request" ) . mockResolvedValue ( { } ) ;
134+
135+ const writer = await fs . create ( "empty.txt" ) ;
136+ await writer . write ( "" ) ;
137+
138+ expect ( requestSpy ) . toHaveBeenCalledTimes ( 1 ) ;
139+ expect ( requestSpy . mock . calls [ 0 ] [ 0 ] ) . toBe (
140+ "https://graph.microsoft.com/v1.0/me/drive/special/approot:/empty.txt:/content"
141+ ) ;
142+ expect ( requestSpy . mock . calls [ 0 ] [ 1 ] ) . toMatchObject ( {
143+ method : "PUT" ,
144+ body : "" ,
145+ } ) ;
146+ } ) ;
147+
148+ it ( "writer should upload empty Blob with simple PUT" , async ( ) => {
149+ const fs = new OneDriveFileSystem ( "/" , "token" ) ;
150+ const requestSpy = vi . spyOn ( fs , "request" ) . mockResolvedValue ( { } ) ;
151+ const emptyBlob = new Blob ( [ ] ) ;
152+
153+ const writer = await fs . create ( "empty.bin" ) ;
154+ await writer . write ( emptyBlob ) ;
155+
156+ expect ( requestSpy ) . toHaveBeenCalledTimes ( 1 ) ;
157+ expect ( requestSpy . mock . calls [ 0 ] [ 0 ] ) . toBe (
158+ "https://graph.microsoft.com/v1.0/me/drive/special/approot:/empty.bin:/content"
159+ ) ;
160+ expect ( ( requestSpy . mock . calls [ 0 ] [ 1 ] as RequestInit ) . body ) . toBe ( emptyBlob ) ;
161+ } ) ;
162+
163+ it ( "writer should keep upload session for non-empty content" , async ( ) => {
164+ const fs = new OneDriveFileSystem ( "/" , "token" ) ;
165+ const requestSpy = vi
166+ . spyOn ( fs , "request" )
167+ . mockResolvedValueOnce ( { uploadUrl : "https://upload.example/session" } )
168+ . mockResolvedValueOnce ( { } ) ;
169+
170+ const writer = await fs . create ( "not-empty.txt" ) ;
171+ await writer . write ( "abc" ) ;
172+
173+ expect ( requestSpy ) . toHaveBeenCalledTimes ( 2 ) ;
174+ expect ( requestSpy . mock . calls [ 0 ] [ 0 ] ) . toBe (
175+ "https://graph.microsoft.com/v1.0/me/drive/special/approot:/not-empty.txt:/createUploadSession"
176+ ) ;
177+ expect ( requestSpy . mock . calls [ 1 ] [ 0 ] ) . toBe ( "https://upload.example/session" ) ;
178+ const headers = ( requestSpy . mock . calls [ 1 ] [ 1 ] as RequestInit ) . headers as Headers ;
179+ expect ( headers . get ( "Content-Range" ) ) . toBe ( "bytes 0-2/3" ) ;
180+ } ) ;
130181} ) ;
0 commit comments