55 lines
2.1 KiB
JavaScript
55 lines
2.1 KiB
JavaScript
const openaiService = require('../src/services/openaiService');
|
|
|
|
describe('OpenAI usage request caching', () => {
|
|
let originalCostsFetcher;
|
|
let originalOrganizationFetcher;
|
|
|
|
beforeEach(() => {
|
|
originalCostsFetcher = openaiService._fetchOpenAICostsUncached;
|
|
originalOrganizationFetcher = openaiService._fetchOrganizationUsageOverview;
|
|
openaiService.openaiCostsCache.clear();
|
|
openaiService.openaiCostsRequests.clear();
|
|
openaiService.organizationUsageCache.clear();
|
|
openaiService.organizationUsageRequests.clear();
|
|
});
|
|
|
|
afterEach(() => {
|
|
openaiService._fetchOpenAICostsUncached = originalCostsFetcher;
|
|
openaiService._fetchOrganizationUsageOverview = originalOrganizationFetcher;
|
|
});
|
|
|
|
test('deduplicates concurrent cost requests and serves the cached result', async () => {
|
|
const result = { totalCost: 1.25, source: 'openai_api' };
|
|
openaiService._fetchOpenAICostsUncached = jest.fn(async () => result);
|
|
|
|
const responses = await Promise.all([
|
|
openaiService.fetchOpenAICosts(30),
|
|
openaiService.fetchOpenAICosts(30),
|
|
openaiService.fetchOpenAICosts(30)
|
|
]);
|
|
const cachedResponse = await openaiService.fetchOpenAICosts(30);
|
|
|
|
expect(responses).toEqual([result, result, result]);
|
|
expect(cachedResponse).toBe(result);
|
|
expect(openaiService._fetchOpenAICostsUncached).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
test('deduplicates concurrent organization usage requests', async () => {
|
|
const result = {
|
|
available: true,
|
|
summary: { totalCost: 0, totalRequests: 0, totalTokens: 0, projectCount: 4 }
|
|
};
|
|
openaiService._fetchOrganizationUsageOverview = jest.fn(async () => result);
|
|
|
|
const responses = await Promise.all([
|
|
openaiService.getOrganizationUsageOverview({ daysBack: 30 }),
|
|
openaiService.getOrganizationUsageOverview({ daysBack: 30 })
|
|
]);
|
|
const cachedResponse = await openaiService.getOrganizationUsageOverview({ daysBack: 30 });
|
|
|
|
expect(responses).toEqual([result, result]);
|
|
expect(cachedResponse).toBe(result);
|
|
expect(openaiService._fetchOrganizationUsageOverview).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|