/ src / electron-apps.test.ts
electron-apps.test.ts
 1  import { describe, it, expect } from 'vitest';
 2  import { getElectronApp, isElectronApp, loadApps } from './electron-apps.js';
 3  
 4  describe('electron-apps registry', () => {
 5    it('returns builtin app entry for cursor', () => {
 6      const app = getElectronApp('cursor');
 7      expect(app).toBeDefined();
 8      expect(app!.port).toBe(9226);
 9      expect(app!.processName).toBe('Cursor');
10    });
11  
12    it('returns builtin app entry for codex', () => {
13      const app = getElectronApp('codex');
14      expect(app).toBeDefined();
15      expect(app!.port).toBe(9222);
16    });
17  
18    it('returns undefined for non-Electron sites', () => {
19      expect(getElectronApp('bilibili')).toBeUndefined();
20      expect(getElectronApp('hackernews')).toBeUndefined();
21    });
22  
23    it('isElectronApp returns true for registered apps', () => {
24      expect(isElectronApp('cursor')).toBe(true);
25      expect(isElectronApp('codex')).toBe(true);
26      expect(isElectronApp('chatwise')).toBe(true);
27    });
28  
29    it('isElectronApp returns false for non-Electron sites', () => {
30      expect(isElectronApp('bilibili')).toBe(false);
31      expect(isElectronApp('unknown-app')).toBe(false);
32    });
33  
34    it('loadApps merges user config additively', () => {
35      const apps = loadApps({
36        myapp: { port: 9234, processName: 'MyApp' },
37      });
38      expect(apps.myapp).toBeDefined();
39      expect(apps.myapp.port).toBe(9234);
40      // Builtins still present
41      expect(apps.cursor).toBeDefined();
42    });
43  
44    it('loadApps does not override builtin entries', () => {
45      const apps = loadApps({
46        cursor: { port: 9999, processName: 'FakeCursor' },
47      });
48      expect(apps.cursor.port).toBe(9226); // Builtin wins
49    });
50  });