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 });