Merge commit '36c66dd290d3ce6eb1ccd310d0c658d4a32bb8eb' as 'repos/effect'
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
import { NodeFileSystem } from "@effect/platform-node"
|
||||
import { SqliteClient, SqliteMigrator } from "@effect/sql-sqlite-node"
|
||||
import { assert, describe, it } from "@effect/vitest"
|
||||
import { Effect, FileSystem } from "effect"
|
||||
import { Reactivity } from "effect/unstable/reactivity"
|
||||
import * as SqlClient from "effect/unstable/sql/SqlClient"
|
||||
import * as SqlError from "effect/unstable/sql/SqlError"
|
||||
|
||||
const makeClients = Effect.gen(function*() {
|
||||
const fs = yield* FileSystem.FileSystem
|
||||
const dir = yield* fs.makeTempDirectoryScoped()
|
||||
const filename = dir + "/test.db"
|
||||
|
||||
return {
|
||||
lockClient: yield* SqliteClient.make({ filename }),
|
||||
migratorClient: yield* SqliteClient.make({ filename })
|
||||
}
|
||||
}).pipe(Effect.provide([NodeFileSystem.layer, Reactivity.layer]))
|
||||
|
||||
describe("SqliteMigrator", () => {
|
||||
it.effect("fails on lock errors", () =>
|
||||
Effect.gen(function*() {
|
||||
const { lockClient, migratorClient } = yield* makeClients
|
||||
|
||||
yield* migratorClient`PRAGMA busy_timeout = 1`
|
||||
|
||||
yield* SqliteMigrator.run({
|
||||
loader: SqliteMigrator.fromRecord({})
|
||||
}).pipe(Effect.provideService(SqlClient.SqlClient, migratorClient))
|
||||
|
||||
yield* Effect.acquireRelease(
|
||||
lockClient`BEGIN IMMEDIATE`,
|
||||
() => lockClient`ROLLBACK`.pipe(Effect.ignore)
|
||||
)
|
||||
|
||||
const error = yield* Effect.flip(
|
||||
SqliteMigrator.run({
|
||||
loader: SqliteMigrator.fromRecord({
|
||||
"1_test": Effect.void
|
||||
})
|
||||
}).pipe(Effect.provideService(SqlClient.SqlClient, migratorClient))
|
||||
)
|
||||
|
||||
assert.strictEqual(error._tag, "SqlError")
|
||||
assert(SqlError.isSqlError(error))
|
||||
assert.strictEqual(error.reason._tag, "LockTimeoutError")
|
||||
}))
|
||||
})
|
||||
Reference in New Issue
Block a user