import assert from "node:assert/strict"; import test from "node:test"; import { cleanContent } from "./content-cleaner.js"; const SAMPLE_HTML = ` Example Story

Actual Story Title

This is the first paragraph of the real story body, and it is intentionally long enough to survive the cleaner's main-content heuristics without being mistaken for navigation.

This is the second paragraph with more useful detail, a supporting link, and a normal image.

Cover Inline data
`; test("cleanContent keeps the article body and removes obvious boilerplate", () => { const cleaned = cleanContent(SAMPLE_HTML, "https://example.com/posts/story"); assert.match(cleaned, /Actual Story Title/); assert.match(cleaned, /https:\/\/example\.com\/read-more/); assert.match(cleaned, /https:\/\/example\.com\/images\/cover\.jpg/); assert.doesNotMatch(cleaned, /Accept cookies/); assert.doesNotMatch(cleaned, /Sidebar links/); assert.doesNotMatch(cleaned, /Footer boilerplate/); assert.doesNotMatch(cleaned, /window\.__noise/); assert.doesNotMatch(cleaned, /comment that should be removed/); assert.doesNotMatch(cleaned, /data:image\/png;base64/); });