// @vitest-environment node import { describe, expect, it, vi } from 'vitest'; import type { IncomingMessage, ServerResponse } from 'node:http'; import { Readable } from 'node:stream'; import type { HostApiContext } from '../../electron/api/context'; import { handleCodingTeacherRoutes } from '../../electron/api/routes/coding-teacher'; describe('retired discussion mutation routes', () => { it.each([ '/api/coding/projects/project/conversations/source/teacher-topics/topic/discussion', '/api/coding/teacher-preview/topics/topic/discussion', '/api/coding/projects/project/agent-topics/topic/discussion', '/api/coding/projects/project/teacher-topics/topic/discussion', '/api/coding/projects/project/friend-topics/topic/discussion', '/api/coding/agent-conversations/agent/discussion', ])('does not dispatch a stale client action at %s', async pathname => { const req = Object.assign(Readable.from([JSON.stringify({ toolId: 'archived-tool', revision: 7, action: 'resume', })]), { method: 'POST' }) as IncomingMessage; const res = { setHeader: vi.fn(), end: vi.fn() }; const updateDiscussion = vi.fn().mockResolvedValue({}); const conversation = vi.fn(); const ctx = { codingProducts: { teacher: { updateDiscussion, conversation } } } as unknown as HostApiContext; expect(await handleCodingTeacherRoutes(req, res as unknown as ServerResponse, new URL(pathname, 'http://localhost'), ctx)).toBe(false); expect(updateDiscussion).not.toHaveBeenCalled(); expect(conversation).not.toHaveBeenCalled(); expect(res.end).not.toHaveBeenCalled(); }); });