one
Version:
One is a new React Framework that makes Vite serve both native and web.
114 lines (113 loc) • 6.95 kB
JavaScript
var import_vitest = require("vitest"), import_generateSitemap = require("./generateSitemap");
(0, import_vitest.describe)("generateSitemap", () => {
let originalEnv;
(0, import_vitest.beforeEach)(() => {
originalEnv = process.env.ONE_SERVER_URL, delete process.env.ONE_SERVER_URL;
}), (0, import_vitest.afterEach)(() => {
originalEnv !== void 0 ? process.env.ONE_SERVER_URL = originalEnv : delete process.env.ONE_SERVER_URL;
}), (0, import_vitest.it)("generates basic sitemap XML", () => {
const result = (0, import_generateSitemap.generateSitemap)([
{ path: "/" },
{ path: "/about" },
{ path: "/blog" }
], {});
(0, import_vitest.expect)(result).toContain('<?xml version="1.0" encoding="UTF-8"?>'), (0, import_vitest.expect)(result).toContain(
'<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'
), (0, import_vitest.expect)(result).toContain("<loc>/</loc>"), (0, import_vitest.expect)(result).toContain("<loc>/about</loc>"), (0, import_vitest.expect)(result).toContain("<loc>/blog</loc>"), (0, import_vitest.expect)(result).toContain("</urlset>");
}), (0, import_vitest.it)("uses baseUrl when provided", () => {
const result = (0, import_generateSitemap.generateSitemap)([{ path: "/" }, { path: "/about" }], {
baseUrl: "https://example.com"
});
(0, import_vitest.expect)(result).toContain("<loc>https://example.com/</loc>"), (0, import_vitest.expect)(result).toContain("<loc>https://example.com/about</loc>");
}), (0, import_vitest.it)("strips trailing slash from baseUrl", () => {
const result = (0, import_generateSitemap.generateSitemap)([{ path: "/about" }], {
baseUrl: "https://example.com/"
});
(0, import_vitest.expect)(result).toContain("<loc>https://example.com/about</loc>"), (0, import_vitest.expect)(result).not.toContain("https://example.com//about");
}), (0, import_vitest.it)("uses ONE_SERVER_URL env var when baseUrl not provided", () => {
process.env.ONE_SERVER_URL = "https://env-url.com";
const result = (0, import_generateSitemap.generateSitemap)([{ path: "/test" }], {});
(0, import_vitest.expect)(result).toContain("<loc>https://env-url.com/test</loc>");
}), (0, import_vitest.it)("applies default priority to all routes", () => {
const result = (0, import_generateSitemap.generateSitemap)([{ path: "/" }, { path: "/about" }], {
priority: 0.8
});
(0, import_vitest.expect)(result).toMatch(
/<url>\s*<loc>\/about<\/loc>\s*<priority>0\.8<\/priority>\s*<\/url>/s
);
}), (0, import_vitest.it)("applies default changefreq to all routes", () => {
const result = (0, import_generateSitemap.generateSitemap)([{ path: "/" }, { path: "/about" }], {
changefreq: "weekly"
});
(0, import_vitest.expect)(result).toContain("<changefreq>weekly</changefreq>");
}), (0, import_vitest.it)("respects route-level sitemap exports", () => {
const result = (0, import_generateSitemap.generateSitemap)([
{ path: "/", routeExport: { priority: 1, changefreq: "daily" } },
{ path: "/about", routeExport: { priority: 0.5, changefreq: "monthly" } }
], {
priority: 0.7,
changefreq: "weekly"
});
(0, import_vitest.expect)(result).toMatch(
/<url>\s*<loc>\/<\/loc>\s*<changefreq>daily<\/changefreq>\s*<priority>1\.0<\/priority>\s*<\/url>/s
), (0, import_vitest.expect)(result).toMatch(
/<url>\s*<loc>\/about<\/loc>\s*<changefreq>monthly<\/changefreq>\s*<priority>0\.5<\/priority>\s*<\/url>/s
);
}), (0, import_vitest.it)("excludes routes with routeExport.exclude = true", () => {
const result = (0, import_generateSitemap.generateSitemap)([
{ path: "/" },
{ path: "/admin", routeExport: { exclude: !0 } },
{ path: "/about" }
], {});
(0, import_vitest.expect)(result).toContain("<loc>/</loc>"), (0, import_vitest.expect)(result).toContain("<loc>/about</loc>"), (0, import_vitest.expect)(result).not.toContain("/admin");
}), (0, import_vitest.it)("excludes routes matching exclude glob patterns", () => {
const result = (0, import_generateSitemap.generateSitemap)([
{ path: "/" },
{ path: "/admin/dashboard" },
{ path: "/admin/users" },
{ path: "/about" },
{ path: "/api/health" }
], {
exclude: ["/admin/*", "/api/*"]
});
(0, import_vitest.expect)(result).toContain("<loc>/</loc>"), (0, import_vitest.expect)(result).toContain("<loc>/about</loc>"), (0, import_vitest.expect)(result).not.toContain("/admin"), (0, import_vitest.expect)(result).not.toContain("/api");
}), (0, import_vitest.it)("includes lastmod when provided in route export", () => {
const result = (0, import_generateSitemap.generateSitemap)([
{ path: "/", routeExport: { lastmod: "2024-01-15" } },
{ path: "/about", routeExport: { lastmod: /* @__PURE__ */ new Date("2024-06-20") } }
], {});
(0, import_vitest.expect)(result).toContain("<lastmod>2024-01-15</lastmod>"), (0, import_vitest.expect)(result).toContain("<lastmod>2024-06-20</lastmod>");
}), (0, import_vitest.it)("escapes XML special characters in URLs", () => {
const result = (0, import_generateSitemap.generateSitemap)([{ path: "/search?q=foo&bar=baz" }], {
baseUrl: "https://example.com"
});
(0, import_vitest.expect)(result).toContain("&"), (0, import_vitest.expect)(result).not.toContain("&bar");
}), (0, import_vitest.it)("generates empty sitemap when no routes", () => {
const result = (0, import_generateSitemap.generateSitemap)([], {});
(0, import_vitest.expect)(result).toContain('<?xml version="1.0" encoding="UTF-8"?>'), (0, import_vitest.expect)(result).toContain(
'<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'
), (0, import_vitest.expect)(result).toContain("</urlset>"), (0, import_vitest.expect)(result).not.toContain("<url>");
}), (0, import_vitest.it)("handles all valid changefreq values", () => {
const changefreqs = [
"always",
"hourly",
"daily",
"weekly",
"monthly",
"yearly",
"never"
];
for (const changefreq of changefreqs) {
const result = (0, import_generateSitemap.generateSitemap)([{ path: "/", routeExport: { changefreq } }], {});
(0, import_vitest.expect)(result).toContain(`<changefreq>${changefreq}</changefreq>`);
}
}), (0, import_vitest.it)("formats priority with one decimal place", () => {
const result = (0, import_generateSitemap.generateSitemap)([
{ path: "/", routeExport: { priority: 1 } },
{ path: "/about", routeExport: { priority: 0.5 } },
{ path: "/blog", routeExport: { priority: 0.75 } }
], {});
(0, import_vitest.expect)(result).toContain("<priority>1.0</priority>"), (0, import_vitest.expect)(result).toContain("<priority>0.5</priority>"), (0, import_vitest.expect)(result).toContain("<priority>0.8</priority>");
});
});
//# sourceMappingURL=generateSitemap.test.js.map