import { describe, expect, test } from "vitest";
import { JSDOM } from "jsdom";
import {
extractMetadataFromDocument,
extractPublishedTime,
formatMetadataBlock,
pickBestContentNode,
} from "../utils";
describe("extractMetadataFromDocument", () => {
test("extracts metadata from standard meta tags", () => {
const html = `
Doc Title
`;
const document = new JSDOM(html).window.document;
const metadata = extractMetadataFromDocument(document);
expect(metadata.title).toBe("OG Title");
expect(metadata.byline).toBe("Ada Lovelace");
expect(metadata.siteName).toBe("Example Site");
expect(metadata.publishedTime).toBe("2025-01-01T10:00:00Z");
expect(metadata.lang).toBe("en");
});
});
describe("extractPublishedTime", () => {
test("falls back to time elements", () => {
const html = `
`;
const document = new JSDOM(html).window.document;
expect(extractPublishedTime(document)).toBe("2024-12-24");
});
});
describe("pickBestContentNode", () => {
test("chooses the most substantial content block", () => {
const html = `
Short.
This is the main content with more text than the article.