Skip to main content
Glama
DatabaseConfig.test.jsβ€’9.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const vitest_1 = require("vitest"); const Environment_1 = require("../../domain/value-objects/Environment"); const DatabaseConfig_1 = require("./DatabaseConfig"); (0, vitest_1.describe)('DatabaseConfig', () => { (0, vitest_1.describe)('constructor', () => { (0, vitest_1.it)('should create config with databases', () => { const databases = new Map(); databases.set(Environment_1.Environment.DEVELOPMENT, { name: 'dev_db', id: 'dev-123' }); databases.set(Environment_1.Environment.PRODUCTION, { name: 'prod_db', id: 'prod-456' }); const config = new DatabaseConfig_1.DatabaseConfig(databases); (0, vitest_1.expect)(config.hasEnvironment(Environment_1.Environment.DEVELOPMENT)).toBe(true); (0, vitest_1.expect)(config.hasEnvironment(Environment_1.Environment.PRODUCTION)).toBe(true); }); (0, vitest_1.it)('should throw error for empty databases', () => { (0, vitest_1.expect)(() => new DatabaseConfig_1.DatabaseConfig(new Map())).toThrow('At least one database must be configured'); }); (0, vitest_1.it)('should be immutable', () => { const databases = new Map(); databases.set(Environment_1.Environment.DEVELOPMENT, { name: 'dev', id: '123' }); const config = new DatabaseConfig_1.DatabaseConfig(databases); (0, vitest_1.expect)(Object.isFrozen(config)).toBe(true); }); }); (0, vitest_1.describe)('getDatabaseInstance()', () => { (0, vitest_1.it)('should return database instance for environment', () => { const databases = new Map(); databases.set(Environment_1.Environment.DEVELOPMENT, { name: 'dev_db', id: 'dev-123' }); const config = new DatabaseConfig_1.DatabaseConfig(databases); const instance = config.getDatabaseInstance(Environment_1.Environment.DEVELOPMENT); (0, vitest_1.expect)(instance.name).toBe('dev_db'); (0, vitest_1.expect)(instance.id).toBe('dev-123'); }); (0, vitest_1.it)('should throw error for unconfigured environment', () => { const databases = new Map(); databases.set(Environment_1.Environment.DEVELOPMENT, { name: 'dev', id: '123' }); const config = new DatabaseConfig_1.DatabaseConfig(databases); (0, vitest_1.expect)(() => config.getDatabaseInstance(Environment_1.Environment.PRODUCTION)).toThrow('No database configured for environment: production'); }); (0, vitest_1.it)('should include available environments in error message', () => { const databases = new Map(); databases.set(Environment_1.Environment.DEVELOPMENT, { name: 'dev', id: '123' }); databases.set(Environment_1.Environment.STAGING, { name: 'stage', id: '456' }); const config = new DatabaseConfig_1.DatabaseConfig(databases); (0, vitest_1.expect)(() => config.getDatabaseInstance(Environment_1.Environment.PRODUCTION)).toThrow('Available: development, staging'); }); }); (0, vitest_1.describe)('getDatabaseId()', () => { (0, vitest_1.it)('should return database ID', () => { const databases = new Map(); databases.set(Environment_1.Environment.DEVELOPMENT, { name: 'dev', id: 'dev-123' }); const config = new DatabaseConfig_1.DatabaseConfig(databases); (0, vitest_1.expect)(config.getDatabaseId(Environment_1.Environment.DEVELOPMENT)).toBe('dev-123'); }); }); (0, vitest_1.describe)('getDatabaseName()', () => { (0, vitest_1.it)('should return database name', () => { const databases = new Map(); databases.set(Environment_1.Environment.DEVELOPMENT, { name: 'dev_db', id: '123' }); const config = new DatabaseConfig_1.DatabaseConfig(databases); (0, vitest_1.expect)(config.getDatabaseName(Environment_1.Environment.DEVELOPMENT)).toBe('dev_db'); }); }); (0, vitest_1.describe)('hasEnvironment()', () => { (0, vitest_1.it)('should return true for configured environment', () => { const databases = new Map(); databases.set(Environment_1.Environment.DEVELOPMENT, { name: 'dev', id: '123' }); const config = new DatabaseConfig_1.DatabaseConfig(databases); (0, vitest_1.expect)(config.hasEnvironment(Environment_1.Environment.DEVELOPMENT)).toBe(true); }); (0, vitest_1.it)('should return false for unconfigured environment', () => { const databases = new Map(); databases.set(Environment_1.Environment.DEVELOPMENT, { name: 'dev', id: '123' }); const config = new DatabaseConfig_1.DatabaseConfig(databases); (0, vitest_1.expect)(config.hasEnvironment(Environment_1.Environment.PRODUCTION)).toBe(false); }); }); (0, vitest_1.describe)('getConfiguredEnvironments()', () => { (0, vitest_1.it)('should return all configured environments', () => { const databases = new Map(); databases.set(Environment_1.Environment.DEVELOPMENT, { name: 'dev', id: '123' }); databases.set(Environment_1.Environment.PRODUCTION, { name: 'prod', id: '456' }); const config = new DatabaseConfig_1.DatabaseConfig(databases); const envs = config.getConfiguredEnvironments(); (0, vitest_1.expect)(envs).toContain(Environment_1.Environment.DEVELOPMENT); (0, vitest_1.expect)(envs).toContain(Environment_1.Environment.PRODUCTION); (0, vitest_1.expect)(envs.length).toBe(2); }); }); (0, vitest_1.describe)('fromEnvironment()', () => { (0, vitest_1.it)('should load development database', () => { const env = { D1_DEV_DATABASE_ID: 'dev-123', D1_DEV_DATABASE_NAME: 'my_dev_db', }; const config = DatabaseConfig_1.DatabaseConfig.fromEnvironment(env); (0, vitest_1.expect)(config.hasEnvironment(Environment_1.Environment.DEVELOPMENT)).toBe(true); (0, vitest_1.expect)(config.getDatabaseName(Environment_1.Environment.DEVELOPMENT)).toBe('my_dev_db'); (0, vitest_1.expect)(config.getDatabaseId(Environment_1.Environment.DEVELOPMENT)).toBe('dev-123'); }); (0, vitest_1.it)('should use D1_DATABASE_ID as fallback for dev', () => { const env = { D1_DATABASE_ID: 'dev-123', }; const config = DatabaseConfig_1.DatabaseConfig.fromEnvironment(env); (0, vitest_1.expect)(config.hasEnvironment(Environment_1.Environment.DEVELOPMENT)).toBe(true); }); (0, vitest_1.it)('should use default name when not specified', () => { const env = { D1_DEV_DATABASE_ID: 'dev-123', }; const config = DatabaseConfig_1.DatabaseConfig.fromEnvironment(env); (0, vitest_1.expect)(config.getDatabaseName(Environment_1.Environment.DEVELOPMENT)).toBe('development'); }); (0, vitest_1.it)('should load staging database', () => { const env = { D1_DEV_DATABASE_ID: 'dev-123', D1_STAGING_DATABASE_ID: 'staging-456', D1_STAGING_DATABASE_NAME: 'my_staging_db', }; const config = DatabaseConfig_1.DatabaseConfig.fromEnvironment(env); (0, vitest_1.expect)(config.hasEnvironment(Environment_1.Environment.STAGING)).toBe(true); (0, vitest_1.expect)(config.getDatabaseName(Environment_1.Environment.STAGING)).toBe('my_staging_db'); }); (0, vitest_1.it)('should load production database', () => { const env = { D1_DEV_DATABASE_ID: 'dev-123', D1_PROD_DATABASE_ID: 'prod-789', D1_PROD_DATABASE_NAME: 'my_prod_db', }; const config = DatabaseConfig_1.DatabaseConfig.fromEnvironment(env); (0, vitest_1.expect)(config.hasEnvironment(Environment_1.Environment.PRODUCTION)).toBe(true); (0, vitest_1.expect)(config.getDatabaseName(Environment_1.Environment.PRODUCTION)).toBe('my_prod_db'); }); (0, vitest_1.it)('should support D1_PRODUCTION_DATABASE_ID alias', () => { const env = { D1_DEV_DATABASE_ID: 'dev-123', D1_PRODUCTION_DATABASE_ID: 'prod-789', }; const config = DatabaseConfig_1.DatabaseConfig.fromEnvironment(env); (0, vitest_1.expect)(config.hasEnvironment(Environment_1.Environment.PRODUCTION)).toBe(true); }); (0, vitest_1.it)('should load all environments', () => { const env = { D1_DEV_DATABASE_ID: 'dev-123', D1_STAGING_DATABASE_ID: 'staging-456', D1_PROD_DATABASE_ID: 'prod-789', }; const config = DatabaseConfig_1.DatabaseConfig.fromEnvironment(env); (0, vitest_1.expect)(config.getConfiguredEnvironments().length).toBe(3); }); (0, vitest_1.it)('should throw error when no databases configured', () => { const env = { SOME_OTHER_VAR: 'value', }; (0, vitest_1.expect)(() => DatabaseConfig_1.DatabaseConfig.fromEnvironment(env)).toThrow('No databases configured'); }); }); }); //# sourceMappingURL=DatabaseConfig.test.js.map

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/semanticintent/semantic-d1-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server