/** * 活动模块路由的归属:11 条全部进契约、注册表建得起来(与设计端的 activity-packages 互不撞),全归运营中心。 */ import { describe, expect, it } from 'vitest'; import * as contracts from '@contracts'; import { ACTIVITY_OPS_ROUTES } from '@contracts'; import { buildRouteRegistry, routesOf } from '../route-registry.ts'; describe('活动模块路由契约', () => { it('11 条全在契约命名空间里,注册表能建起来', () => { const registry = buildRouteRegistry(routesOf(Object.values(contracts))); expect(ACTIVITY_OPS_ROUTES).toHaveLength(11); for (const route of ACTIVITY_OPS_ROUTES) expect(registry.has(route.method, route.path), route.path).toBe(true); }); it('全归 ops;设计端活动库让位到 activity-packages 后仍归 design', () => { const registry = buildRouteRegistry(routesOf(Object.values(contracts))); for (const route of ACTIVITY_OPS_ROUTES) expect(route.access).toBe('ops'); expect(registry.lookup('GET', '/api/gov/activities')).toBe('ops'); expect(registry.lookup('GET', '/api/gov/activity-packages')).toBe('design'); expect(registry.lookup('POST', '/api/gov/activity-packages')).toBe('design'); expect(registry.lookup('GET', '/api/gov/activities/part-substitution-assessment/view')).toBe('ops'); expect(registry.lookup('POST', '/api/gov/activities/part-substitution-assessment/instances/t-1/terminate')).toBe('ops'); expect(registry.lookup('GET', '/api/gov/activities/x/instances/t-1/files/output/0')).toBe('ops'); }); });