Browse Source

test(tui-state): prove per-project isolation; use named crypto import

Michael Henke 4 weeks ago
parent
commit
b39c648853
2 changed files with 17 additions and 3 deletions
  1. 15 0
      src/tui-state.test.ts
  2. 2 3
      src/tui-state.ts

+ 15 - 0
src/tui-state.test.ts

@@ -130,4 +130,19 @@ describe('tui-state persistence', () => {
     });
     expect(snapshot.agentVariants).toEqual({});
   });
+
+  test('cross-project isolation — different directories write independent state files', () => {
+    const dirA = fs.mkdtempSync(path.join(os.tmpdir(), 'omos-a-'));
+    const dirB = fs.mkdtempSync(path.join(os.tmpdir(), 'omos-b-'));
+    try {
+      recordTuiAgentModels({ agentModels: { explorer: 'model-a' } }, dirA);
+      recordTuiAgentModels({ agentModels: { explorer: 'model-b' } }, dirB);
+
+      expect(readTuiSnapshot(dirA).agentModels.explorer).toBe('model-a');
+      expect(readTuiSnapshot(dirB).agentModels.explorer).toBe('model-b');
+    } finally {
+      fs.rmSync(dirA, { recursive: true, force: true });
+      fs.rmSync(dirB, { recursive: true, force: true });
+    }
+  });
 });

+ 2 - 3
src/tui-state.ts

@@ -1,4 +1,4 @@
-import * as crypto from 'node:crypto';
+import { createHash } from 'node:crypto';
 import * as fs from 'node:fs';
 import * as os from 'node:os';
 import * as path from 'node:path';
@@ -21,8 +21,7 @@ function dataDir(): string {
 
 // ponytail: per-project scope prevents /model overrides from leaking across projects
 function projectScope(projectDir: string): string {
-  return crypto
-    .createHash('sha256')
+  return createHash('sha256')
     .update(path.resolve(projectDir))
     .digest('hex')
     .slice(0, 12);