@@ -32,9 +32,9 @@ vi.mock('@/lib/credential-groups/provider-registry', () => ({
3232
3333import {
3434 completeCredentialGroupEnrollment ,
35+ deleteCredentialGroupEnrollment ,
3536 listCredentialGroupEnrollments ,
3637 resendCredentialGroupEnrollment ,
37- revokeCredentialGroupEnrollment ,
3838} from '@/lib/credential-groups/enrollments'
3939import { CREDENTIAL_GROUP_PROVIDER_IDS } from '@/lib/credential-groups/providers'
4040import { sendEmail } from '@/lib/messaging/email/mailer'
@@ -143,29 +143,43 @@ describe('listCredentialGroupEnrollments', () => {
143143 }
144144 dbChainMockFns . limit
145145 . mockResolvedValueOnce ( [ { options : [ ] } ] )
146- . mockResolvedValueOnce ( [
147- { id : ENROLLMENT . id , invitedAt : new Date ( '2026-08-11T12:00:00.000Z' ) } ,
148- ] )
146+ . mockResolvedValueOnce ( [ { enrollment : ENROLLMENT } , { enrollment : remainingEnrollment } ] )
147+ . mockResolvedValueOnce ( [ { options : [ ] } ] )
149148 . mockResolvedValueOnce ( [ { enrollment : remainingEnrollment } ] )
150149
150+ const firstPage = await listCredentialGroupEnrollments ( 'workspace-1' , 'group-1' , 1 , undefined , {
151+ statuses : [ 'invited' , 'in_progress' , 'completed' , 'delivery_failed' ] ,
152+ } )
153+ if ( ! firstPage . nextCursor ) throw new Error ( 'Expected a next enrollment cursor' )
151154 const result = await listCredentialGroupEnrollments (
152155 'workspace-1' ,
153156 'group-1' ,
154157 50 ,
155- ENROLLMENT . id ,
158+ firstPage . nextCursor ,
156159 { statuses : [ 'invited' , 'in_progress' , 'completed' , 'delivery_failed' ] }
157160 )
158161
162+ expect ( firstPage . nextCursor ) . toEqual ( expect . any ( String ) )
159163 expect ( result . enrollments ) . toHaveLength ( 1 )
160164 expect ( result . enrollments [ 0 ] ?. id ) . toBe ( remainingEnrollment . id )
161- expect ( inArray ) . toHaveBeenCalledOnce ( )
165+ expect ( dbChainMockFns . limit ) . toHaveBeenCalledTimes ( 4 )
162166 expect ( inArray ) . toHaveBeenCalledWith ( schemaMock . credentialGroupEnrollment . status , [
163167 'invited' ,
164168 'in_progress' ,
165169 'completed' ,
166170 'delivery_failed' ,
167171 ] )
168172 } )
173+
174+ it ( 'rejects a malformed enrollment cursor' , async ( ) => {
175+ dbChainMockFns . limit . mockResolvedValueOnce ( [ { options : [ ] } ] )
176+
177+ await expect (
178+ listCredentialGroupEnrollments ( 'workspace-1' , 'group-1' , 50 , 'not-a-cursor' )
179+ ) . rejects . toMatchObject ( { message : 'Enrollment cursor is invalid' , status : 400 } )
180+
181+ expect ( dbChainMockFns . limit ) . toHaveBeenCalledOnce ( )
182+ } )
169183} )
170184
171185describe ( 'resendCredentialGroupEnrollment' , ( ) => {
@@ -236,25 +250,22 @@ describe('resendCredentialGroupEnrollment', () => {
236250 } )
237251} )
238252
239- describe ( 'revokeCredentialGroupEnrollment ' , ( ) => {
253+ describe ( 'deleteCredentialGroupEnrollment ' , ( ) => {
240254 beforeEach ( ( ) => {
241255 vi . clearAllMocks ( )
242256 resetDbChainMock ( )
243257 } )
244258
245- it ( 'deletes every managed credential collected under the revoked enrollment ' , async ( ) => {
259+ it ( 'deletes the enrollment and lets its foreign-key cascade remove managed credentials ' , async ( ) => {
246260 dbChainMockFns . limit . mockResolvedValueOnce ( [ { email : ENROLLMENT . email } ] )
247- dbChainMockFns . returning . mockResolvedValueOnce ( [
248- { ...ENROLLMENT , status : 'revoked' , revokedAt : new Date ( ) } ,
249- ] )
261+ dbChainMockFns . returning . mockResolvedValueOnce ( [ ENROLLMENT ] )
250262
251- const result = await revokeCredentialGroupEnrollment ( 'workspace-1' , 'group-1' , ENROLLMENT . id )
263+ const result = await deleteCredentialGroupEnrollment ( 'workspace-1' , 'group-1' , ENROLLMENT . id )
252264
253- expect ( result . status ) . toBe ( 'revoked' )
254- expect ( dbChainMockFns . update ) . toHaveBeenCalledOnce ( )
255- expect ( dbChainMockFns . update ) . toHaveBeenCalledWith ( schemaMock . credentialGroupEnrollment )
265+ expect ( result . id ) . toBe ( ENROLLMENT . id )
266+ expect ( dbChainMockFns . update ) . not . toHaveBeenCalled ( )
256267 expect ( dbChainMockFns . delete ) . toHaveBeenCalledOnce ( )
257- expect ( dbChainMockFns . delete ) . toHaveBeenCalledWith ( schemaMock . credential )
268+ expect ( dbChainMockFns . delete ) . toHaveBeenCalledWith ( schemaMock . credentialGroupEnrollment )
258269 } )
259270} )
260271
0 commit comments