import { caseStudies, pageUpdatedAt, servicePages, siteUrl, } from "@/lib/site-content"; import sitemap from "./sitemap"; /** O mapa do site lista a home, as páginas fixas, cada serviço e cada case, sem repetir endereço. */ describe("sitemap", () => { const urls = sitemap().map((entry) => entry.url); it("lists the fixed pages, every service and every case, once each", () => { expect(urls).toEqual( expect.arrayContaining([ siteUrl, `${siteUrl}/curriculo`, `${siteUrl}/privacidade`, `${siteUrl}/servicos`, `${siteUrl}/cases`, `${siteUrl}/ia`, ...servicePages.map(({ slug }) => `${siteUrl}/servicos/${slug}`), ...caseStudies.map(({ id }) => `${siteUrl}/cases/${id}`), ]), ); expect(new Set(urls).size).toBe(urls.length); expect(urls).toHaveLength(6 + servicePages.length + caseStudies.length); }); it("never lists the 404 page", () => { expect(urls.some((url) => /not-found|nada/.test(url))).toBe(false); }); it("never lists the game (/jogo) or its benchmark (/jogo/bancada)", () => { expect(urls.some((url) => url.startsWith(`${siteUrl}/jogo`))).toBe(false); }); it("gives every route the modification date of its own content, equal on every build", () => { const day = (value: Date | string | undefined) => new Date(value ?? "").toISOString().slice(0, 10); const byUrl = new Map( sitemap().map((entry) => [entry.url, day(entry.lastModified)]), ); expect(byUrl.get(siteUrl)).toBe(pageUpdatedAt.home); expect(byUrl.get(`${siteUrl}/curriculo`)).toBe(pageUpdatedAt.curriculo); expect(byUrl.get(`${siteUrl}/privacidade`)).toBe(pageUpdatedAt.privacidade); expect(byUrl.get(`${siteUrl}/servicos`)).toBe(pageUpdatedAt.servicos); expect(byUrl.get(`${siteUrl}/cases`)).toBe(pageUpdatedAt.cases); expect(byUrl.get(`${siteUrl}/ia`)).toBe(pageUpdatedAt.ia); for (const { slug, updatedAt } of servicePages) { expect(byUrl.get(`${siteUrl}/servicos/${slug}`)).toBe(updatedAt); } for (const { id, updatedAt } of caseStudies) { expect(byUrl.get(`${siteUrl}/cases/${id}`)).toBe(updatedAt); } // não é uma data única copiada para todas as rotas, e não vem do relógio: duas chamadas dão o mesmo resultado expect(new Set(byUrl.values()).size).toBeGreaterThan(1); expect(sitemap()).toEqual(sitemap()); }); it("keeps every content date a real calendar day (AAAA-MM-DD) that is not in the future", () => { const days = [ ...Object.values(pageUpdatedAt), ...servicePages.map(({ updatedAt }) => updatedAt), ...caseStudies.map(({ updatedAt }) => updatedAt), ]; for (const value of days) { expect(value).toMatch(/^\d{4}-\d{2}-\d{2}$/); const parsed = new Date(`${value}T00:00:00Z`); expect(parsed.toISOString().slice(0, 10)).toBe(value); expect(parsed.getTime()).toBeLessThanOrEqual(Date.now()); } }); });