From 776ac439f33dce8d7acd501dd337bce69cb7e3f9 Mon Sep 17 00:00:00 2001 From: Affaan Mustafa Date: Wed, 25 Mar 2026 04:01:23 -0400 Subject: [PATCH] test: cover canonical session duplicate precedence --- tests/lib/session-manager.test.js | 34 +++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/tests/lib/session-manager.test.js b/tests/lib/session-manager.test.js index d2237b6f..e39b0a87 100644 --- a/tests/lib/session-manager.test.js +++ b/tests/lib/session-manager.test.js @@ -404,6 +404,23 @@ src/main.ts assert.strictEqual(result.sessions[0].shortId, 'abcd1234'); })) passed++; else failed++; + if (test('getAllSessions prefers canonical session-data duplicates over newer legacy copies', () => { + const duplicateName = '2026-01-15-abcd1234-session.tmp'; + const legacyDuplicatePath = path.join(tmpLegacySessionsDir, duplicateName); + const legacyMtime = new Date(Date.now() + 60000); + + try { + fs.writeFileSync(legacyDuplicatePath, '# Legacy duplicate'); + fs.utimesSync(legacyDuplicatePath, legacyMtime, legacyMtime); + + const result = sessionManager.getAllSessions({ search: 'abcd', limit: 100 }); + assert.strictEqual(result.total, 1, 'Duplicate filenames should be deduped'); + assert.ok(result.sessions[0].sessionPath.includes('session-data'), 'Canonical session-data copy should win'); + } finally { + fs.rmSync(legacyDuplicatePath, { force: true }); + } + })) passed++; else failed++; + if (test('getAllSessions returns sorted by newest first', () => { const result = sessionManager.getAllSessions({ limit: 100 }); for (let i = 1; i < result.sessions.length; i++) { @@ -449,6 +466,23 @@ src/main.ts assert.strictEqual(result.shortId, 'abcd1234'); })) passed++; else failed++; + if (test('getSessionById prefers canonical session-data duplicates over newer legacy copies', () => { + const duplicateName = '2026-01-15-abcd1234-session.tmp'; + const legacyDuplicatePath = path.join(tmpLegacySessionsDir, duplicateName); + const legacyMtime = new Date(Date.now() + 120000); + + try { + fs.writeFileSync(legacyDuplicatePath, '# Legacy duplicate'); + fs.utimesSync(legacyDuplicatePath, legacyMtime, legacyMtime); + + const result = sessionManager.getSessionById('abcd1234'); + assert.ok(result, 'Should still resolve the duplicate session'); + assert.ok(result.sessionPath.includes('session-data'), 'Canonical session-data copy should win'); + } finally { + fs.rmSync(legacyDuplicatePath, { force: true }); + } + })) passed++; else failed++; + if (test('getSessionById finds by full filename', () => { const result = sessionManager.getSessionById('2026-01-15-abcd1234-session.tmp'); assert.ok(result, 'Should find session by full filename');