Ctrl K
ComunidadGuías…

tests/integration/channel-release-fts-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 { MIGRATIONS, migrate } from "../../src/core/migrations";
import { createSqliteDb, openDatabase } from "../../src/runtime/bun/sqlite";

test("migration 30 indexes releases that were already active", async () => {
  const directory = mkdtempSync(join(tmpdir(), "titen-release-fts-"));
  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 <= 27))
      await db.batch([
        ...migration.statements.map((sql) => ({ sql })),
        {
          sql: `INSERT INTO titen_migrations (version, applied_at) VALUES (?, ?)`,
          params: [migration.version, "2026-11-01T00:00:00.000Z"],
        },
      ]);
    database.run("PRAGMA foreign_keys = OFF");
    const insert = (id: string, version: number, status: string, content: string) =>
      db.batch([{
        sql: `INSERT INTO channel_releases
                (id, org_id, channel, audience, version, status, created_at,
                 channel_id, claim_id, claim_version, released_content,
                 lifecycle_status, valid_from, activated_at, updated_at)
              VALUES (?, 'org_existing', 'chn_existing', 'anonymous', ?, 'active',
                      '2026-11-01T00:00:00.000Z', 'chn_existing', 'clm_existing', 1,
                      ?, ?, '2025-01-01T00:00:00.000Z', '2026-11-01T00:00:00.000Z',
                      '2026-11-01T00:00:00.000Z')`,
        params: [id, version, content, status],
      }]);
    await insert("rel_active", 1, "active", "Returns are accepted within thirty days.");
    await insert("rel_draft", 2, "draft", "Returns draft wording that is not live.");
    assert.equal(await migrate(db), MIGRATIONS.at(-1)!.version);
    const hits = await db.all<{ release_id: string }>(
      `SELECT release_id FROM channel_release_fts
        WHERE channel_release_fts MATCH ('org_scope : "' || lower(hex(?)) || '0" AND '
              || 'channel_scope : "' || lower(hex(?)) || '0" AND released_content : ("returns")')`,
      ["org_existing", "chn_existing"],
    );
    assert.deepEqual(hits.map((row) => row.release_id), ["rel_active"]);
  } finally {
    database.close();
    rmSync(directory, { recursive: true, force: true });
  }
});