58 lines
2.3 KiB
TypeScript
58 lines
2.3 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { databaseClientOptionsFromEnv, postgresJsOptions } from "./client.js";
|
|
|
|
describe("databaseClientOptionsFromEnv", () => {
|
|
it("returns no options when nothing is set, preserving driver defaults", () => {
|
|
expect(databaseClientOptionsFromEnv({})).toEqual({});
|
|
expect(postgresJsOptions(databaseClientOptionsFromEnv({}))).toEqual({});
|
|
});
|
|
|
|
it("ignores empty values", () => {
|
|
expect(
|
|
databaseClientOptionsFromEnv({
|
|
DATABASE_PREPARED_STATEMENTS: "",
|
|
DATABASE_POOL_MAX: "",
|
|
}),
|
|
).toEqual({});
|
|
});
|
|
|
|
it("parses prepared-statement toggles", () => {
|
|
expect(databaseClientOptionsFromEnv({ DATABASE_PREPARED_STATEMENTS: "false" })).toEqual({ prepare: false });
|
|
expect(databaseClientOptionsFromEnv({ DATABASE_PREPARED_STATEMENTS: "0" })).toEqual({ prepare: false });
|
|
expect(databaseClientOptionsFromEnv({ DATABASE_PREPARED_STATEMENTS: "true" })).toEqual({ prepare: true });
|
|
expect(databaseClientOptionsFromEnv({ DATABASE_PREPARED_STATEMENTS: "TRUE" })).toEqual({ prepare: true });
|
|
});
|
|
|
|
it("parses pool and timeout settings", () => {
|
|
expect(
|
|
databaseClientOptionsFromEnv({
|
|
DATABASE_POOL_MAX: "25",
|
|
DATABASE_IDLE_TIMEOUT_SECONDS: "60",
|
|
DATABASE_CONNECT_TIMEOUT_SECONDS: "10",
|
|
}),
|
|
).toEqual({ maxConnections: 25, idleTimeoutSeconds: 60, connectTimeoutSeconds: 10 });
|
|
});
|
|
|
|
it("rejects malformed values instead of silently ignoring them", () => {
|
|
expect(() => databaseClientOptionsFromEnv({ DATABASE_PREPARED_STATEMENTS: "maybe" })).toThrow(
|
|
/DATABASE_PREPARED_STATEMENTS/,
|
|
);
|
|
expect(() => databaseClientOptionsFromEnv({ DATABASE_POOL_MAX: "0" })).toThrow(/DATABASE_POOL_MAX/);
|
|
expect(() => databaseClientOptionsFromEnv({ DATABASE_POOL_MAX: "-3" })).toThrow(/DATABASE_POOL_MAX/);
|
|
expect(() => databaseClientOptionsFromEnv({ DATABASE_CONNECT_TIMEOUT_SECONDS: "1.5" })).toThrow(
|
|
/DATABASE_CONNECT_TIMEOUT_SECONDS/,
|
|
);
|
|
});
|
|
|
|
it("maps to postgres.js option names", () => {
|
|
expect(
|
|
postgresJsOptions({
|
|
prepare: false,
|
|
maxConnections: 25,
|
|
idleTimeoutSeconds: 60,
|
|
connectTimeoutSeconds: 10,
|
|
}),
|
|
).toEqual({ prepare: false, max: 25, idle_timeout: 60, connect_timeout: 10 });
|
|
});
|
|
});
|