mirror of
https://github.com/Nezumi-2711/9router.git
synced 2026-09-22 13:38:31 +00:00
fix: improve the behavior for the web app
This commit is contained in:
@@ -352,6 +352,20 @@ describe("DB SQLite layer — public API parity", () => {
|
||||
expect((await sqliteDb.getModelAliases()).marker).toBe("before");
|
||||
});
|
||||
|
||||
it("exportDb / importDb preserves disabled model settings", async () => {
|
||||
await sqliteDb.disableModels("backup-provider", ["backup-model"]);
|
||||
const snapshot = await sqliteDb.exportDb();
|
||||
|
||||
expect(snapshot.disabledModels).toMatchObject({
|
||||
"backup-provider": ["backup-model"],
|
||||
});
|
||||
|
||||
await sqliteDb.enableModels("backup-provider", []);
|
||||
await sqliteDb.importDb(snapshot);
|
||||
|
||||
expect(await sqliteDb.getDisabledByProvider("backup-provider")).toEqual(["backup-model"]);
|
||||
});
|
||||
|
||||
it("pricing: user pricing merged with constants", async () => {
|
||||
await sqliteDb.updatePricing({ openai: { "gpt-test": { input: 1, output: 2 } } });
|
||||
const p = await sqliteDb.getPricing();
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
import fs from "node:fs";
|
||||
import os from "node:os";
|
||||
import path from "node:path";
|
||||
import { afterAll, beforeAll, describe, expect, it, vi } from "vitest";
|
||||
|
||||
const originalDataDir = process.env.DATA_DIR;
|
||||
let tempDir;
|
||||
let db;
|
||||
let getUsageTopologyProviders;
|
||||
|
||||
beforeAll(async () => {
|
||||
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "9router-usage-topology-"));
|
||||
process.env.DATA_DIR = tempDir;
|
||||
vi.resetModules();
|
||||
db = await import("@/lib/db/index.js");
|
||||
await db.initDb();
|
||||
({ getUsageTopologyProviders } = await import("@/lib/providers/usageTopologyProviders.js"));
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
if (tempDir) fs.rmSync(tempDir, { recursive: true, force: true });
|
||||
if (originalDataDir === undefined) delete process.env.DATA_DIR;
|
||||
else process.env.DATA_DIR = originalDataDir;
|
||||
});
|
||||
|
||||
describe("usage topology providers", () => {
|
||||
it("includes every active router connection, regardless of dashboard owner", async () => {
|
||||
const firstUser = await db.createUser({ username: "topology-first", password: "password", role: "user" });
|
||||
const secondUser = await db.createUser({ username: "topology-second", password: "password", role: "user" });
|
||||
|
||||
await db.createProviderConnection({
|
||||
provider: "topology-provider-first",
|
||||
authType: "apikey",
|
||||
apiKey: "first-key",
|
||||
ownerId: firstUser.id,
|
||||
});
|
||||
await db.createProviderConnection({
|
||||
provider: "topology-provider-second",
|
||||
authType: "apikey",
|
||||
apiKey: "second-key",
|
||||
ownerId: secondUser.id,
|
||||
});
|
||||
await db.createProviderConnection({
|
||||
provider: "topology-provider-inactive",
|
||||
authType: "apikey",
|
||||
apiKey: "inactive-key",
|
||||
ownerId: secondUser.id,
|
||||
isActive: false,
|
||||
});
|
||||
|
||||
const providers = await getUsageTopologyProviders();
|
||||
const providerIds = providers.map((provider) => provider.provider);
|
||||
|
||||
expect(providerIds).toContain("topology-provider-first");
|
||||
expect(providerIds).toContain("topology-provider-second");
|
||||
expect(providerIds).not.toContain("topology-provider-inactive");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user