From 80a62bcbc18587d66d3efd6c4ee61e34641904d1 Mon Sep 17 00:00:00 2001 From: Sylvain Zimmer Date: Thu, 24 Jul 2025 14:49:20 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=85(convert)=20improve=20tests=20with=20s?= =?UTF-8?q?tricter=20tests=20and=20less=20ipsum?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use real example data to run convert handler tests. --- .../y-provider/__tests__/convert.test.ts | 52 ++++++++++--------- src/frontend/servers/y-provider/package.json | 2 +- .../y-provider/src/handlers/convertHandler.ts | 1 - 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/frontend/servers/y-provider/__tests__/convert.test.ts b/src/frontend/servers/y-provider/__tests__/convert.test.ts index e8a81c2c..44c21c28 100644 --- a/src/frontend/servers/y-provider/__tests__/convert.test.ts +++ b/src/frontend/servers/y-provider/__tests__/convert.test.ts @@ -18,6 +18,9 @@ import { COLLABORATION_SERVER_ORIGIN as origin, } from '../src/env'; +const expectedMarkdown = '# Example document\n\nLorem ipsum dolor sit amet.'; +const expectedHTML = + '

Example document

Lorem ipsum dolor sit amet.

'; const expectedBlocks = [ { children: [], @@ -151,20 +154,13 @@ describe('Server Tests', () => { async (authHeader) => { const app = initApp(); - const document = [ - '# Example document', - '', - 'Lorem ipsum dolor sit amet.', - '', - ].join('\n'); - const response = await request(app) .post('/api/convert') .set('Origin', origin) .set('Authorization', authHeader) .set('content-type', 'text/markdown') .set('accept', 'application/vnd.yjs.doc') - .send(document); + .send(expectedMarkdown); expect(response.status).toBe(200); expect(response.body).toBeInstanceOf(Buffer); @@ -181,8 +177,7 @@ describe('Server Tests', () => { test('POST /api/convert Yjs to HTML', async () => { const app = initApp(); const editor = ServerBlockNoteEditor.create(); - const markdownContent = '# Test Document\n\nThis is test content.'; - const blocks = await editor.tryParseMarkdownToBlocks(markdownContent); + const blocks = await editor.tryParseMarkdownToBlocks(expectedMarkdown); const yDocument = editor.blocksToYDoc(blocks, 'document-store'); const yjsUpdate = Y.encodeStateAsUpdate(yDocument); const response = await request(app) @@ -195,16 +190,13 @@ describe('Server Tests', () => { expect(response.status).toBe(200); expect(response.header['content-type']).toBe('text/html; charset=utf-8'); expect(typeof response.text).toBe('string'); - expect(response.text).toBe( - '

Test Document

This is test content.

', - ); + expect(response.text).toBe(expectedHTML); }); test('POST /api/convert Yjs to Markdown', async () => { const app = initApp(); const editor = ServerBlockNoteEditor.create(); - const markdownContent = '# Test Document\n\nThis is test content.'; - const blocks = await editor.tryParseMarkdownToBlocks(markdownContent); + const blocks = await editor.tryParseMarkdownToBlocks(expectedMarkdown); const yDocument = editor.blocksToYDoc(blocks, 'document-store'); const yjsUpdate = Y.encodeStateAsUpdate(yDocument); const response = await request(app) @@ -219,14 +211,13 @@ describe('Server Tests', () => { 'text/markdown; charset=utf-8', ); expect(typeof response.text).toBe('string'); - expect(response.text.trim()).toBe(markdownContent); + expect(response.text.trim()).toBe(expectedMarkdown); }); test('POST /api/convert Yjs to JSON', async () => { const app = initApp(); const editor = ServerBlockNoteEditor.create(); - const markdownContent = '# Test Document\n\nThis is test content.'; - const blocks = await editor.tryParseMarkdownToBlocks(markdownContent); + const blocks = await editor.tryParseMarkdownToBlocks(expectedMarkdown); const yDocument = editor.blocksToYDoc(blocks, 'document-store'); const yjsUpdate = Y.encodeStateAsUpdate(yDocument); const response = await request(app) @@ -241,13 +232,24 @@ describe('Server Tests', () => { 'application/json; charset=utf-8', ); expect(Array.isArray(response.body)).toBe(true); - expect(response.body.length).toBe(2); - expect(response.body[0].type).toBe('heading'); - expect(response.body[1].type).toBe('paragraph'); - expect(response.body[0].content[0].type).toBe('text'); - expect(response.body[0].content[0].text).toBe('Test Document'); - expect(response.body[1].content[0].type).toBe('text'); - expect(response.body[1].content[0].text).toBe('This is test content.'); + expect(response.body).toStrictEqual(expectedBlocks); + }); + + test('POST /api/convert Markdown to JSON', async () => { + const app = initApp(); + const response = await request(app) + .post('/api/convert') + .set('origin', origin) + .set('authorization', apiKey) + .set('content-type', 'text/markdown') + .set('accept', 'application/json') + .send(expectedMarkdown); + expect(response.status).toBe(200); + expect(response.header['content-type']).toBe( + 'application/json; charset=utf-8', + ); + expect(Array.isArray(response.body)).toBe(true); + expect(response.body).toStrictEqual(expectedBlocks); }); test('POST /api/convert with invalid Yjs content returns 400', async () => { diff --git a/src/frontend/servers/y-provider/package.json b/src/frontend/servers/y-provider/package.json index a984ffc1..eb86b204 100644 --- a/src/frontend/servers/y-provider/package.json +++ b/src/frontend/servers/y-provider/package.json @@ -9,7 +9,7 @@ "build": "tsc -p tsconfig.build.json && tsc-alias", "dev": "cross-env COLLABORATION_LOGGING=true && nodemon --config nodemon.json", "start": "node ./dist/start-server.js", - "lint": "eslint . --ext .ts --fix", + "lint": "eslint . --ext .ts", "test": "vitest --run --disable-console-intercept" }, "engines": { diff --git a/src/frontend/servers/y-provider/src/handlers/convertHandler.ts b/src/frontend/servers/y-provider/src/handlers/convertHandler.ts index d5e23039..9d8cd237 100644 --- a/src/frontend/servers/y-provider/src/handlers/convertHandler.ts +++ b/src/frontend/servers/y-provider/src/handlers/convertHandler.ts @@ -29,7 +29,6 @@ export const convertHandler = async ( let blocks: PartialBlock[] | null = null; try { - // First, convert from the input format to blocks // application/x-www-form-urlencoded is interpreted as Markdown for backward compatibility if (