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", ), ); }), ); });