From 375646546e48a45deab3f3bea5569fb562bcda5a Mon Sep 17 00:00:00 2001 From: yangzexuan Date: Mon, 1 Jun 2026 03:11:21 +0800 Subject: [PATCH] =?UTF-8?q?test:=20=E6=B7=BB=E5=8A=A0=20PlantUML=20render?= =?UTF-8?q?=20=E7=AB=AF=E7=82=B9=20+=20watcher=20=E7=94=9F=E5=91=BD?= =?UTF-8?q?=E5=91=A8=E6=9C=9F=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- src/server/__tests__/settings.test.ts | 23 +++++++++++++++++++ .../__tests__/workspace-service.test.ts | 18 +++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/src/server/__tests__/settings.test.ts b/src/server/__tests__/settings.test.ts index 4d3aade9..605feb0a 100644 --- a/src/server/__tests__/settings.test.ts +++ b/src/server/__tests__/settings.test.ts @@ -887,3 +887,26 @@ describe('Activity Stats API', () => { expect(res.status).toBe(400) }) }) + +// ── PlantUML Render API ────────────────────────────────────────────────── + +describe('PlantUML Render API', () => { + it('POST plantuml/render returns valid response', async () => { + const { req, url, segments } = makeRequest('POST', '/api/settings/plantuml/render', { + code: '@startuml\nAlice -> Bob\n@enduml', + }) + const res = await handleSettingsApi(req, url, segments) + + expect(res.status).toBe(200) + const body = await res.json() as { svg: string | null; error?: string } + // svg 可能为 null(未配置 jar)或为有效 SVG 字符串 + expect(typeof body.svg === 'string' || body.svg === null).toBe(true) + }) + + it('rejects non-POST methods for plantuml render', async () => { + const { req, url, segments } = makeRequest('GET', '/api/settings/plantuml/render') + const res = await handleSettingsApi(req, url, segments) + + expect(res.status).toBe(405) + }) +}) diff --git a/src/server/__tests__/workspace-service.test.ts b/src/server/__tests__/workspace-service.test.ts index 241d236b..7638401a 100644 --- a/src/server/__tests__/workspace-service.test.ts +++ b/src/server/__tests__/workspace-service.test.ts @@ -556,4 +556,22 @@ describe('WorkspaceService', () => { { path: 'b.txt', oldPath: undefined, status: 'modified', additions: 2, deletions: 3 }, ]) }) + + it('starts and stops a file watcher without errors', async () => { + const workDir = await makeTempDir('workspace-service-watcher-') + const service = new WorkspaceService(async () => workDir) + + service.startWatcher('session-watcher', workDir) + service.startWatcher('session-watcher', workDir) + service.stopWatcher('session-watcher') + }) + + it('stopAllWatchers cleans up all active watchers', async () => { + const workDir = await makeTempDir('workspace-service-watcher-all-') + const service = new WorkspaceService(async () => workDir) + + service.startWatcher('session-1', workDir) + service.startWatcher('session-2', workDir) + service.stopAllWatchers() + }) })