@@ -347,6 +347,62 @@ describe('/libraries', () => {
347
347
expect ( assets . items . find ( ( asset ) => asset . originalPath . includes ( 'directoryB' ) ) ) . toBeDefined ( ) ;
348
348
} ) ;
349
349
350
+ it ( 'should scan multiple import paths with commas' , async ( ) => {
351
+ // https://github.com/immich-app/immich/issues/10699
352
+ const library = await utils . createLibrary ( admin . accessToken , {
353
+ ownerId : admin . userId ,
354
+ importPaths : [ `${ testAssetDirInternal } /temp/folder, a` , `${ testAssetDirInternal } /temp/folder, b` ] ,
355
+ } ) ;
356
+
357
+ utils . createImageFile ( `${ testAssetDir } /temp/folder, a/assetA.png` ) ;
358
+ utils . createImageFile ( `${ testAssetDir } /temp/folder, b/assetB.png` ) ;
359
+
360
+ const { status } = await request ( app )
361
+ . post ( `/libraries/${ library . id } /scan` )
362
+ . set ( 'Authorization' , `Bearer ${ admin . accessToken } ` )
363
+ . send ( ) ;
364
+ expect ( status ) . toBe ( 204 ) ;
365
+
366
+ await utils . waitForQueueFinish ( admin . accessToken , 'library' ) ;
367
+
368
+ const { assets } = await utils . metadataSearch ( admin . accessToken , { libraryId : library . id } ) ;
369
+
370
+ expect ( assets . count ) . toBe ( 2 ) ;
371
+ expect ( assets . items . find ( ( asset ) => asset . originalPath . includes ( 'folder, a' ) ) ) . toBeDefined ( ) ;
372
+ expect ( assets . items . find ( ( asset ) => asset . originalPath . includes ( 'folder, b' ) ) ) . toBeDefined ( ) ;
373
+
374
+ utils . removeImageFile ( `${ testAssetDir } /temp/folder, a/assetA.png` ) ;
375
+ utils . removeImageFile ( `${ testAssetDir } /temp/folder, b/assetB.png` ) ;
376
+ } ) ;
377
+
378
+ it ( 'should scan multiple import paths with braces' , async ( ) => {
379
+ // https://github.com/immich-app/immich/issues/10699
380
+ const library = await utils . createLibrary ( admin . accessToken , {
381
+ ownerId : admin . userId ,
382
+ importPaths : [ `${ testAssetDirInternal } /temp/folder{ a` , `${ testAssetDirInternal } /temp/folder} b` ] ,
383
+ } ) ;
384
+
385
+ utils . createImageFile ( `${ testAssetDir } /temp/folder{ a/assetA.png` ) ;
386
+ utils . createImageFile ( `${ testAssetDir } /temp/folder} b/assetB.png` ) ;
387
+
388
+ const { status } = await request ( app )
389
+ . post ( `/libraries/${ library . id } /scan` )
390
+ . set ( 'Authorization' , `Bearer ${ admin . accessToken } ` )
391
+ . send ( ) ;
392
+ expect ( status ) . toBe ( 204 ) ;
393
+
394
+ await utils . waitForQueueFinish ( admin . accessToken , 'library' ) ;
395
+
396
+ const { assets } = await utils . metadataSearch ( admin . accessToken , { libraryId : library . id } ) ;
397
+
398
+ expect ( assets . count ) . toBe ( 2 ) ;
399
+ expect ( assets . items . find ( ( asset ) => asset . originalPath . includes ( 'folder{ a' ) ) ) . toBeDefined ( ) ;
400
+ expect ( assets . items . find ( ( asset ) => asset . originalPath . includes ( 'folder} b' ) ) ) . toBeDefined ( ) ;
401
+
402
+ utils . removeImageFile ( `${ testAssetDir } /temp/folder{ a/assetA.png` ) ;
403
+ utils . removeImageFile ( `${ testAssetDir } /temp/folder} b/assetB.png` ) ;
404
+ } ) ;
405
+
350
406
it ( 'should reimport a modified file' , async ( ) => {
351
407
const library = await utils . createLibrary ( admin . accessToken , {
352
408
ownerId : admin . userId ,
0 commit comments