@@ -116,8 +116,8 @@ describe('readOnlyAdminWrapper', () => {
116116
117117 expect ( result . status ) . to . equal ( 403 ) ;
118118 const body = await result . json ( ) ;
119- expect ( body . message ) . to . equal ( 'Read-only admin access is not enabled ' ) ;
120- expect ( logStub . warn . calledWithMatch ( ' Feature flag disabled') ) . to . be . true ;
119+ expect ( body . message ) . to . equal ( 'Forbidden ' ) ;
120+ expect ( logStub . warn . calledWithMatch ( { tag : 'ro-admin' } , ' Feature flag disabled, denying RO admin access ') ) . to . be . true ;
121121 expect ( handler . called ) . to . be . false ;
122122 } ) ;
123123
@@ -134,7 +134,7 @@ describe('readOnlyAdminWrapper', () => {
134134
135135 expect ( result . status ) . to . equal ( 403 ) ;
136136 const body = await result . json ( ) ;
137- expect ( body . message ) . to . equal ( 'Read-only admin access is not enabled ' ) ;
137+ expect ( body . message ) . to . equal ( 'Forbidden ' ) ;
138138 expect ( handler . called ) . to . be . false ;
139139 } ) ;
140140
@@ -151,7 +151,7 @@ describe('readOnlyAdminWrapper', () => {
151151
152152 expect ( result . status ) . to . equal ( 403 ) ;
153153 const body = await result . json ( ) ;
154- expect ( body . message ) . to . equal ( 'Read-only admin access is not enabled ' ) ;
154+ expect ( body . message ) . to . equal ( 'Forbidden ' ) ;
155155 expect ( handler . called ) . to . be . false ;
156156 } ) ;
157157
@@ -162,7 +162,7 @@ describe('readOnlyAdminWrapper', () => {
162162
163163 expect ( result . status ) . to . equal ( 403 ) ;
164164 const body = await result . json ( ) ;
165- expect ( body . message ) . to . equal ( 'Read-only admin access is not enabled ' ) ;
165+ expect ( body . message ) . to . equal ( 'Forbidden ' ) ;
166166 expect ( handler . called ) . to . be . false ;
167167 } ) ;
168168
@@ -191,7 +191,7 @@ describe('readOnlyAdminWrapper', () => {
191191
192192 expect ( ldClient . isFlagEnabledForIMSOrg . calledOnce ) . to . be . true ;
193193 const [ flagKey , imsOrgId ] = ldClient . isFlagEnabledForIMSOrg . firstCall . args ;
194- expect ( flagKey ) . to . equal ( 'FT_LLMO-3008 ' ) ;
194+ expect ( flagKey ) . to . equal ( 'FT_READ_ONLY_ORG ' ) ;
195195 expect ( imsOrgId ) . to . equal ( 'org-abc@AdobeOrg' ) ;
196196 } ) ;
197197 } ) ;
@@ -239,8 +239,8 @@ describe('readOnlyAdminWrapper', () => {
239239
240240 expect ( result . status ) . to . equal ( 403 ) ;
241241 const body = await result . json ( ) ;
242- expect ( body . message ) . to . equal ( 'Read-only admin users cannot perform write operations ' ) ;
243- expect ( logStub . warn . calledWithMatch ( ' blocked from route') ) . to . be . true ;
242+ expect ( body . message ) . to . equal ( 'Forbidden ' ) ;
243+ expect ( logStub . warn . calledWithMatch ( { tag : 'ro-admin' } , 'Read-only admin blocked from route') ) . to . be . true ;
244244 expect ( handler . called ) . to . be . false ;
245245 } ) ;
246246
@@ -251,7 +251,7 @@ describe('readOnlyAdminWrapper', () => {
251251
252252 expect ( result . status ) . to . equal ( 403 ) ;
253253 const body = await result . json ( ) ;
254- expect ( body . message ) . to . equal ( 'Read-only admin users cannot perform write operations ' ) ;
254+ expect ( body . message ) . to . equal ( 'Forbidden ' ) ;
255255 expect ( handler . called ) . to . be . false ;
256256 } ) ;
257257
@@ -271,8 +271,8 @@ describe('readOnlyAdminWrapper', () => {
271271
272272 expect ( result . status ) . to . equal ( 403 ) ;
273273 const body = await result . json ( ) ;
274- expect ( body . message ) . to . equal ( 'Read-only admin users cannot perform write operations ' ) ;
275- expect ( logStub . warn . calledWithMatch ( ' blocked from route') ) . to . be . true ;
274+ expect ( body . message ) . to . equal ( 'Forbidden ' ) ;
275+ expect ( logStub . warn . calledWithMatch ( { tag : 'ro-admin' } , 'Read-only admin blocked from route') ) . to . be . true ;
276276 expect ( handler . called ) . to . be . false ;
277277 } ) ;
278278
@@ -297,36 +297,14 @@ describe('readOnlyAdminWrapper', () => {
297297 } ) ;
298298
299299 describe ( 'no routeCapabilities provided' , ( ) => {
300- let mockedWrapper ;
301-
302- beforeEach ( async ( ) => {
303- const ldClient = {
304- isFlagEnabledForIMSOrg : sinon . stub ( ) . resolves ( true ) ,
305- } ;
306- const mockedModule = await esmock ( '../../src/auth/read-only-admin-wrapper.js' , {
307- '@adobe/spacecat-shared-launchdarkly-client' : {
308- LaunchDarklyClient : {
309- createFrom : sinon . stub ( ) . returns ( ldClient ) ,
310- } ,
311- } ,
312- } ) ;
313- mockedWrapper = mockedModule . readOnlyAdminWrapper ;
314- } ) ;
315-
316- it ( 'passes through RO admin when routeCapabilities is not provided' , async ( ) => {
317- const wrapped = mockedWrapper ( handler ) ;
318- const result = await wrapped ( { } , context ) ;
319-
320- expect ( result ) . to . deep . equal ( { status : 200 } ) ;
321- expect ( handler . calledOnce ) . to . be . true ;
300+ it ( 'throws at creation time when routeCapabilities is not provided' , ( ) => {
301+ expect ( ( ) => readOnlyAdminWrapper ( handler ) )
302+ . to . throw ( 'readOnlyAdminWrapper: routeCapabilities is required' ) ;
322303 } ) ;
323304
324- it ( 'passes through RO admin when routeCapabilities is null' , async ( ) => {
325- const wrapped = mockedWrapper ( handler , { routeCapabilities : null } ) ;
326- const result = await wrapped ( { } , context ) ;
327-
328- expect ( result ) . to . deep . equal ( { status : 200 } ) ;
329- expect ( handler . calledOnce ) . to . be . true ;
305+ it ( 'throws at creation time when routeCapabilities is null' , ( ) => {
306+ expect ( ( ) => readOnlyAdminWrapper ( handler , { routeCapabilities : null } ) )
307+ . to . throw ( 'readOnlyAdminWrapper: routeCapabilities is required' ) ;
330308 } ) ;
331309 } ) ;
332310
@@ -352,23 +330,23 @@ describe('readOnlyAdminWrapper', () => {
352330 const wrapped = mockedWrapper ( handler , { routeCapabilities } ) ;
353331 await wrapped ( { } , context ) ;
354332
355- expect ( logStub . info . calledWithMatch ( '[ ro-admin-audit] RO admin accessed: GET /sites') ) . to . be . true ;
333+ expect ( logStub . info . calledWithMatch ( { tag : ' ro-admin-audit' , method : ' GET' , suffix : ' /sites' } , 'RO admin accessed route ') ) . to . be . true ;
356334 } ) ;
357335
358336 it ( 'does not emit audit log for non-RO-admin requests' , async ( ) => {
359337 context . attributes . authInfo . isReadOnlyAdmin = ( ) => false ;
360338 const wrapped = mockedWrapper ( handler , { routeCapabilities } ) ;
361339 await wrapped ( { } , context ) ;
362340
363- expect ( logStub . info . calledWithMatch ( '[ ro-admin-audit]' ) ) . to . be . false ;
341+ expect ( logStub . info . calledWithMatch ( { tag : ' ro-admin-audit' } ) ) . to . be . false ;
364342 } ) ;
365343
366344 it ( 'does not emit audit log when RO admin is blocked' , async ( ) => {
367345 context . pathInfo = { method : 'POST' , suffix : '/sites' } ;
368346 const wrapped = mockedWrapper ( handler , { routeCapabilities } ) ;
369347 await wrapped ( { } , context ) ;
370348
371- expect ( logStub . info . calledWithMatch ( '[ ro-admin-audit]' ) ) . to . be . false ;
349+ expect ( logStub . info . calledWithMatch ( { tag : ' ro-admin-audit' } ) ) . to . be . false ;
372350 } ) ;
373351 } ) ;
374352} ) ;
0 commit comments