mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-10-06 15:02:20 +02:00
Integrate lab fff55a78 into PR #40 (cc25d5ba). Lab's modular email backend/frontend, modular settings, split stylesheets (static/style.css stays deleted), procfs compatibility, and request-scoped TurnContract authority win; PR #40's routing classifiers, editor/email/task features, and style.css changes are ported into lab's module and stylesheet homes. Integration fixes: - settings/api.js imports ui.js under its canonical versioned URL - browser observations keep legacy CAPTCHA/access-block evidence - artifact turns do not re-trigger broad-web research recovery - env reference documents PR test-tool variables; page regenerated PR #40 defects surfaced by lab gates and fixed here: - web_fetch generic schema drops top-level anyOf (OpenAI contract); the compact preview contract still requires url or urls - get_weather registered as a brokered network read - new lazy editor modules precached for offline use - SearXNG pin mirrored into GPU standalone compose files - image model picker again skips offline endpoints Tests updated where PR #40 changed behaviour on purpose, and PR tests moved onto lab's document_source helpers.
50 lines
2.9 KiB
JavaScript
50 lines
2.9 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import { documentSource } from './helpers/document_source.mjs';
|
|
import { chromium } from 'playwright';
|
|
const source = documentSource();
|
|
function extract(name) {
|
|
const start = source.indexOf(` function ${name}(`);
|
|
const rest = source.slice(start + 2);
|
|
const next = rest.slice(10).search(/\n (?:export )?(?:async )?function /);
|
|
return rest.slice(0, next + 10);
|
|
}
|
|
const functions = ['_showRichTextEditor', '_syncEmailRichbody'].map(extract).join('\n');
|
|
const browser = await chromium.launch({headless:true});
|
|
try {
|
|
const page = await browser.newPage();
|
|
await page.setContent('<div class="doc-editor-pane"><div id="doc-editor-wrap"></div><textarea id="doc-editor-textarea"></textarea><div id="doc-email-richbody" contenteditable="true"></div></div>');
|
|
const result = await page.evaluate(async (functions) => {
|
|
const docs = new Map(); const activeDocId = 'fixture';
|
|
let _richInlineCodeTypingArmed = false;
|
|
const _clearRichImageSelection = () => {};
|
|
const _normalizeRichTextImages = () => {};
|
|
const _normalizeRichChecklists = () => {};
|
|
const _normalizeRichInlineCode = () => {};
|
|
const _wireEmailRichbody = () => {};
|
|
const _syncRichEmptyImport = () => {};
|
|
const _isRichTextLang = lang => lang === 'richtext';
|
|
const _sanitizedRichTextHtml = rich => rich.innerHTML;
|
|
const _richTextContentToHtml = content => content;
|
|
const _emailRichbodyActive = () => document.getElementById('doc-email-richbody');
|
|
const newContent = '<p>This sentence needs work.</p><p><strong>Keep this.</strong></p>';
|
|
const doc = {id:activeDocId, language:'richtext',content:newContent}; docs.set(activeDocId,doc);
|
|
eval(functions + '\n_showRichTextEditor(doc);');
|
|
return {overlayGone:!document.querySelector('.doc-rich-diff-overlay'),rich:_emailRichbodyActive().innerHTML,mirror:document.getElementById('doc-editor-textarea').value,content:doc.content,newContent};
|
|
}, functions);
|
|
assert.equal(result.overlayGone, true);
|
|
assert.equal(result.rich,result.newContent); assert.equal(result.mirror,result.newContent); assert.equal(result.content,result.newContent);
|
|
const discardSource = source.slice(source.indexOf(' function exitDiffMode('), source.indexOf(' function isDiffModeActive('));
|
|
const staleSaveCount = await page.evaluate(discardSource => {
|
|
let _diffModeActive = true, _diffChunks = [], _diffOldContent = 'stale text', _diffNewContent = 'saved text', _diffUnresolvedCount = 1;
|
|
let saves = 0;
|
|
const saveDocument = () => { saves++; };
|
|
const syncHighlighting = () => {};
|
|
const updateLineNumbers = () => {};
|
|
eval(discardSource + '\nexitDiffMode(true, { persist: false });');
|
|
return saves;
|
|
}, discardSource);
|
|
assert.equal(staleSaveCount, 0);
|
|
console.log('PASS: saved rich-text changes appear immediately with no transient diff overlay.');
|
|
console.log('PASS: clearing a stale review diff cannot overwrite a newer saved edit.');
|
|
} finally {await browser.close();}
|