LibreChat/api/server/services/Files/retention.spec.js
Danny Avila 1de88e7e91
📨 feat: Continue Bound Child Agents from Events (#15112)
* feat: add authenticated agent event ingress

* style: sort agent ingress imports

* fix: harden agent event ingress

* fix: bind event provenance to API keys

* fix: inspect event input with legacy PII filters

* fix: scope event status reads to source keys

* fix: bind event status reads to remote sources

* feat: add bound event-driven child turns

* fix: harden event-bound child continuations

* fix: satisfy event binding type contracts

* fix: close event actor lifecycle races

* fix: harden event actor dispatch continuity

* fix: fence event actor resume lifecycle

* fix: bind event actor state to lifecycle

* fix: preserve cascade write outcomes

* test: type cascade failure injection

* style: sort cascade test imports

* fix: harden event child lifecycle boundaries

* fix: make event cleanup retryable

* fix: annotate event retention clock

* fix: reconcile partial cascade metadata

* fix: recheck event binding expiry on resume

* fix: fence event actors by retention deadline

* fix: close event actor lifecycle races

* fix: harden event child lease acquisition

* fix: lazy-load event child lease adapter
2026-08-23 01:15:57 -04:00

33 lines
1.2 KiB
JavaScript

const mockGetRetentionExpiry = jest.fn();
const mockGetAgentFileRetentionExpiry = jest.fn();
jest.mock('@librechat/api', () => ({
getRetentionExpiry: (...args) => mockGetRetentionExpiry(...args),
getAgentFileRetentionExpiry: (...args) => mockGetAgentFileRetentionExpiry(...args),
}));
jest.mock('@librechat/data-schemas', () => ({
logger: {},
createTempChatExpirationDate: jest.fn(),
}));
jest.mock('~/models', () => ({ getConvo: jest.fn() }));
const { getRetentionExpiry, getAgentFileRetentionExpiry } = require('./retention');
describe('event-bound file retention', () => {
const expiredAt = new Date('2026-08-22T12:00:00.000Z');
const req = { _agentEventBindingRetention: { isTemporary: false, expiredAt } };
beforeEach(() => jest.clearAllMocks());
it('uses the trusted binding deadline for generated files', async () => {
await expect(getRetentionExpiry(req)).resolves.toEqual({ expiredAt });
expect(mockGetRetentionExpiry).not.toHaveBeenCalled();
});
it('uses the same binding deadline for agent resource files', async () => {
await expect(
getAgentFileRetentionExpiry({ req, tool_resource: 'execute_code' }),
).resolves.toEqual({ expiredAt });
expect(mockGetAgentFileRetentionExpiry).not.toHaveBeenCalled();
});
});