@@ -48,6 +48,13 @@ jest.mock('@db', () => ({
4848 update : jest . fn ( ) ,
4949 } ,
5050 } ,
51+ BackgroundCheckStatus : {
52+ pending : 'pending' ,
53+ in_progress : 'in_progress' ,
54+ completed : 'completed' ,
55+ completed_with_flags : 'completed_with_flags' ,
56+ cancelled : 'cancelled' ,
57+ } ,
5158 FindingType : { soc2 : 'soc2' , iso27001 : 'iso27001' } ,
5259 FindingStatus : { open : 'open' , closed : 'closed' } ,
5360 PhaseCompletionType : { manual : 'manual' , auto : 'auto' } ,
@@ -556,10 +563,14 @@ describe('PeopleService', () => {
556563
557564 expect ( result . success ) . toBe ( true ) ;
558565 expect ( result . deletedMember . id ) . toBe ( 'mem_1' ) ;
559- expect ( db . member . update ) . toHaveBeenCalledWith ( {
560- where : { id : 'mem_1' , organizationId : 'org_123' } ,
561- data : { deactivated : true , isActive : false } ,
566+ const updateCall = ( db . member . update as jest . Mock ) . mock . calls [ 0 ] ?. [ 0 ] ;
567+ expect ( updateCall . where ) . toEqual ( {
568+ id : 'mem_1' ,
569+ organizationId : 'org_123' ,
562570 } ) ;
571+ expect ( updateCall . data . deactivated ) . toBe ( true ) ;
572+ expect ( updateCall . data . isActive ) . toBe ( false ) ;
573+ expect ( updateCall . data . offboardDate ) . toBeInstanceOf ( Date ) ;
563574 expect ( db . session . deleteMany ) . toHaveBeenCalledWith ( {
564575 where : { userId : 'usr_1' } ,
565576 } ) ;
@@ -633,6 +644,46 @@ describe('PeopleService', () => {
633644
634645 expect ( fleetService . removeHostsByLabel ) . toHaveBeenCalledWith ( 42 ) ;
635646 } ) ;
647+
648+ describe ( 'when skipOffboarding is true' , ( ) => {
649+ it ( 'should not set offboardDate' , async ( ) => {
650+ await service . deleteById ( 'mem_1' , 'org_123' , 'usr_actor' , {
651+ skipOffboarding : true ,
652+ } ) ;
653+
654+ const updateCall = ( db . member . update as jest . Mock ) . mock . calls [ 0 ] ?. [ 0 ] ;
655+ expect ( updateCall . data ) . toEqual ( { deactivated : true , isActive : false } ) ;
656+ expect ( updateCall . data ) . not . toHaveProperty ( 'offboardDate' ) ;
657+ } ) ;
658+
659+ it ( 'should not collect assigned items or notify the owner' , async ( ) => {
660+ await service . deleteById ( 'mem_1' , 'org_123' , 'usr_actor' , {
661+ skipOffboarding : true ,
662+ } ) ;
663+
664+ // collectAssignedItems is skipped — no findMany on tasks/policies/risks/vendors
665+ expect ( db . task . findMany ) . not . toHaveBeenCalled ( ) ;
666+ expect ( db . policy . findMany ) . not . toHaveBeenCalled ( ) ;
667+ expect ( db . risk . findMany ) . not . toHaveBeenCalled ( ) ;
668+ expect ( db . vendor . findMany ) . not . toHaveBeenCalled ( ) ;
669+ // notifyOwnerOfUnassignedItems is skipped — no owner lookup
670+ expect ( db . organization . findUnique ) . not . toHaveBeenCalled ( ) ;
671+ } ) ;
672+
673+ it ( 'should still clear assignments and delete sessions' , async ( ) => {
674+ await service . deleteById ( 'mem_1' , 'org_123' , 'usr_actor' , {
675+ skipOffboarding : true ,
676+ } ) ;
677+
678+ expect ( db . task . updateMany ) . toHaveBeenCalledWith ( {
679+ where : { assigneeId : 'mem_1' , organizationId : 'org_123' } ,
680+ data : { assigneeId : null } ,
681+ } ) ;
682+ expect ( db . session . deleteMany ) . toHaveBeenCalledWith ( {
683+ where : { userId : 'usr_1' } ,
684+ } ) ;
685+ } ) ;
686+ } ) ;
636687 } ) ;
637688
638689 describe ( 'unlinkDevice' , ( ) => {
0 commit comments