Ctrl K
ComunidadGuías…

tests/integration/key-fence-migration.test.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { test } from "bun:test";
import assert from "node:assert/strict";
import { mkdtempSync, rmSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { createApiKey, organizationStatement } from "../../src/core/auth";
import { MIGRATIONS, migrate } from "../../src/core/migrations";
import { createSqliteDb, openDatabase } from "../../src/runtime/bun/sqlite";

test("migration 26 keeps a live api key and adds no fence rows", async () => {
  const directory = mkdtempSync(join(tmpdir(), "titen-key-fence-"));
  const database = openDatabase(join(directory, "titen.db"));
  const db = createSqliteDb(database);
  try {
    await db.exec(
      `CREATE TABLE titen_migrations (
         version INTEGER PRIMARY KEY,
         applied_at TEXT NOT NULL
       )`,
    );
    for (const migration of MIGRATIONS.filter(({ version }) => version <= 25))
      await db.batch([
        ...migration.statements.map((sql) => ({ sql })),
        {
          sql: `INSERT INTO titen_migrations (version, applied_at) VALUES (?, ?)`,
          params: [migration.version, "2026-10-05T00:00:00.000Z"],
        },
      ]);
    const key = await createApiKey({
      orgId: "org_existing",
      principalId: "agent_existing",
      principalKind: "agent",
      label: "existing",
      scopes: ["observations:write"],
      maxTrust: "asserted",
    });
    await db.batch([
      organizationStatement("org_existing", "Castle"),
      key.statement,
    ]);
    assert.equal(await migrate(db), MIGRATIONS.at(-1)!.version);
    const stored = await db.all<{ id: string; label: string }>(
      `SELECT id, label FROM api_keys WHERE id = ?`,
      [key.id],
    );
    assert.deepEqual(stored, [{ id: key.id, label: "existing" }]);
    const fences = await db.all<{ n: number }>(`SELECT COUNT(*) AS n FROM api_key_fences`);
    assert.equal(Number(fences[0]?.n ?? 0), 0);
  } finally {
    database.close();
    rmSync(directory, { recursive: true, force: true });
  }
});