mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-06-10 18:17:08 +00:00
* fix: suppress unused Google service key noise * test: stabilize Google endpoint config mocks * fix: normalize Google service key endpoint config
119 lines
3.6 KiB
JavaScript
119 lines
3.6 KiB
JavaScript
const mockAccess = jest.fn();
|
|
const mockLoadServiceKey = jest.fn();
|
|
const mockIsUserProvided = jest.fn((value) => value === 'user_provided');
|
|
const mockLogger = {
|
|
debug: jest.fn(),
|
|
error: jest.fn(),
|
|
warn: jest.fn(),
|
|
};
|
|
|
|
function mockOptionalModule(moduleName, factory) {
|
|
try {
|
|
require.resolve(moduleName);
|
|
jest.doMock(moduleName, factory);
|
|
} catch {
|
|
jest.doMock(moduleName, factory, { virtual: true });
|
|
}
|
|
}
|
|
|
|
function mockDependencies() {
|
|
jest.doMock('fs/promises', () => ({
|
|
access: mockAccess,
|
|
}));
|
|
|
|
mockOptionalModule('@librechat/api', () => ({
|
|
isEnabled: (value) => value === true || value === 'true' || value === '1',
|
|
isUserProvided: mockIsUserProvided,
|
|
loadServiceKey: mockLoadServiceKey,
|
|
}));
|
|
|
|
mockOptionalModule('@librechat/data-schemas', () => ({
|
|
logger: mockLogger,
|
|
}));
|
|
|
|
mockOptionalModule('librechat-data-provider', () => ({
|
|
EModelEndpoint: {
|
|
agents: 'agents',
|
|
anthropic: 'anthropic',
|
|
assistants: 'assistants',
|
|
azureAssistants: 'azureAssistants',
|
|
azureOpenAI: 'azureOpenAI',
|
|
bedrock: 'bedrock',
|
|
google: 'google',
|
|
openAI: 'openAI',
|
|
},
|
|
}));
|
|
|
|
jest.doMock('~/server/utils/handleText', () => ({
|
|
generateConfig: (key) => (key ? { userProvide: key === 'user_provided' } : false),
|
|
}));
|
|
}
|
|
|
|
describe('loadAsyncEndpoints', () => {
|
|
const originalEnv = process.env;
|
|
|
|
beforeEach(() => {
|
|
jest.clearAllMocks();
|
|
jest.resetModules();
|
|
mockDependencies();
|
|
process.env = { ...originalEnv };
|
|
delete process.env.GOOGLE_KEY;
|
|
delete process.env.GOOGLE_SERVICE_KEY_FILE;
|
|
});
|
|
|
|
afterAll(() => {
|
|
process.env = originalEnv;
|
|
});
|
|
|
|
function loadModule(env = {}) {
|
|
process.env = { ...process.env, ...env };
|
|
return require('./loadAsyncEndpoints');
|
|
}
|
|
|
|
it('does not load the default Google service key when the default file is missing', async () => {
|
|
mockAccess.mockRejectedValue(Object.assign(new Error('missing'), { code: 'ENOENT' }));
|
|
const loadAsyncEndpoints = loadModule();
|
|
|
|
const result = await loadAsyncEndpoints();
|
|
|
|
expect(result).toEqual({ google: false });
|
|
expect(mockLoadServiceKey).not.toHaveBeenCalled();
|
|
expect(mockLogger.error).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('loads the default Google service key when the default file exists', async () => {
|
|
const serviceKey = { project_id: 'test-project' };
|
|
mockAccess.mockResolvedValue();
|
|
mockLoadServiceKey.mockResolvedValue(serviceKey);
|
|
const loadAsyncEndpoints = loadModule();
|
|
|
|
const result = await loadAsyncEndpoints();
|
|
|
|
expect(result).toEqual({ google: { userProvide: false } });
|
|
expect(mockLoadServiceKey).toHaveBeenCalledWith(expect.stringContaining('api/data/auth.json'));
|
|
});
|
|
|
|
it('loads an explicitly configured Google service key path without probing the default file', async () => {
|
|
const serviceKey = { project_id: 'test-project' };
|
|
mockLoadServiceKey.mockResolvedValue(serviceKey);
|
|
const loadAsyncEndpoints = loadModule({
|
|
GOOGLE_SERVICE_KEY_FILE: '/secrets/google-service-account.json',
|
|
});
|
|
|
|
const result = await loadAsyncEndpoints();
|
|
|
|
expect(result).toEqual({ google: { userProvide: false } });
|
|
expect(mockAccess).not.toHaveBeenCalled();
|
|
expect(mockLoadServiceKey).toHaveBeenCalledWith('/secrets/google-service-account.json');
|
|
});
|
|
|
|
it('uses GOOGLE_KEY without probing for a service key', async () => {
|
|
const loadAsyncEndpoints = loadModule({ GOOGLE_KEY: 'user_provided' });
|
|
|
|
const result = await loadAsyncEndpoints();
|
|
|
|
expect(result).toEqual({ google: { userProvide: true } });
|
|
expect(mockAccess).not.toHaveBeenCalled();
|
|
expect(mockLoadServiceKey).not.toHaveBeenCalled();
|
|
});
|
|
});
|