Skip to content

Commit 6a75598

Browse files
committed
test(server-nestjs): assert app events emit surface parity
1 parent c99fef8 commit 6a75598

2 files changed

Lines changed: 42 additions & 0 deletions

File tree

‎apps/server-nestjs/src/modules/events/app-events.service.spec.ts‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,4 +175,16 @@ describe('appEventsService', () => {
175175
data: expect.objectContaining({ args: payload }),
176176
}))
177177
})
178+
179+
describe('emit surface (migration parity)', () => {
180+
const expectedEmitMethods = ['emitProjectEvent', 'emitProjectMemberEvent', 'emitRepositoryEvent'] as const
181+
182+
it.each(expectedEmitMethods)('exposes %s as a public emit entrypoint', (method) => {
183+
expect(typeof service[method]).toBe('function')
184+
})
185+
186+
it('does NOT expose a zone emit entrypoint (zone.* listeners have no emitter yet — legacy owns the route)', () => {
187+
expect('emitZoneEvent' in service).toBe(false)
188+
})
189+
})
178190
})

‎apps/server-nestjs/src/modules/keycloak/keycloak.service.spec.ts‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -526,4 +526,34 @@ describe('keycloakService', () => {
526526
expect(keycloak.removeUserFromGroup).toHaveBeenCalledWith('user-2', 'system-managed-id')
527527
})
528528
})
529+
530+
describe('migration parity: admin-role event path (legacy hook.adminRole.*)', () => {
531+
const adminRoles: AdminRoleWithDetails[] = [
532+
{ id: 'admin-role-1', name: 'admin', permissions: 0n, position: 0, oidcGroup: '/admin-group', type: 'managed' },
533+
]
534+
const users: UserWithAdminRoles[] = [
535+
{ id: 'user-1', adminRoleIds: ['admin-role-1'] },
536+
]
537+
538+
it('syncs admin-role OIDC groups via cron reconcile ONLY (no event path exists)', async () => {
539+
datastore.getAllProjects.mockResolvedValue([])
540+
datastore.getAllAdminRoles.mockResolvedValue(adminRoles)
541+
datastore.getAllUsersWithAdminRoleIds.mockResolvedValue(users)
542+
543+
const adminGroup = makeGroupRepresentation({ id: 'kc-parity-group-id', name: 'admin', path: '/console/parity-admin' })
544+
keycloak.getOrCreateGroupByPath.mockResolvedValue(adminGroup)
545+
keycloak.getGroupMembers.mockResolvedValue([])
546+
547+
await service.handleCron()
548+
549+
expect(keycloak.getOrCreateGroupByPath).toHaveBeenCalledWith('/admin-group')
550+
expect(keycloak.addUserToGroup).toHaveBeenCalledWith('user-1', 'kc-parity-group-id')
551+
})
552+
553+
it('exposes NO adminRole emit entrypoint on AppEventsService (cutover guard)', async () => {
554+
const { AppEventsService } = await import('../events/app-events.service')
555+
expect(Object.getOwnPropertyNames(AppEventsService.prototype))
556+
.not.toContain('emitAdminRoleEvent')
557+
})
558+
})
529559
})

0 commit comments

Comments
 (0)