@@ -409,6 +409,55 @@ describe('Identity Provider - Single-user mode landing', () => {
409409 } ) ;
410410} ) ;
411411
412+ // Root-level pod (singleUserName: '/') — verifies createRootPodStructure wires
413+ // publicTypeIndex as public-read and privateTypeIndex as owner-only.
414+ // Regression coverage for #297.
415+ describe ( 'Identity Provider - Root pod type index ACLs' , ( ) => {
416+ let server ;
417+ let baseUrl ;
418+ const ROOT_POD_DATA_DIR = './test-data-idp-root-pod' ;
419+
420+ before ( async ( ) => {
421+ await fs . remove ( ROOT_POD_DATA_DIR ) ;
422+ await fs . ensureDir ( ROOT_POD_DATA_DIR ) ;
423+
424+ const port = await getAvailablePort ( ) ;
425+ baseUrl = `http://${ TEST_HOST } :${ port } ` ;
426+
427+ server = createServer ( {
428+ logger : false ,
429+ root : ROOT_POD_DATA_DIR ,
430+ idp : true ,
431+ idpIssuer : baseUrl ,
432+ singleUser : true ,
433+ singleUserName : '/' ,
434+ forceCloseConnections : true ,
435+ } ) ;
436+
437+ await server . listen ( { port, host : TEST_HOST } ) ;
438+ } ) ;
439+
440+ after ( async ( ) => {
441+ await server . close ( ) ;
442+ await fs . remove ( ROOT_POD_DATA_DIR ) ;
443+ } ) ;
444+
445+ it ( 'publicTypeIndex is readable without auth' , async ( ) => {
446+ const res = await fetch ( `${ baseUrl } /settings/publicTypeIndex.jsonld` ) ;
447+ assert . strictEqual ( res . status , 200 ) ;
448+ } ) ;
449+
450+ it ( 'privateTypeIndex requires auth' , async ( ) => {
451+ const res = await fetch ( `${ baseUrl } /settings/privateTypeIndex.jsonld` ) ;
452+ assert . strictEqual ( res . status , 401 ) ;
453+ } ) ;
454+
455+ it ( 'prefs requires auth' , async ( ) => {
456+ const res = await fetch ( `${ baseUrl } /settings/prefs.jsonld` ) ;
457+ assert . strictEqual ( res . status , 401 ) ;
458+ } ) ;
459+ } ) ;
460+
412461describe ( 'Identity Provider - Accounts' , ( ) => {
413462 let server ;
414463 let accountsUrl ;
0 commit comments