LibreChat/api/server/services/LangfusePromptSync.spec.js
Atef Bellaaj a2cd772d49
🏭 refactor: Centralize Source Prompt Imports in the Prompt Service (#17272)
PromptService gains importSourceGroup, which finds or creates a source
pointer group, grants the PUBLIC viewer role and rolls the group back if
the grant fails. The Langfuse catalog sync calls it instead of four
storage callbacks and two Mongo error predicates, and the prompt service
is composed once in api/server/services/Prompts.js and passed to the
prompt routes, linked instructions, instructions prompt access and the
Langfuse sync runner.

Co-authored-by: Rebase Probe <probe@example.com>
2026-10-24 13:51:31 +02:00

35 lines
1.2 KiB
JavaScript

const mockLock = { acquire: jest.fn(), extend: jest.fn(), release: jest.fn() };
const mockSyncPromptCatalog = jest.fn();
const mockCreateLangfusePromptSyncRunner = jest.fn(() => mockSyncPromptCatalog);
const mockLogger = { warn: jest.fn(), error: jest.fn() };
const mockPromptService = { importSourceGroup: jest.fn() };
jest.mock('@librechat/api', () => ({
createLangfusePromptSyncRunner: mockCreateLangfusePromptSyncRunner,
}));
jest.mock('@librechat/data-schemas', () => ({
logger: mockLogger,
}));
jest.mock('~/cache', () => ({
distributedLock: mockLock,
}));
jest.mock('~/server/services/Prompts', () => ({
promptService: mockPromptService,
}));
describe('LangfusePromptSync', () => {
it('composes the sync runner once with the shared lock and the shared prompt service', () => {
const { syncLangfusePromptCatalog } = require('./LangfusePromptSync');
expect(mockCreateLangfusePromptSyncRunner).toHaveBeenCalledTimes(1);
expect(mockCreateLangfusePromptSyncRunner).toHaveBeenCalledWith({
lock: mockLock,
promptService: mockPromptService,
logger: mockLogger,
});
expect(syncLangfusePromptCatalog).toBe(mockSyncPromptCatalog);
});
});