d1c582396a
Apply shared session, permission, ownership and lifecycle checks across gallery access, media grants and session restoration. Validate mutation origins, pin webhook DNS resolution and redact token-bearing request URLs. Consolidate gallery creation and queries, extract frontend state hooks, fix hook ordering and resource cleanup, and repair the fresh event schema. Update affected dependencies and restore excluded CI suites with regression and cross-database coverage.
16 lines
1.0 KiB
JavaScript
16 lines
1.0 KiB
JavaScript
jest.mock('../../src/database/db', () => ({ db: jest.fn() }));
|
|
const secure = require('../../src/services/secureImageService');
|
|
beforeEach(() => { jest.useFakeTimers(); secure.dispose(); });
|
|
afterEach(() => { secure.dispose(); jest.useRealTimers(); });
|
|
it('owns one timer for many tokens and sweeps expired capabilities', () => {
|
|
for (let i = 0; i < 100; i++) secure.generateSecureToken(i, 'gallery_public_1_1', { expiresIn: 1 });
|
|
expect(jest.getTimerCount()).toBe(1); expect(secure.tokenCache.size).toBe(100);
|
|
jest.advanceTimersByTime(60000); expect(secure.tokenCache.size).toBe(0);
|
|
secure.dispose(); expect(jest.getTimerCount()).toBe(0);
|
|
});
|
|
it('disposes all session/rate caches and restarts on demand', () => {
|
|
secure.generateSecureToken(1, 'session'); secure.sessionTokens.set('a', 'b'); secure.rateLimitCache.set('a', 'b');
|
|
secure.dispose(); expect(secure.sessionTokens.size + secure.rateLimitCache.size + secure.tokenCache.size).toBe(0);
|
|
secure.generateSecureToken(1, 'session'); expect(jest.getTimerCount()).toBe(1);
|
|
});
|