106 lines
2.8 KiB
TypeScript
106 lines
2.8 KiB
TypeScript
import fs from "node:fs";
|
|
import path from "node:path";
|
|
|
|
/**
|
|
* Test configuration loaded from .env file
|
|
*/
|
|
export interface TestConfig {
|
|
serverUrl: string;
|
|
serverName: string;
|
|
username: string;
|
|
password: string;
|
|
musicLibraryId?: string;
|
|
movieLibraryId?: string;
|
|
artistId?: string;
|
|
albumId?: string;
|
|
trackId?: string;
|
|
movieId?: string;
|
|
episodeId?: string;
|
|
timeout: number;
|
|
waitTimeout: number;
|
|
}
|
|
|
|
/**
|
|
* Load test configuration from .env file
|
|
* Falls back to demo server if .env doesn't exist
|
|
*/
|
|
export function loadTestConfig(): TestConfig {
|
|
const envPath = path.join(__dirname, "..", ".env");
|
|
const config: TestConfig = {
|
|
serverUrl: "https://demo.jellyfin.org/stable",
|
|
serverName: "Demo Server",
|
|
username: "demo",
|
|
password: "",
|
|
timeout: 60000,
|
|
waitTimeout: 15000,
|
|
};
|
|
|
|
// Try to load .env file
|
|
if (fs.existsSync(envPath)) {
|
|
const envContent = fs.readFileSync(envPath, "utf-8");
|
|
const lines = envContent.split("\n");
|
|
|
|
for (const line of lines) {
|
|
// Skip comments and empty lines
|
|
if (line.trim().startsWith("#") || !line.trim()) continue;
|
|
|
|
const [key, ...valueParts] = line.split("=");
|
|
const value = valueParts.join("=").trim();
|
|
|
|
switch (key.trim()) {
|
|
case "TEST_SERVER_URL":
|
|
if (value) config.serverUrl = value;
|
|
break;
|
|
case "TEST_SERVER_NAME":
|
|
if (value) config.serverName = value;
|
|
break;
|
|
case "TEST_USERNAME":
|
|
if (value) config.username = value;
|
|
break;
|
|
case "TEST_PASSWORD":
|
|
config.password = value; // Can be empty
|
|
break;
|
|
case "TEST_MUSIC_LIBRARY_ID":
|
|
if (value) config.musicLibraryId = value;
|
|
break;
|
|
case "TEST_MOVIE_LIBRARY_ID":
|
|
if (value) config.movieLibraryId = value;
|
|
break;
|
|
case "TEST_ARTIST_ID":
|
|
if (value) config.artistId = value;
|
|
break;
|
|
case "TEST_ALBUM_ID":
|
|
if (value) config.albumId = value;
|
|
break;
|
|
case "TEST_TRACK_ID":
|
|
if (value) config.trackId = value;
|
|
break;
|
|
case "TEST_MOVIE_ID":
|
|
if (value) config.movieId = value;
|
|
break;
|
|
case "TEST_EPISODE_ID":
|
|
if (value) config.episodeId = value;
|
|
break;
|
|
case "TEST_TIMEOUT":
|
|
if (value) config.timeout = parseInt(value, 10);
|
|
break;
|
|
case "TEST_WAIT_TIMEOUT":
|
|
if (value) config.waitTimeout = parseInt(value, 10);
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
console.warn(
|
|
"⚠️ No e2e/.env file found. Using demo server credentials."
|
|
);
|
|
console.warn(
|
|
" Copy e2e/.env.example to e2e/.env and configure your test server."
|
|
);
|
|
}
|
|
|
|
return config;
|
|
}
|
|
|
|
// Export a singleton instance
|
|
export const testConfig = loadTestConfig();
|