File size: 4,482 Bytes
f0743f4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | import type { AppConfig } from '@librechat/data-schemas';
import {
createTempChatExpirationDate,
getTempChatRetentionHours,
DEFAULT_RETENTION_HOURS,
MIN_RETENTION_HOURS,
MAX_RETENTION_HOURS,
} from './tempChatRetention';
describe('tempChatRetention', () => {
const originalEnv = process.env;
beforeEach(() => {
jest.resetModules();
process.env = { ...originalEnv };
delete process.env.TEMP_CHAT_RETENTION_HOURS;
});
afterAll(() => {
process.env = originalEnv;
});
describe('getTempChatRetentionHours', () => {
it('should return default retention hours when no config or env var is set', () => {
const result = getTempChatRetentionHours();
expect(result).toBe(DEFAULT_RETENTION_HOURS);
});
it('should use environment variable when set', () => {
process.env.TEMP_CHAT_RETENTION_HOURS = '48';
const result = getTempChatRetentionHours();
expect(result).toBe(48);
});
it('should use config value when set', () => {
const config: Partial<AppConfig> = {
interfaceConfig: {
temporaryChatRetention: 12,
},
};
const result = getTempChatRetentionHours(config?.interfaceConfig);
expect(result).toBe(12);
});
it('should prioritize config over environment variable', () => {
process.env.TEMP_CHAT_RETENTION_HOURS = '48';
const config: Partial<AppConfig> = {
interfaceConfig: {
temporaryChatRetention: 12,
},
};
const result = getTempChatRetentionHours(config?.interfaceConfig);
expect(result).toBe(12);
});
it('should enforce minimum retention period', () => {
const config: Partial<AppConfig> = {
interfaceConfig: {
temporaryChatRetention: 0,
},
};
const result = getTempChatRetentionHours(config?.interfaceConfig);
expect(result).toBe(MIN_RETENTION_HOURS);
});
it('should enforce maximum retention period', () => {
const config: Partial<AppConfig> = {
interfaceConfig: {
temporaryChatRetention: 10000,
},
};
const result = getTempChatRetentionHours(config?.interfaceConfig);
expect(result).toBe(MAX_RETENTION_HOURS);
});
it('should handle invalid environment variable', () => {
process.env.TEMP_CHAT_RETENTION_HOURS = 'invalid';
const result = getTempChatRetentionHours();
expect(result).toBe(DEFAULT_RETENTION_HOURS);
});
it('should handle invalid config value', () => {
const config: Partial<AppConfig> = {
interfaceConfig: {
temporaryChatRetention: 'invalid' as unknown as number,
},
};
const result = getTempChatRetentionHours(config?.interfaceConfig);
expect(result).toBe(DEFAULT_RETENTION_HOURS);
});
});
describe('createTempChatExpirationDate', () => {
it('should create expiration date with default retention period', () => {
const beforeCall = Date.now();
const result = createTempChatExpirationDate();
const afterCall = Date.now();
const expectedMin = beforeCall + DEFAULT_RETENTION_HOURS * 60 * 60 * 1000;
const expectedMax = afterCall + DEFAULT_RETENTION_HOURS * 60 * 60 * 1000;
// Result should be between expectedMin and expectedMax
expect(result.getTime()).toBeGreaterThanOrEqual(expectedMin);
expect(result.getTime()).toBeLessThanOrEqual(expectedMax);
});
it('should create expiration date with custom retention period', () => {
const config: Partial<AppConfig> = {
interfaceConfig: {
temporaryChatRetention: 12,
},
};
const beforeCall = Date.now();
const result = createTempChatExpirationDate(config?.interfaceConfig);
const afterCall = Date.now();
const expectedMin = beforeCall + 12 * 60 * 60 * 1000;
const expectedMax = afterCall + 12 * 60 * 60 * 1000;
// Result should be between expectedMin and expectedMax
expect(result.getTime()).toBeGreaterThanOrEqual(expectedMin);
expect(result.getTime()).toBeLessThanOrEqual(expectedMax);
});
it('should return a Date object', () => {
const result = createTempChatExpirationDate();
expect(result).toBeInstanceOf(Date);
});
it('should return a future date', () => {
const now = new Date();
const result = createTempChatExpirationDate();
expect(result.getTime()).toBeGreaterThan(now.getTime());
});
});
});
|