11import { IGNORED_DIRECTORIES , JSX_FILE_EXTENSIONS } from '@onlook/constants' ;
22import { afterEach , beforeEach , describe , expect , mock , test } from 'bun:test' ;
3+ import { runInAction } from 'mobx' ;
34
45// Setup mocks before imports
56// Mock localforage before importing anything that uses it
@@ -65,6 +66,7 @@ describe('SandboxManager', () => {
6566 // Create a sandbox with a mock FileSyncManager
6667 mockFileSync = {
6768 readOrFetch : mock ( async ( ) => '<div>Mocked Content</div>' ) ,
69+ readOrFetchBatch : mock ( async ( ) => [ ] ) ,
6870 write : mock ( async ( ) => true ) ,
6971 clear : mock ( async ( ) => undefined ) ,
7072 updateCache : mock ( async ( ) => undefined ) ,
@@ -99,6 +101,7 @@ describe('SandboxManager', () => {
99101 } ) ,
100102 watch : mock ( async ( ) => mockWatcher ) ,
101103 } ,
104+ disconnect : mock ( async ( ) => undefined ) ,
102105 } ;
103106
104107 mockEditorEngine = {
@@ -131,14 +134,15 @@ describe('SandboxManager', () => {
131134 writeTextFile : mock ( async ( ) => true ) ,
132135 watch : mock ( async ( ) => mockWatcher ) ,
133136 } ,
137+ disconnect : mock ( async ( ) => undefined ) ,
134138 } ;
135139
136140 const testManager = new SandboxManager ( mockEditorEngine ) ;
137141
138- // @ts -ignore - accessing private property for testing
139- testManager . session . session = testMockSession ;
140-
141- expect ( testManager . session . session ) . toBe ( testMockSession ) ;
142+ runInAction ( ( ) => {
143+ // @ts -ignore - accessing private property for testing
144+ testManager . session . session = testMockSession ;
145+ } ) ;
142146
143147 const files = await testManager . listFilesRecursively (
144148 './' ,
@@ -154,6 +158,12 @@ describe('SandboxManager', () => {
154158 } ) ;
155159
156160 test ( 'should read file content' , async ( ) => {
161+ // Set up session for this test
162+ runInAction ( ( ) => {
163+ // @ts -ignore - accessing private property for testing
164+ sandboxManager . session . session = mockSession ;
165+ } ) ;
166+
157167 // Override the fileSync property to use our specific mock
158168 // @ts -ignore - accessing private property for testing
159169 sandboxManager . fileSync = mockFileSync ;
@@ -164,6 +174,12 @@ describe('SandboxManager', () => {
164174 } ) ;
165175
166176 test ( 'should write file content' , async ( ) => {
177+ // Set up session for this test
178+ runInAction ( ( ) => {
179+ // @ts -ignore - accessing private property for testing
180+ sandboxManager . session . session = mockSession ;
181+ } ) ;
182+
167183 // Override the fileSync property to use our specific mock
168184 // @ts -ignore - accessing private property for testing
169185 sandboxManager . fileSync = mockFileSync ;
@@ -175,12 +191,18 @@ describe('SandboxManager', () => {
175191 expect ( result ) . toBe ( true ) ;
176192 expect ( mockFileSync . write ) . toHaveBeenCalledWith (
177193 'file1.tsx' ,
178- '<div id="123">Modified Component</div>' ,
194+ '<div id="123">Modified Component</div>;\n ' ,
179195 expect . any ( Function ) ,
180196 ) ;
181197 } ) ;
182198
183199 test ( 'should read from localforage cache when reading files multiple times' , async ( ) => {
200+ // Set up session for this test
201+ runInAction ( ( ) => {
202+ // @ts -ignore - accessing private property for testing
203+ sandboxManager . session . session = mockSession ;
204+ } ) ;
205+
184206 // First read gets from filesystem and caches
185207 await sandboxManager . readFile ( 'file1.tsx' ) ;
186208
@@ -189,7 +211,7 @@ describe('SandboxManager', () => {
189211
190212 // Second read should use cache
191213 const content2 = await sandboxManager . readFile ( 'file1.tsx' ) ;
192- expect ( content2 ) . toBe ( '<div>Test Component</div>' ) ;
214+ expect ( content2 . content ) . toBe ( '<div>Test Component</div>' ) ;
193215
194216 // Filesystem should not be accessed for the second read
195217 expect ( mockSession . fs . readTextFile ) . not . toHaveBeenCalled ( ) ;
@@ -208,13 +230,15 @@ describe('SandboxManager', () => {
208230 readdir : mock ( async ( ) => [ ] ) ,
209231 watch : mock ( async ( ) => mockWatcher ) ,
210232 } ,
233+ disconnect : mock ( async ( ) => undefined ) ,
211234 } ;
212235
213236 const errorManager = new SandboxManager ( mockEditorEngine ) ;
214237
215238 // We need to create a custom fileSync mock that returns null for this test
216239 const errorFileSync = {
217240 readOrFetch : mock ( async ( ) => null ) ,
241+ readOrFetchBatch : mock ( async ( ) => [ ] ) ,
218242 write : mock ( async ( ) => false ) ,
219243 clear : mock ( async ( ) => undefined ) ,
220244 updateCache : mock ( async ( ) => undefined ) ,
@@ -233,7 +257,7 @@ describe('SandboxManager', () => {
233257 expect ( writeResult ) . toBe ( false ) ;
234258 expect ( errorFileSync . write ) . toHaveBeenCalledWith (
235259 'error.tsx' ,
236- '<div>Content</div>' ,
260+ '<div>Content</div>;\n ' ,
237261 expect . any ( Function ) ,
238262 ) ;
239263 } ) ;
@@ -310,6 +334,12 @@ describe('SandboxManager', () => {
310334 } ) ;
311335
312336 test ( 'should normalize file paths for read' , async ( ) => {
337+ // Set up session for this test
338+ runInAction ( ( ) => {
339+ // @ts -ignore - accessing private property for testing
340+ sandboxManager . session . session = mockSession ;
341+ } ) ;
342+
313343 // Override the fileSync property in the sandboxManager
314344 // @ts -ignore - accessing private property for testing
315345 sandboxManager . fileSync = mockFileSync ;
@@ -334,6 +364,12 @@ describe('SandboxManager', () => {
334364 } ) ;
335365
336366 test ( 'should normalize file paths for write' , async ( ) => {
367+ // Set up session for this test
368+ runInAction ( ( ) => {
369+ // @ts -ignore - accessing private property for testing
370+ sandboxManager . session . session = mockSession ;
371+ } ) ;
372+
337373 // Override the fileSync property in the sandboxManager
338374 // @ts -ignore - accessing private property for testing
339375 sandboxManager . fileSync = mockFileSync ;
@@ -352,7 +388,7 @@ describe('SandboxManager', () => {
352388 await sandboxManager . writeFile ( variant , 'test' ) ;
353389 expect ( mockFileSync . write ) . toHaveBeenCalledWith (
354390 normalizedPath ,
355- 'test' ,
391+ 'test;\n ' ,
356392 expect . any ( Function ) ,
357393 ) ;
358394 }
0 commit comments