75 lines · 2.4 KB · TypeScript
RawDownload
import { assert, it } from "@effect/vitest";import * as Effect from "effect/Effect";import * as Layer from "effect/Layer";import * as SqlClient from "effect/unstable/sql/SqlClient"; import { runMigrations } from "../Migrations.ts";import * as NodeSqliteClient from "../NodeSqliteClient.ts"; const layer = it.layer(Layer.mergeAll(NodeSqliteClient.layerMemory())); layer("027_028_ProviderInstanceIdColumns", (it) => {  it.effect("continues when provider_session_runtime was partially migrated", () =>    Effect.gen(function* () {      const sql = yield* SqlClient.SqlClient;       yield* runMigrations({ toMigrationInclusive: 26 });      yield* sql`        ALTER TABLE provider_session_runtime        ADD COLUMN provider_instance_id TEXT      `;       yield* runMigrations({ toMigrationInclusive: 28 });       const migrations = yield* sql<{        readonly migration_id: number;        readonly name: string;      }>`        SELECT migration_id, name        FROM effect_sql_migrations        WHERE migration_id IN (27, 28)        ORDER BY migration_id      `;      assert.deepStrictEqual(migrations, [        {          migration_id: 27,          name: "ProviderSessionRuntimeInstanceId",        },        {          migration_id: 28,          name: "ProjectionThreadSessionInstanceId",        },      ]);       const providerSessionColumns = yield* sql<{ readonly name: string }>`        PRAGMA table_info(provider_session_runtime)      `;      assert.ok(providerSessionColumns.some((column) => column.name === "provider_instance_id"));       const projectionThreadSessionColumns = yield* sql<{ readonly name: string }>`        PRAGMA table_info(projection_thread_sessions)      `;      assert.ok(        projectionThreadSessionColumns.some((column) => column.name === "provider_instance_id"),      );       const providerSessionIndexes = yield* sql<{ readonly name: string }>`        PRAGMA index_list(provider_session_runtime)      `;      assert.ok(        providerSessionIndexes.some(          (index) => index.name === "idx_provider_session_runtime_instance",        ),      );       const projectionThreadSessionIndexes = yield* sql<{ readonly name: string }>`        PRAGMA index_list(projection_thread_sessions)      `;      assert.ok(        projectionThreadSessionIndexes.some(          (index) => index.name === "idx_projection_thread_sessions_instance",        ),      );    }),  );});