mirror of
https://github.com/jakejarvis/sofa.git
synced 2026-08-29 06:15:39 -04:00
- 211 tests across 15 files covering services (tracking, discovery, metadata, backup, credits, webhooks, settings, update-check, colors, person), utilities (config, cron, providers, title-theme), and TMDB image URL helpers - `lib/test-preload.ts` + `bunfig.toml` wire up a global in-memory SQLite DB with migrations for all DB-backed tests - `lib/test-utils.ts` provides `clearAllTables()` and seed helpers (insertUser, insertTitle, insertTvShow, insertMovieWatch, etc.) - Export `getBackupSource`, `isKnownBackup`, `isValidBackupFilename`, `buildBackupCron`, `performUpdateCheck` internals for direct testing - GitHub Actions workflow runs `bun test --coverage` on push/PR to main
179 lines
5.2 KiB
TypeScript
179 lines
5.2 KiB
TypeScript
import { afterEach, describe, expect, test } from "bun:test";
|
|
import {
|
|
getOidcProviderName,
|
|
isOidcAutoRegisterEnabled,
|
|
isOidcConfigured,
|
|
isPasswordLoginDisabled,
|
|
isTmdbConfigured,
|
|
} from "./config";
|
|
|
|
describe("isTmdbConfigured", () => {
|
|
const orig = process.env.TMDB_API_READ_ACCESS_TOKEN;
|
|
|
|
afterEach(() => {
|
|
if (orig !== undefined) {
|
|
process.env.TMDB_API_READ_ACCESS_TOKEN = orig;
|
|
} else {
|
|
delete process.env.TMDB_API_READ_ACCESS_TOKEN;
|
|
}
|
|
});
|
|
|
|
test("returns true when token is set", () => {
|
|
process.env.TMDB_API_READ_ACCESS_TOKEN = "some-token";
|
|
expect(isTmdbConfigured()).toBe(true);
|
|
});
|
|
|
|
test("returns false when token is unset", () => {
|
|
delete process.env.TMDB_API_READ_ACCESS_TOKEN;
|
|
expect(isTmdbConfigured()).toBe(false);
|
|
});
|
|
|
|
test("returns false when token is empty string", () => {
|
|
process.env.TMDB_API_READ_ACCESS_TOKEN = "";
|
|
expect(isTmdbConfigured()).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("isOidcConfigured", () => {
|
|
const origId = process.env.OIDC_CLIENT_ID;
|
|
const origSecret = process.env.OIDC_CLIENT_SECRET;
|
|
const origIssuer = process.env.OIDC_ISSUER_URL;
|
|
|
|
afterEach(() => {
|
|
for (const [key, val] of [
|
|
["OIDC_CLIENT_ID", origId],
|
|
["OIDC_CLIENT_SECRET", origSecret],
|
|
["OIDC_ISSUER_URL", origIssuer],
|
|
] as const) {
|
|
if (val !== undefined) {
|
|
process.env[key] = val;
|
|
} else {
|
|
delete process.env[key];
|
|
}
|
|
}
|
|
});
|
|
|
|
test("returns true when all three vars are set", () => {
|
|
process.env.OIDC_CLIENT_ID = "id";
|
|
process.env.OIDC_CLIENT_SECRET = "secret";
|
|
process.env.OIDC_ISSUER_URL = "https://issuer.example.com";
|
|
expect(isOidcConfigured()).toBe(true);
|
|
});
|
|
|
|
test("returns false when client ID is missing", () => {
|
|
delete process.env.OIDC_CLIENT_ID;
|
|
process.env.OIDC_CLIENT_SECRET = "secret";
|
|
process.env.OIDC_ISSUER_URL = "https://issuer.example.com";
|
|
expect(isOidcConfigured()).toBe(false);
|
|
});
|
|
|
|
test("returns false when client secret is missing", () => {
|
|
process.env.OIDC_CLIENT_ID = "id";
|
|
delete process.env.OIDC_CLIENT_SECRET;
|
|
process.env.OIDC_ISSUER_URL = "https://issuer.example.com";
|
|
expect(isOidcConfigured()).toBe(false);
|
|
});
|
|
|
|
test("returns false when issuer URL is missing", () => {
|
|
process.env.OIDC_CLIENT_ID = "id";
|
|
process.env.OIDC_CLIENT_SECRET = "secret";
|
|
delete process.env.OIDC_ISSUER_URL;
|
|
expect(isOidcConfigured()).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("getOidcProviderName", () => {
|
|
const orig = process.env.OIDC_PROVIDER_NAME;
|
|
|
|
afterEach(() => {
|
|
if (orig !== undefined) {
|
|
process.env.OIDC_PROVIDER_NAME = orig;
|
|
} else {
|
|
delete process.env.OIDC_PROVIDER_NAME;
|
|
}
|
|
});
|
|
|
|
test("returns custom name when set", () => {
|
|
process.env.OIDC_PROVIDER_NAME = "Okta";
|
|
expect(getOidcProviderName()).toBe("Okta");
|
|
});
|
|
|
|
test("returns 'SSO' as default", () => {
|
|
delete process.env.OIDC_PROVIDER_NAME;
|
|
expect(getOidcProviderName()).toBe("SSO");
|
|
});
|
|
});
|
|
|
|
describe("isOidcAutoRegisterEnabled", () => {
|
|
const orig = process.env.OIDC_AUTO_REGISTER;
|
|
|
|
afterEach(() => {
|
|
if (orig !== undefined) {
|
|
process.env.OIDC_AUTO_REGISTER = orig;
|
|
} else {
|
|
delete process.env.OIDC_AUTO_REGISTER;
|
|
}
|
|
});
|
|
|
|
test("returns true by default", () => {
|
|
delete process.env.OIDC_AUTO_REGISTER;
|
|
expect(isOidcAutoRegisterEnabled()).toBe(true);
|
|
});
|
|
|
|
test("returns false when explicitly set to 'false'", () => {
|
|
process.env.OIDC_AUTO_REGISTER = "false";
|
|
expect(isOidcAutoRegisterEnabled()).toBe(false);
|
|
});
|
|
|
|
test("returns true for any other value", () => {
|
|
process.env.OIDC_AUTO_REGISTER = "true";
|
|
expect(isOidcAutoRegisterEnabled()).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe("isPasswordLoginDisabled", () => {
|
|
const origDisable = process.env.DISABLE_PASSWORD_LOGIN;
|
|
const origId = process.env.OIDC_CLIENT_ID;
|
|
const origSecret = process.env.OIDC_CLIENT_SECRET;
|
|
const origIssuer = process.env.OIDC_ISSUER_URL;
|
|
|
|
afterEach(() => {
|
|
for (const [key, val] of [
|
|
["DISABLE_PASSWORD_LOGIN", origDisable],
|
|
["OIDC_CLIENT_ID", origId],
|
|
["OIDC_CLIENT_SECRET", origSecret],
|
|
["OIDC_ISSUER_URL", origIssuer],
|
|
] as const) {
|
|
if (val !== undefined) {
|
|
process.env[key] = val;
|
|
} else {
|
|
delete process.env[key];
|
|
}
|
|
}
|
|
});
|
|
|
|
test("returns true when flag is 'true' and OIDC is configured", () => {
|
|
process.env.DISABLE_PASSWORD_LOGIN = "true";
|
|
process.env.OIDC_CLIENT_ID = "id";
|
|
process.env.OIDC_CLIENT_SECRET = "secret";
|
|
process.env.OIDC_ISSUER_URL = "https://issuer.example.com";
|
|
expect(isPasswordLoginDisabled()).toBe(true);
|
|
});
|
|
|
|
test("returns false when flag is 'true' but OIDC is not configured", () => {
|
|
process.env.DISABLE_PASSWORD_LOGIN = "true";
|
|
delete process.env.OIDC_CLIENT_ID;
|
|
delete process.env.OIDC_CLIENT_SECRET;
|
|
delete process.env.OIDC_ISSUER_URL;
|
|
expect(isPasswordLoginDisabled()).toBe(false);
|
|
});
|
|
|
|
test("returns false when flag is not set", () => {
|
|
delete process.env.DISABLE_PASSWORD_LOGIN;
|
|
process.env.OIDC_CLIENT_ID = "id";
|
|
process.env.OIDC_CLIENT_SECRET = "secret";
|
|
process.env.OIDC_ISSUER_URL = "https://issuer.example.com";
|
|
expect(isPasswordLoginDisabled()).toBe(false);
|
|
});
|
|
});
|