62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
import {
|
|
ConfigurationError,
|
|
loadConfig
|
|
} from "../src/config.js";
|
|
|
|
test("configuration accepts only booking_test and never echoes secrets", () => {
|
|
const secret = "sensitive-test-value";
|
|
const config = loadConfig({
|
|
DB_HOST: "database.example",
|
|
DB_PORT: "5432",
|
|
DB_USER: "app_user",
|
|
DB_PASSWORD: secret,
|
|
DB_NAME: "booking_test",
|
|
DB_SSL: "true"
|
|
});
|
|
|
|
assert.equal(config.database.name, "booking_test");
|
|
assert.equal(config.database.ssl, true);
|
|
assert.equal(config.apiHost, "127.0.0.1");
|
|
assert.deepEqual(config.corsOrigins, [
|
|
"http://127.0.0.1:4173",
|
|
"http://localhost:4173"
|
|
]);
|
|
assert.deepEqual(config.authentication, {
|
|
username: "wyndhamcondon",
|
|
password: "wyndhamcondon",
|
|
sessionTtlMs: 12 * 60 * 60 * 1_000,
|
|
cookieSecure: false
|
|
});
|
|
|
|
const productionConfig = loadConfig({
|
|
NODE_ENV: "production",
|
|
AUTH_USERNAME: "operator",
|
|
AUTH_PASSWORD: "production-secret",
|
|
AUTH_SESSION_TTL_HOURS: "24",
|
|
DB_HOST: "database.example",
|
|
DB_USER: "app_user",
|
|
DB_PASSWORD: secret,
|
|
DB_NAME: "booking_test"
|
|
});
|
|
assert.equal(productionConfig.authentication.username, "operator");
|
|
assert.equal(productionConfig.authentication.sessionTtlMs, 24 * 60 * 60 * 1_000);
|
|
assert.equal(productionConfig.authentication.cookieSecure, true);
|
|
|
|
assert.throws(
|
|
() => loadConfig({
|
|
DB_HOST: "database.example",
|
|
DB_USER: "app_user",
|
|
DB_PASSWORD: secret,
|
|
DB_NAME: "another_database"
|
|
}),
|
|
error => {
|
|
assert.ok(error instanceof ConfigurationError);
|
|
assert.equal(error.message.includes("DB_NAME"), true);
|
|
assert.equal(error.message.includes(secret), false);
|
|
return true;
|
|
}
|
|
);
|
|
});
|