- enforce-catch-type: 增加 TSUnknownKeyword 判断,消除28个 TS6 假阳性 - no-empty-function: 统一为注释方案,移除测试/生产分支和 eslint-disable 引导 - logger.ts: 空函数体改为注释说明,删除无用 eslint-disable 指令 - 补充15处 catch 子句 : unknown 类型注解 - 清理7个测试文件失效 eslint-disable 指令 - chat/send.ts: 提取 getModelWithProvider DAO,消除直接 Drizzle 操作 - projects/update.ts: 修复死代码+条件逻辑 bug - providers/update.ts: 补充至少一个字段校验 - 前端: inline style → CSS className, ProviderFormModal whitespace 校验 - 开发文档: 更新 Zod 使用说明(AI SDK 框架级约束)
61 lines
2.0 KiB
TypeScript
61 lines
2.0 KiB
TypeScript
/* eslint-disable @typescript-eslint/require-await */
|
|
import { describe, expect, test } from "bun:test";
|
|
import { mkdirSync } from "node:fs";
|
|
import { tmpdir } from "node:os";
|
|
import { join } from "node:path";
|
|
|
|
import type { ResolvedConfig } from "../../src/server/config/types";
|
|
|
|
import { bootstrap, type BootstrapDependencies } from "../../src/server/bootstrap";
|
|
import { createMemoryLogger } from "../../src/server/logger";
|
|
|
|
function makeTempConfig(overrides: Partial<ResolvedConfig> = {}): ResolvedConfig {
|
|
const base = join(tmpdir(), `bootstrap-db-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
mkdirSync(base, { recursive: true });
|
|
return {
|
|
configDir: base,
|
|
dataDir: join(base, "data"),
|
|
host: "127.0.0.1",
|
|
logging: {
|
|
consoleLevel: "info",
|
|
fileLevel: "info",
|
|
filePath: join(base, "data", "logs", "test.log"),
|
|
rotationFrequency: "daily",
|
|
rotationMaxFiles: 14,
|
|
rotationSizeBytes: 52428800,
|
|
rotationSizeRaw: "50MB",
|
|
},
|
|
port: 0,
|
|
...overrides,
|
|
};
|
|
}
|
|
|
|
describe("bootstrap 数据库集成", () => {
|
|
test("启动时将数据库传递给 startServer", async () => {
|
|
let started = false;
|
|
let receivedDb: unknown = undefined;
|
|
|
|
const cfg = makeTempConfig();
|
|
const mockLoadConfig = (async () => cfg) as unknown as BootstrapDependencies["loadConfig"];
|
|
const mockOnSignal = (_signal: string, _handler: () => void) => {};
|
|
const mockStartServer = (options: { db: unknown }) => {
|
|
receivedDb = options.db;
|
|
started = true;
|
|
return { close: () => {} };
|
|
};
|
|
|
|
const deps: BootstrapDependencies = {
|
|
createLogger: async () => createMemoryLogger(),
|
|
loadConfig: mockLoadConfig,
|
|
onSignal: mockOnSignal,
|
|
startServer: mockStartServer,
|
|
};
|
|
|
|
await bootstrap({ configPath: join(cfg.configDir, "config.yaml"), mode: "production" }, deps);
|
|
|
|
expect(started).toBe(true);
|
|
expect(receivedDb).not.toBeUndefined();
|
|
expect(typeof (receivedDb as { close?: unknown }).close).toBe("function");
|
|
});
|
|
});
|