| 1 | import type { DynamicModule } from '@nestjs/common' |
| 2 | import { RouterModule } from '@nestjs/core/router' |
| 3 | import { describe, expect, it } from 'vitest' |
| 4 | import { z } from 'zod' |
| 5 | import { ConfigEditorConfig } from './config-editor.config' |
| 6 | import { ConfigEditorController } from './config-editor.controller' |
| 7 | import { ConfigEditorModule } from './config-editor.module' |
| 8 | |
| 9 | describe('configEditorModule', () => { |
| 10 | it('使用 RouterModule 挂载配置前缀并用 class token 注入配置', () => { |
| 11 | const module = ConfigEditorModule.forRoot({ |
| 12 | schema: z.object({ name: z.string() }), |
| 13 | config: { |
| 14 | meta: { |
| 15 | configPath: 'config.yaml', |
| 16 | }, |
| 17 | }, |
| 18 | routePrefix: '/open/config/', |
| 19 | }) |
| 20 | const routerModule = module.imports?.[0] as DynamicModule |
| 21 | const routesProvider = routerModule.providers?.find(provider => typeof provider === 'object' && provider && 'useValue' in provider) |
| 22 | const configProvider = module.providers?.find(provider => typeof provider === 'object' && provider && 'provide' in provider && provider.provide === ConfigEditorConfig) |
| 23 | |
| 24 | expect(module.controllers).toEqual([ConfigEditorController]) |
| 25 | expect(routerModule.module).toBe(RouterModule) |
| 26 | expect(routesProvider).toMatchObject({ |
| 27 | useValue: [{ |
| 28 | path: 'open/config', |
| 29 | module: ConfigEditorModule, |
| 30 | }], |
| 31 | }) |
| 32 | expect(configProvider).toMatchObject({ |
| 33 | useValue: expect.objectContaining({ |
| 34 | configPath: 'config.yaml', |
| 35 | routePrefix: 'open/config', |
| 36 | }), |
| 37 | }) |
| 38 | }) |
| 39 | }) |
| 40 |