testBlogFeed
tcmts.site.testBlogFeed · #fa4fmc3h · function
import { blogFeed, highlighter, pageList, renderPost, SOURCES } from "#codebase/tcmts/site";
import type { Post } from "#codebase/tcmts/site";
import assert from "node:assert/strict";
export const testBlogFeed = async () => {
const hl = await highlighter();
const docs = new Set(pageList(SOURCES["docs/README.md"]!).map((p) => p.file));
const post = (slug: string, date: string): Post => ({
slug,
date,
author: "Ada <a>",
md: `# Post ${slug}\n\nRead [the docs](/docs/apps.html), or [Unison](https://www.unison-lang.org).`,
});
const posts = [post("two", "2026-12-01"), post("one", "2026-11-07")];
const feed = blogFeed(posts.map((p) => ({ post: p, rendered: renderPost(p, hl, docs) })));
assert.equal(feed.match(/<item>/g)?.length, 2);
assert.ok(feed.indexOf("blog/two.html") < feed.indexOf("blog/one.html"), "newest first");
assert.match(feed, /<pubDate>Sat, 07 Nov 2026 00:00:00 GMT<\/pubDate>/);
assert.match(feed, /<lastBuildDate>Tue, 01 Dec 2026 00:00:00 GMT<\/lastBuildDate>/);
// links made absolute, the post's HTML escaped, as XML has it
assert.match(feed, /href="https:\/\/tcm\.codes\/docs\/apps\.html"/);
assert.match(feed, /href="https:\/\/www\.unison-lang\.org"/);
assert.match(feed, /<dc:creator>Ada <a><\/dc:creator>/);
assert.doesNotMatch(feed, /<description>[^<]*<p>/);
}
uses