@@ -133,7 +133,7 @@ describe('fileServerMiddleware()', async () => {
133133 } )
134134
135135 expect ( event . node . res . setHeader ) . toHaveBeenCalledWith ( 'Content-Type' , 'text/html' )
136- expect ( result ) . toBe ( '<html></html>' )
136+ expect ( result ?. toString ( ) ) . toBe ( '<html></html>' )
137137 } )
138138 } )
139139
@@ -166,7 +166,7 @@ describe('fileServerMiddleware()', async () => {
166166 } )
167167
168168 expect ( event . node . res . setHeader ) . toHaveBeenCalledWith ( 'Content-Type' , contentType )
169- expect ( result ) . toBe ( fileContent )
169+ expect ( result ?. toString ( ) ) . toBe ( fileContent )
170170 } )
171171 } )
172172
@@ -183,7 +183,7 @@ describe('fileServerMiddleware()', async () => {
183183 } )
184184
185185 expect ( event . node . res . setHeader ) . toHaveBeenCalledWith ( 'Content-Type' , 'text/plain' )
186- expect ( result ) . toBe ( 'Content for bar.foo' )
186+ expect ( result ?. toString ( ) ) . toBe ( 'Content for bar.foo' )
187187 } )
188188 } )
189189} )
@@ -244,7 +244,7 @@ describe('getExtensionAssetMiddleware()', () => {
244244 const result = await getExtensionAssetMiddleware ( options ) ( event )
245245
246246 expect ( event . node . res . setHeader ) . toHaveBeenCalledWith ( 'Content-Type' , 'application/json' )
247- expect ( result ) . toBe ( '{"tools": []}' )
247+ expect ( result ?. toString ( ) ) . toBe ( '{"tools": []}' )
248248 } )
249249 } )
250250
@@ -275,7 +275,7 @@ describe('getExtensionAssetMiddleware()', () => {
275275 const result = await getExtensionAssetMiddleware ( options ) ( event )
276276
277277 expect ( event . node . res . setHeader ) . toHaveBeenCalledWith ( 'Content-Type' , 'text/javascript' )
278- expect ( result ) . toBe ( 'compiled bundle content' )
278+ expect ( result ?. toString ( ) ) . toBe ( 'compiled bundle content' )
279279 } )
280280 } )
281281
@@ -306,7 +306,50 @@ describe('getExtensionAssetMiddleware()', () => {
306306 const result = await getExtensionAssetMiddleware ( options ) ( event )
307307
308308 // Built asset takes priority
309- expect ( result ) . toBe ( 'built content' )
309+ expect ( result ?. toString ( ) ) . toBe ( 'built content' )
310+ } )
311+ } )
312+
313+ test ( 'falls back to the extension point assets folder for static assets' , async ( ) => {
314+ await inTemporaryDirectory ( async ( tmpDir : string ) => {
315+ const extension = await testUIExtension ( {
316+ directory : tmpDir ,
317+ configuration : {
318+ name : 'test-ui-extension' ,
319+ type : 'ui_extension' ,
320+ handle : 'test-ui-extension' ,
321+ extension_points : [
322+ {
323+ target : 'admin.app.home.render' ,
324+ module : './src/index.tsx' ,
325+ assets : './assets' ,
326+ } ,
327+ ] ,
328+ } as any ,
329+ } )
330+
331+ const options = getOptions ( {
332+ devOptions : {
333+ extensions : [ extension ] ,
334+ } ,
335+ } )
336+
337+ // Static asset lives under the extension-declared assets folder.
338+ const assetsDir = joinPath ( tmpDir , 'assets' )
339+ await mkdir ( assetsDir )
340+ await writeFile ( joinPath ( assetsDir , 'logo.png' ) , 'png-bytes' )
341+
342+ const event = getMockEvent ( {
343+ params : {
344+ extensionId : extension . devUUID ,
345+ assetPath : 'logo.png' ,
346+ } ,
347+ } )
348+
349+ const result = await getExtensionAssetMiddleware ( options ) ( event )
350+
351+ expect ( event . node . res . setHeader ) . toHaveBeenCalledWith ( 'Content-Type' , 'image/png' )
352+ expect ( result ?. toString ( ) ) . toBe ( 'png-bytes' )
310353 } )
311354 } )
312355} )
0 commit comments