@@ -360,13 +360,15 @@ describe('Testing /registryOrg endpoints', () => {
360360 } )
361361 } )
362362 it ( 'Allows Secretariat to update program_data' , async ( ) => {
363+ const partnerActiveDate = '2024-01-15'
363364 await chai . request ( app )
364365 . put ( '/api/registry/org/registry_org_test' )
365366 . set ( secretariatHeaders )
366367 . send ( {
367368 ...createdOrg ,
368369 program_data : {
369370 status : 'active' ,
371+ partner_active_date : partnerActiveDate ,
370372 advisory_location_require_credentials : true ,
371373 vulnerability_advisory_location_for_web_scraping : [ 'https://example.com/scraping' ]
372374 }
@@ -377,11 +379,107 @@ describe('Testing /registryOrg endpoints', () => {
377379 expect ( res . body . updated ) . to . haveOwnProperty ( 'program_data' )
378380 expect ( res . body . updated . program_data . status ) . to . equal ( 'active' )
379381 expect ( res . body . updated . program_data ) . to . haveOwnProperty ( 'partner_active_date' )
380- expect ( res . body . updated . program_data ) . to . not . haveOwnProperty ( 'partner_inactive_date' )
382+ expect ( res . body . updated . program_data . partner_active_date ) . to . equal ( partnerActiveDate )
381383 expect ( res . body . updated . program_data . advisory_location_require_credentials ) . to . be . true
382384 expect ( res . body . updated . program_data . vulnerability_advisory_location_for_web_scraping ) . to . deep . equal ( [ 'https://example.com/scraping' ] )
383385 } )
384386 } )
387+ it ( 'Allows Secretariat to edit partner_active_date without changing status' , async ( ) => {
388+ const partnerActiveDate = '2024-02-20'
389+ await chai . request ( app )
390+ . put ( '/api/registry/org/registry_org_test' )
391+ . set ( secretariatHeaders )
392+ . send ( {
393+ ...createdOrg ,
394+ program_data : {
395+ status : 'active' ,
396+ partner_active_date : partnerActiveDate
397+ }
398+ } )
399+ . then ( ( res , err ) => {
400+ expect ( err ) . to . be . undefined
401+ expect ( res ) . to . have . status ( 200 )
402+ expect ( res . body . updated ) . to . haveOwnProperty ( 'program_data' )
403+ expect ( res . body . updated . program_data . status ) . to . equal ( 'active' )
404+ expect ( res . body . updated . program_data . partner_active_date ) . to . equal ( partnerActiveDate )
405+ } )
406+ } )
407+ it ( 'Allows Secretariat to edit partner_inactive_date without changing status' , async ( ) => {
408+ const inactiveDateOrg = {
409+ ...testRegistryOrg ,
410+ short_name : 'registry_org_test_inactive_date' ,
411+ long_name : 'Registry Org Test Inactive Date'
412+ }
413+ const partnerInactiveDate = '2024-03-25'
414+
415+ const createRes = await chai . request ( app )
416+ . post ( '/api/registry/org' )
417+ . set ( secretariatHeaders )
418+ . send ( inactiveDateOrg )
419+
420+ expect ( createRes ) . to . have . status ( 200 )
421+ const createdInactiveDateOrg = { ...createRes . body . created }
422+ delete createdInactiveDateOrg . created
423+ delete createdInactiveDateOrg . last_updated
424+ delete createdInactiveDateOrg . users
425+ delete createdInactiveDateOrg . admins
426+
427+ await chai . request ( app )
428+ . put ( `/api/registry/org/${ inactiveDateOrg . short_name } ` )
429+ . set ( secretariatHeaders )
430+ . send ( {
431+ ...createdInactiveDateOrg ,
432+ program_data : {
433+ status : 'inactive' ,
434+ partner_inactive_date : partnerInactiveDate
435+ }
436+ } )
437+ . then ( ( res , err ) => {
438+ expect ( err ) . to . be . undefined
439+ expect ( res ) . to . have . status ( 200 )
440+ expect ( res . body . updated ) . to . haveOwnProperty ( 'program_data' )
441+ expect ( res . body . updated . program_data . status ) . to . equal ( 'inactive' )
442+ expect ( res . body . updated . program_data . partner_inactive_date ) . to . equal ( partnerInactiveDate )
443+ } )
444+ } )
445+ it ( 'Does not generate a partner_active_date when status changes without one provided' , async ( ) => {
446+ const statusOnlyOrg = {
447+ ...testRegistryOrg ,
448+ short_name : 'registry_org_test_status_only' ,
449+ long_name : 'Registry Org Test Status Only'
450+ }
451+
452+ const createRes = await chai . request ( app )
453+ . post ( '/api/registry/org' )
454+ . set ( secretariatHeaders )
455+ . send ( statusOnlyOrg )
456+
457+ expect ( createRes ) . to . have . status ( 200 )
458+ expect ( createRes . body . created . program_data . status ) . to . equal ( 'inactive' )
459+ expect ( createRes . body . created . program_data ) . to . not . haveOwnProperty ( 'partner_active_date' )
460+ const statusOnlyUpdateOrg = { ...createRes . body . created }
461+ delete statusOnlyUpdateOrg . created
462+ delete statusOnlyUpdateOrg . last_updated
463+ delete statusOnlyUpdateOrg . users
464+ delete statusOnlyUpdateOrg . admins
465+
466+ await chai . request ( app )
467+ . put ( `/api/registry/org/${ statusOnlyOrg . short_name } ` )
468+ . set ( secretariatHeaders )
469+ . send ( {
470+ ...statusOnlyUpdateOrg ,
471+ program_data : {
472+ status : 'active'
473+ }
474+ } )
475+ . then ( ( res , err ) => {
476+ expect ( err ) . to . be . undefined
477+ expect ( res ) . to . have . status ( 200 )
478+ expect ( res . body . updated ) . to . haveOwnProperty ( 'program_data' )
479+ expect ( res . body . updated . program_data . status ) . to . equal ( 'active' )
480+ expect ( res . body . updated . program_data ) . to . not . haveOwnProperty ( 'partner_active_date' )
481+ } )
482+ } )
385483 it ( 'Updates a registry organization\'s short name and role simultaneously to verify read-after-write audit logic' , async ( ) => {
386484 // First create a temporary org
387485 const tempOrg = {
0 commit comments