learning_ai_notes/backend/src/modules/notes/routes.test.ts
saravanakumardb1 e5535252c7 feat(backend+web): note summarization + export endpoints [B3, B6]
- backend: POST /notes/:id/summarize — calls extraction-service, stores summary artifact
- backend: GET /notes/export — JSON + Markdown format support
- backend: extraction-client.ts for extraction-service integration
- backend: 4 new integration tests (summarize, export JSON, export MD, invalid format)
- web: summarizeNote + exportNotes client functions
- web: Summarize button on note detail page
- web: Export Notes button on workspaces page
- web: exclude e2e/ from vitest config
- Total: 80 backend, 14 web, 23 mobile = 117 tests
2026-03-19 08:59:26 -07:00

48 lines
1.4 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from 'vitest';
import { noteRoutes } from './routes.js';
const {
extractAuthMock,
listNotesMock,
getNoteMock,
createNoteMock,
updateNoteMock,
} = vi.hoisted(() => ({
extractAuthMock: vi.fn(async () => ({ sub: 'user_1' })),
listNotesMock: vi.fn(async () => ({ items: [], total: 0 })),
getNoteMock: vi.fn(async () => null),
createNoteMock: vi.fn(async (doc: unknown) => doc),
updateNoteMock: vi.fn(async () => null),
}));
vi.mock('../../lib/auth.js', () => ({ extractAuth: extractAuthMock }));
vi.mock('../../lib/product-config.js', () => ({ PRODUCT_ID: 'notelett' }));
vi.mock('../../lib/extraction-client.js', () => ({ extractFromText: vi.fn(async () => ({ summary: 'test' })) }));
vi.mock('../note-artifacts/repository.js', () => ({ createNoteArtifact: vi.fn(async (doc: unknown) => doc) }));
vi.mock('./repository.js', () => ({
listNotes: listNotesMock,
getNote: getNoteMock,
createNote: createNoteMock,
updateNote: updateNoteMock,
}));
describe('noteRoutes', () => {
beforeEach(() => {
vi.clearAllMocks();
});
it('registers route handlers', async () => {
const app = {
get: vi.fn(),
post: vi.fn(),
patch: vi.fn(),
};
await noteRoutes(app as never);
expect(app.get).toHaveBeenCalledTimes(4);
expect(app.post).toHaveBeenCalledTimes(4);
expect(app.patch).toHaveBeenCalledTimes(1);
});
});