import { html, stubNetwork } from "../../helpers.ts"; import { assertEquals } from "@std/assert"; import { fetchRichContent } from "../../../services/rich-content-service.ts"; const BASE = "https://example.com/articles/1"; Deno.test("generic provider: the full fallback chain", async () => { using _ = stubNetwork(() => html(` Page title `) ); const content = await fetchRichContent(BASE); assertEquals(content, { type: "generic", url: BASE, title: "OG title", description: "Plain description", thumbnailUrl: "https://example.com/og.jpg", faviconUrl: "https://example.com/favicon-32.png", accentColor: "#0080ff", siteName: "Example", }); }); Deno.test("generic provider: a site-wide og:url means og:title/image are ignored", async () => { using _ = stubNetwork(() => html(` `) ); const content = await fetchRichContent("https://www.example.com/articles/1"); assertEquals(content?.title, "Article title"); assertEquals(content?.thumbnailUrl, "https://www.example.com/photo.jpg"); assertEquals(content?.siteName, "example.com"); assertEquals(content?.faviconUrl, "https://www.example.com/favicon.ico"); }); Deno.test("generic provider: non-HTML responses carry just the URL", async () => { using _ = stubNetwork(() => new Response("{}", { headers: { "content-type": "application/json" } }) ); assertEquals(await fetchRichContent(BASE), { type: "generic", url: BASE }); });