CI — Test & Build / 🧪 Run Tests & Generate Reports (push) Waiting to run
CI — Test & Build / 🏗️ Build Docker Image (push) Blocked by required conditions
CI — Test & Build / 🐳 Docker integration & API E2E (push) Blocked by required conditions
CI — Test & Build / 🌐 Staging Playwright smoke (push) Waiting to run
58 lines
2.8 KiB
JavaScript
58 lines
2.8 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Regressziós teszt a Content Editor böngészőben futó serializeréhez.
|
|
* A szerver által generált tényleges JavaScriptet futtatja minimális DOM-mal,
|
|
* így a szerkesztő és a teszt nem két eltérő implementációt vizsgál.
|
|
*/
|
|
const assert = require('assert/strict');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const vm = require('vm');
|
|
const { createRequire } = require('module');
|
|
|
|
const source = fs.readFileSync('content-editor.js', 'utf8')
|
|
.replace('if (require.main === module) {', 'globalThis.renderContentEditor = HTML;\nif (false) {');
|
|
const editorRequire = createRequire(path.join(process.cwd(), 'content-editor.js'));
|
|
const serverContext = { require: editorRequire, console, process, Buffer, module: { exports: {} }, __dirname: process.cwd(), globalThis: {} };
|
|
vm.createContext(serverContext);
|
|
new vm.Script(source).runInContext(serverContext);
|
|
|
|
const fixture = {
|
|
title: 'Teszt',
|
|
enabled: true,
|
|
limit: 42,
|
|
sections: [{ id: 'first', items: ['egy', 'kettő'], settings: { visible: false, weight: 1 } }],
|
|
};
|
|
const html = serverContext.globalThis.renderContentEditor('home', JSON.stringify(fixture), null);
|
|
const browserSource = [...html.matchAll(/<script(?: [^>]*)?>([\s\S]*?)<\/script>/g)].at(-1)[1]
|
|
.replace("render(DATA, document.getElementById('editor'));", '')
|
|
.replace("const toast = document.querySelector('.toast');", 'const toast = null;');
|
|
|
|
const fields = [
|
|
{ dataset: { path: 'title', type: 'string' }, value: 'Módosított' },
|
|
{ dataset: { path: 'enabled', type: 'boolean' }, checked: true },
|
|
{ dataset: { path: 'limit', type: 'number' }, value: '99' },
|
|
{ dataset: { path: 'sections[0].id', type: 'string' }, value: 'first' },
|
|
{ dataset: { path: 'sections[0].items[0]', type: 'string' }, value: 'egy' },
|
|
{ dataset: { path: 'sections[0].items[1]', type: 'string' }, value: 'kettő' },
|
|
{ dataset: { path: 'sections[0].settings.visible', type: 'boolean' }, checked: false },
|
|
{ dataset: { path: 'sections[0].settings.weight', type: 'number' }, value: '3' },
|
|
];
|
|
const document = {
|
|
getElementById: id => id === 'page-data' ? { textContent: JSON.stringify(fixture) } : {},
|
|
querySelectorAll: selector => selector === '[data-path]' ? fields : [],
|
|
querySelector: () => null,
|
|
};
|
|
const browserContext = { document, console, setTimeout, fetch: async () => ({ json: async () => ({ ok: true }) }) };
|
|
vm.createContext(browserContext);
|
|
new vm.Script(`${browserSource}\nglobalThis.__collect = collect;`).runInContext(browserContext);
|
|
|
|
assert.deepStrictEqual(JSON.parse(JSON.stringify(browserContext.__collect())), {
|
|
title: 'Módosított',
|
|
enabled: true,
|
|
limit: 99,
|
|
sections: [{ id: 'first', items: ['egy', 'kettő'], settings: { visible: false, weight: 3 } }],
|
|
});
|
|
console.log('Content Editor serializer regression test: OK');
|