Files
astro-website/site/tests/blog-umami-attributes.test.ts
2026-02-10 02:34:25 -05:00

64 lines
3.1 KiB
TypeScript

import { readFile } from "node:fs/promises";
import path from "node:path";
import { describe, expect, it } from "vitest";
async function read(rel: string) {
return await readFile(path.join(process.cwd(), rel), "utf8");
}
describe("blog umami event attributes", () => {
it("instruments blog secondary nav links", async () => {
const src = await read("src/components/BlogSecondaryNav.astro");
expect(src).toContain('data-umami-event="click"');
expect(src).toContain('data-umami-event-target_id="blog.subnav.all"');
expect(src).toContain('data-umami-event-target_id="blog.subnav.pages"');
expect(src).toContain("data-umami-event-target_id={`blog.subnav.category.${c.slug}`}");
expect(src).toContain('data-umami-event-placement="blog.subnav"');
expect(src).toContain("data-umami-event-target_url");
});
it("instruments blog post cards with deterministic target_id and placement", async () => {
const src = await read("src/components/BlogPostCard.astro");
expect(src).toContain('"data-umami-event": "click"');
expect(src).toContain('"data-umami-event-target_id": targetId');
expect(src).toContain('"data-umami-event-placement": placement');
expect(src).toContain("data-umami-event-target_url");
});
it("instruments blog pages list links (and keeps distinct IDs per placement)", async () => {
const indexSrc = await read("src/pages/blog/index.astro");
expect(indexSrc).toContain('data-umami-event-target_id="blog.index.pages.browse"');
expect(indexSrc).toContain("data-umami-event-target_id={`blog.index.pages.link.${p.slug}`}");
expect(indexSrc).toContain('data-umami-event-placement="blog.index.pages_preview"');
const pagesSrc = await read("src/pages/blog/pages.astro");
expect(pagesSrc).toContain("data-umami-event-target_id={`blog.pages.link.${p.slug}`}");
expect(pagesSrc).toContain('data-umami-event-placement="blog.pages.list"');
});
it("instruments blog detail back links", async () => {
const postSrc = await read("src/pages/blog/post/[slug].astro");
expect(postSrc).toContain('data-umami-event-target_id="blog.post.back"');
expect(postSrc).toContain('data-umami-event-placement="blog.post"');
expect(postSrc).toContain('data-umami-event-target_url="/blog"');
const pageSrc = await read("src/pages/blog/page/[slug].astro");
expect(pageSrc).toContain('data-umami-event-target_id="blog.page.back"');
expect(pageSrc).toContain('data-umami-event-placement="blog.page"');
expect(pageSrc).toContain('data-umami-event-target_url="/blog"');
});
it("uses placement-specific target_id for post cards", async () => {
const indexSrc = await read("src/pages/blog/index.astro");
expect(indexSrc).toContain("targetId={`blog.index.card.post.${p.slug}`}");
expect(indexSrc).toContain('placement="blog.index"');
const categorySrc = await read("src/pages/blog/category/[slug].astro");
expect(categorySrc).toContain("placement={`blog.category.${activeCategory.slug}`}");
expect(categorySrc).toContain("targetId={`blog.category.${activeCategory.slug}.card.post.${p.slug}`}");
});
});