// Pure unit tests for panels-c.js (P1 renderer batch C). Runs under // `node --test`, no Electron, no DOM. 'use strict' const test = require('node:test') const assert = require('node:assert/strict') function loadModule() { const p = require.resolve('../src/renderer/panels-c.js') delete require.cache[p] return require('../src/renderer/panels-c.js') } // ----- foldWebSearchResults ------------------------------------------------- test('foldWebSearchResults: JSON with {results:[…]} keeps title/url/snippet', () => { const { foldWebSearchResults } = loadModule() const content = [{ type: 'text', text: JSON.stringify({ results: [ { title: 'DSH', url: 'https://deepseek.com', snippet: 'the doc' }, { title: 'Anthropic', url: 'https://anthropic.com', snippet: 'AI safety' }, ], }) }] const { results } = foldWebSearchResults(content) assert.equal(results.length, 2) assert.deepEqual(results[0], { title: 'DSH', url: 'https://deepseek.com', snippet: 'the doc' }) }) test('foldWebSearchResults: bare JSON array works', () => { const { foldWebSearchResults } = loadModule() const content = [{ type: 'text', text: JSON.stringify([ { title: 'A', url: 'https://a.example', snippet: 'x' }, ]) }] const { results } = foldWebSearchResults(content) assert.equal(results.length, 1) assert.equal(results[0].url, 'https://a.example') }) test('foldWebSearchResults: plain-text mode parses url + title + snippet', () => { const { foldWebSearchResults } = loadModule() const content = [{ type: 'text', text: 'Anthropic\nhttps://anthropic.com\nWe build safety.\n\nDeepSeek\nhttps://deepseek.com\nOpen weights.' }] const { results } = foldWebSearchResults(content) assert.equal(results.length, 2) assert.equal(results[0].title, 'Anthropic') assert.equal(results[0].url, 'https://anthropic.com') assert.match(results[0].snippet, /safety/) }) test('foldWebSearchResults: rejects non-http(s) urls', () => { const { foldWebSearchResults } = loadModule() const content = [{ type: 'text', text: JSON.stringify({ results: [ { title: 'Local', url: 'file:///etc/passwd', snippet: '' }, { title: 'Data', url: 'data:text/html,