Files
community-rule/tests/unit/publicSitemap.test.ts
T
adilalloandCursor 1445cb7e1e Keep listed published rules public and guest-claim rules unlisted, with semantic document markup and share chrome that stays clickable.
Guest publishes remain share-by-link but stay out of the catalog and sitemap, and their pages send noindex until claimed. The published-rule view now uses heading and list markup matching Markdown export, and top banners sit below the header so Share is not covered.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 17:42:01 -06:00

55 lines
2.3 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);
});
it("appends listed published-rule URLs and omits them when none are supplied", () => {
const withoutRules = buildPublicSitemap().map((entry) => entry.url);
expect(withoutRules.some((url) => url.includes("/rules/"))).toBe(false);
const updatedAt = new Date("2026-09-01T00:00:00.000Z");
const withRules = buildPublicSitemap([{ id: "rule-1", updatedAt }]);
const listed = withRules.find(
(entry) => entry.url === sitemapUrl("/rules/rule-1"),
);
expect(listed).toEqual({
url: sitemapUrl("/rules/rule-1"),
lastModified: updatedAt,
});
});
});