Files
waggle-os/packages/server/tests/local/provider-env.test.ts
Oleg Maslov 0c3e2ead3b
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled
moving
2026-09-02 10:10:29 +02:00

74 lines
2.5 KiB
TypeScript

import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import { afterEach, describe, expect, it } from 'vitest';
import { VaultStore } from '@waggle/core';
import {
applyProviderKeyToEnv,
hydrateProviderEnvFromVault,
migrateLegacyProviderKeysToVault,
} from '../../src/local/provider-env.js';
const originalEnv = new Map<string, string | undefined>();
function rememberEnv(name: string): void {
if (!originalEnv.has(name)) originalEnv.set(name, process.env[name]);
}
afterEach(() => {
for (const [name, value] of originalEnv) {
if (value === undefined) delete process.env[name];
else process.env[name] = value;
}
originalEnv.clear();
});
describe('provider environment hydration', () => {
it('maps provider keys to every environment name required by the router', () => {
rememberEnv('GEMINI_API_KEY');
rememberEnv('GOOGLE_API_KEY');
delete process.env.GEMINI_API_KEY;
delete process.env.GOOGLE_API_KEY;
expect(applyProviderKeyToEnv('google', 'google-secret')).toBe(2);
expect(process.env.GEMINI_API_KEY).toBe('google-secret');
expect(process.env.GOOGLE_API_KEY).toBe('google-secret');
});
it('hydrates vault keys without replacing an explicit process override', () => {
const dataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'waggle-provider-env-'));
rememberEnv('OPENAI_API_KEY');
process.env.OPENAI_API_KEY = 'explicit-key';
try {
const vault = new VaultStore(dataDir);
vault.set('openai', 'vault-key');
expect(hydrateProviderEnvFromVault(vault)).toBe(0);
expect(process.env.OPENAI_API_KEY).toBe('explicit-key');
} finally {
fs.rmSync(dataDir, { recursive: true, force: true });
}
});
it('migrates and scrubs legacy keys before startup catalog discovery', () => {
const dataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'waggle-provider-migrate-'));
const configPath = path.join(dataDir, 'config.json');
fs.writeFileSync(configPath, JSON.stringify({
providers: {
openai: { apiKey: 'legacy-secret', models: ['old-static-entry'] },
},
}));
try {
const vault = new VaultStore(dataDir);
expect(migrateLegacyProviderKeysToVault(dataDir, vault)).toBe(1);
expect(vault.get('openai')?.value).toBe('legacy-secret');
expect(JSON.parse(fs.readFileSync(configPath, 'utf8')).providers.openai).toEqual({
apiKey: '',
models: ['old-static-entry'],
});
} finally {
fs.rmSync(dataDir, { recursive: true, force: true });
}
});
});