| import { Hono } from 'hono'; |
| import { describe, expect, it, vi } from 'vitest'; |
|
|
| describe('registry dynamic loading', () => { |
| it('loads production namespaces from build', async () => { |
| const originalEnv = process.env.NODE_ENV; |
| process.env.NODE_ENV = 'production'; |
| vi.resetModules(); |
|
|
| const { namespaces } = await import('@/registry'); |
| expect(Object.keys(namespaces).length).toBeGreaterThan(0); |
|
|
| process.env.NODE_ENV = originalEnv; |
| }); |
|
|
| it('builds namespaces from directory import and resolves module handlers', async () => { |
| const originalEnv = process.env.NODE_ENV; |
| process.env.NODE_ENV = 'development'; |
|
|
| const modules = { |
| '/nsEmpty/namespace.ts': { |
| namespace: { |
| name: 'Empty', |
| routes: null, |
| }, |
| }, |
| '/nsRoute/route-array.ts': { |
| route: { |
| path: ['/a', '/b'], |
| name: 'Array', |
| }, |
| }, |
| '/nsRoute/route-single.ts': { |
| route: { |
| path: '/single', |
| name: 'Single', |
| handler: () => ({ |
| title: 'ok', |
| link: 'https://example.com', |
| item: [], |
| allowEmpty: true, |
| }), |
| }, |
| }, |
| '/nsModule/route-module.ts': { |
| route: { |
| path: '/module', |
| name: 'Module', |
| module: () => |
| Promise.resolve({ |
| route: { |
| handler: () => new Response('module'), |
| }, |
| }), |
| }, |
| }, |
| '/nsApi/api-array.ts': { |
| apiRoute: { |
| path: ['/a1', '/a2'], |
| name: 'ApiArray', |
| handler: () => ({ ok: true }), |
| }, |
| }, |
| '/nsApi/api-single.ts': { |
| apiRoute: { |
| path: '/single', |
| name: 'ApiSingle', |
| handler: () => ({ ok: true }), |
| }, |
| }, |
| '/nsApi/api-module.ts': { |
| apiRoute: { |
| path: '/module', |
| name: 'ApiModule', |
| module: () => |
| Promise.resolve({ |
| apiRoute: { |
| handler: () => ({ ok: true }), |
| }, |
| }), |
| }, |
| }, |
| '/test/api-index.ts': { |
| apiRoute: { |
| path: '/', |
| name: 'ApiIndex', |
| }, |
| }, |
| }; |
|
|
| const directoryImportMock = vi.fn(() => modules); |
| vi.doMock('@/utils/directory-import', () => ({ |
| directoryImport: directoryImportMock, |
| })); |
| vi.resetModules(); |
| const { namespaces, default: registry } = await import('@/registry'); |
|
|
| expect(directoryImportMock).toHaveBeenCalled(); |
| expect(namespaces.nsRoute.routes['/single']).toBeDefined(); |
| expect(namespaces.nsApi.apiRoutes['/single']).toBeDefined(); |
|
|
| const app = new Hono(); |
| app.use(async (ctx, next) => { |
| const response = await next(); |
| const apiData = ctx.get('apiData'); |
| if (apiData) { |
| return ctx.json(apiData); |
| } |
| const data = ctx.get('data'); |
| if (data) { |
| return ctx.json(data); |
| } |
| return response; |
| }); |
| app.route('/', registry); |
|
|
| const routeResponse = await app.request('/nsModule/module'); |
| expect(await routeResponse.text()).toBe('module'); |
| await app.request('/api/nsApi/module'); |
|
|
| process.env.NODE_ENV = 'test'; |
| const apiTestResponse = await app.request('/api/test'); |
| expect(await apiTestResponse.json()).toEqual({ code: 0 }); |
|
|
| process.env.NODE_ENV = originalEnv; |
| }); |
| }); |
|
|