Files
community-rule/tests/unit/publicSitemap.test.ts
T
adilalloandCursor b2b272d2cc Give each route its own title and canonical, and add robots.txt plus a sitemap.
The root layout was stamping the homepage title and production root onto every page. Routes now supply a page segment through one em-dash template, canonicals follow the request path, and non-production hosts disallow crawlers.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-09 16:45:19 -06:00

40 lines
1.8 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { getAllBlogPosts } from "../../lib/content";
import { buildPublicSitemap } from "../../lib/publicSitemap";
import { PRODUCTION_SITE_ORIGIN, sitemapUrl } from "../../lib/siteMetadata";
import { USE_CASE_DETAIL_SLUGS } from "../../lib/useCaseSyntheticPost";
describe("buildPublicSitemap", () => {
it("lists public marketing routes, blog posts, and use cases", () => {
const urls = buildPublicSitemap().map((entry) => entry.url);
expect(urls).toContain(PRODUCTION_SITE_ORIGIN);
expect(urls).toContain(sitemapUrl("/about"));
expect(urls).toContain(sitemapUrl("/learn"));
expect(urls).toContain(sitemapUrl("/templates"));
expect(urls).toContain(sitemapUrl("/blog"));
expect(urls).toContain(sitemapUrl("/use-cases"));
expect(urls).toContain(sitemapUrl("/how-it-works"));
expect(urls).toContain(sitemapUrl("/privacy"));
expect(urls).toContain(sitemapUrl("/terms"));
expect(urls).toContain(sitemapUrl("/cookies"));
for (const post of getAllBlogPosts()) {
expect(urls).toContain(sitemapUrl(`/blog/${post.slug}`));
}
for (const slug of USE_CASE_DETAIL_SLUGS) {
expect(urls).toContain(sitemapUrl(`/use-cases/${slug}`));
expect(urls).toContain(sitemapUrl(`/use-cases/${slug}/rule`));
}
});
it("omits signed-in, admin, and API routes", () => {
const urls = buildPublicSitemap().map((entry) => entry.url);
expect(urls.some((url) => url.includes("/login"))).toBe(false);
expect(urls.some((url) => url.includes("/profile"))).toBe(false);
expect(urls.some((url) => url.includes("/create"))).toBe(false);
expect(urls.some((url) => url.includes("/monitor"))).toBe(false);
expect(urls.some((url) => url.includes("/api/"))).toBe(false);
});
});