Files
makelore/tests/unit/teacher-retired-discussion-route.test.ts

32 lines
1.6 KiB
TypeScript

// @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();
});
});