Route / redirige vers /ide ; le dashboard passe à /dashboard (nom inchangé). /workspace/:repoId/:wt rend désormais l'IDE (IdeShell) : au montage il décode la clé, active et déplie le worktree ciblé, ouvre ?file= le cas échéant. WorkspaceView et useWorkspaceLayout retirés. encode/decodeWtKey déplacés dans @arboretum/shared (source unique) avec décodeur TOLÉRANT (base64url OU chemin percent-encodé), corrigeant la divergence historique du deep-link VS Code. config.ts de l'extension aligné sur encodeWtKey. Tests wt-key (shared) + config (vscode) mis à jour. 431 tests.
26 lines
1.3 KiB
TypeScript
26 lines
1.3 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
||
import { encodeWtKey, decodeWtKey } from '@arboretum/shared';
|
||
import { normalizeBaseUrl, workspaceUrl, wsUrlFromBase } from '../src/config.js';
|
||
|
||
describe('config', () => {
|
||
it('normalise la base URL (slash final, défaut)', () => {
|
||
expect(normalizeBaseUrl('http://127.0.0.1:7317/')).toBe('http://127.0.0.1:7317');
|
||
expect(normalizeBaseUrl(' http://host:8080// ')).toBe('http://host:8080');
|
||
expect(normalizeBaseUrl('')).toBe('http://127.0.0.1:7317');
|
||
});
|
||
|
||
it('dérive l’URL WebSocket (/ws, http→ws, https→wss)', () => {
|
||
expect(wsUrlFromBase('http://127.0.0.1:7317')).toBe('ws://127.0.0.1:7317/ws');
|
||
expect(wsUrlFromBase('https://box.ts.net')).toBe('wss://box.ts.net/ws');
|
||
});
|
||
|
||
it('construit l’URL de la vue IDE web (workspaceUrl : repoId par segment, worktree en base64url)', () => {
|
||
const url = workspaceUrl('http://127.0.0.1:7317', 'repo id', '/home/user/wt');
|
||
expect(url).toBe(`http://127.0.0.1:7317/workspace/repo%20id/${encodeWtKey('/home/user/wt')}`);
|
||
// le segment worktree est décodable par la source partagée (cohérence avec le front).
|
||
const seg = url.split('/').pop() as string;
|
||
expect(decodeWtKey(seg)).toBe('/home/user/wt');
|
||
expect(seg).not.toMatch(/[%+/=]/);
|
||
});
|
||
});
|