✅(convert) improve tests with stricter tests and less ipsum
Use real example data to run convert handler tests.
This commit is contained in:
committed by
Manuel Raynaud
parent
ede0a77665
commit
80a62bcbc1
@@ -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 =
|
||||
'<h1>Example document</h1><p>Lorem ipsum dolor sit amet.</p>';
|
||||
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(
|
||||
'<h1>Test Document</h1><p>This is test content.</p>',
|
||||
);
|
||||
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 () => {
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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 (
|
||||
|
||||
Reference in New Issue
Block a user