| 1 | import { PgPool } from "@effect/sql-pg" |
| 2 | import { assert, it } from "@effect/vitest" |
| 3 | import { Effect, Redacted } from "effect" |
| 4 | import { PgContainer } from "./utils.ts" |
| 5 | |
| 6 | it.layer(PgContainer.layer, { timeout: "30 seconds" })("PostgreSQL startup defaults", (it) => { |
| 7 | it.effect("preserves named and opaque defaults across replacement and RESET ALL", () => |
| 8 | Effect.gen(function*() { |
| 9 | const container = yield* PgContainer |
| 10 | const pool = yield* PgPool.make({ |
| 11 | url: Redacted.make(container.getConnectionUri()), |
| 12 | startupParameters: { statement_timeout: "1234ms" }, |
| 13 | startupOptions: "-c lock_timeout=2345", |
| 14 | maxConnections: 1 |
| 15 | }) |
| 16 | const query = "SELECT current_setting('statement_timeout') AS timeout, " + |
| 17 | "current_setting('lock_timeout') AS lock" |
| 18 | const defaults = [{ timeout: "1234ms", lock: "2345ms" }] |
| 19 | const firstPid = yield* Effect.scoped(Effect.gen(function*() { |
| 20 | const connection = yield* pool.get |
| 21 | assert.deepStrictEqual((yield* connection.query(query)).rows, defaults) |
| 22 | yield* pool.invalidate(connection) |
| 23 | return connection.processId |
| 24 | })) |
| 25 | const replacement = yield* pool.get |
| 26 | assert.notStrictEqual(replacement.processId, firstPid) |
| 27 | assert.deepStrictEqual((yield* replacement.query(query)).rows, defaults) |
| 28 | |
| 29 | yield* replacement.query("SET statement_timeout = '5678ms'") |
| 30 | yield* replacement.query("SET lock_timeout = '6789ms'") |
| 31 | assert.deepStrictEqual((yield* replacement.query(query)).rows, [{ |
| 32 | timeout: "5678ms", |
| 33 | lock: "6789ms" |
| 34 | }]) |
| 35 | yield* replacement.query("RESET ALL") |
| 36 | assert.deepStrictEqual((yield* replacement.query(query)).rows, defaults) |
| 37 | })) |
| 38 | }) |