From 71e86cc93f62e7d5e9cf3fc38fc07b79f90bf145 Mon Sep 17 00:00:00 2001 From: Affaan Mustafa Date: Fri, 13 Feb 2026 05:04:58 -0800 Subject: [PATCH] test: add packageManager version format and sequential save integrity tests --- tests/lib/package-manager.test.js | 32 +++++++++++++++++++++++++++++++ tests/lib/session-aliases.test.js | 17 ++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/tests/lib/package-manager.test.js b/tests/lib/package-manager.test.js index 39cdfb88..021e7dc1 100644 --- a/tests/lib/package-manager.test.js +++ b/tests/lib/package-manager.test.js @@ -1164,6 +1164,38 @@ function runTests() { } })) passed++; else failed++; + // ── Round 48: detectFromPackageJson format edge cases ── + console.log('\nRound 48: detectFromPackageJson (version format edge cases):'); + + if (test('returns null for packageManager with non-@ separator', () => { + const testDir = createTestDir(); + try { + fs.writeFileSync(path.join(testDir, 'package.json'), JSON.stringify({ + name: 'test', + packageManager: 'pnpm+8.6.0' + })); + const result = pm.detectFromPackageJson(testDir); + // split('@') on 'pnpm+8.6.0' returns ['pnpm+8.6.0'], which doesn't match PACKAGE_MANAGERS + assert.strictEqual(result, null, 'Non-@ format should not match any package manager'); + } finally { + cleanupTestDir(testDir); + } + })) passed++; else failed++; + + if (test('extracts package manager from caret version like yarn@^4.0.0', () => { + const testDir = createTestDir(); + try { + fs.writeFileSync(path.join(testDir, 'package.json'), JSON.stringify({ + name: 'test', + packageManager: 'yarn@^4.0.0' + })); + const result = pm.detectFromPackageJson(testDir); + assert.strictEqual(result, 'yarn', 'Caret version should still extract PM name'); + } finally { + cleanupTestDir(testDir); + } + })) passed++; else failed++; + // Summary console.log('\n=== Test Results ==='); console.log(`Passed: ${passed}`); diff --git a/tests/lib/session-aliases.test.js b/tests/lib/session-aliases.test.js index b36bef66..e2b49f07 100644 --- a/tests/lib/session-aliases.test.js +++ b/tests/lib/session-aliases.test.js @@ -839,6 +839,23 @@ function runTests() { // best-effort } + // ── Round 48: rapid sequential saves data integrity ── + console.log('\nRound 48: rapid sequential saves:'); + + if (test('rapid sequential setAlias calls maintain data integrity', () => { + resetAliases(); + for (let i = 0; i < 5; i++) { + const result = aliases.setAlias(`rapid-${i}`, `/path/${i}`, `Title ${i}`); + assert.strictEqual(result.success, true, `setAlias rapid-${i} should succeed`); + } + const data = aliases.loadAliases(); + for (let i = 0; i < 5; i++) { + assert.ok(data.aliases[`rapid-${i}`], `rapid-${i} should exist after all saves`); + assert.strictEqual(data.aliases[`rapid-${i}`].sessionPath, `/path/${i}`); + } + assert.strictEqual(data.metadata.totalCount, 5, 'Metadata count should match actual aliases'); + })) passed++; else failed++; + // Summary console.log(`\nResults: Passed: ${passed}, Failed: ${failed}`); process.exit(failed > 0 ? 1 : 0);