one
Version:
One is a new React Framework that makes Vite serve both native and web.
223 lines • 8.04 kB
JavaScript
var import_vitest = require("vitest");
var import_generateSitemap = require("./generateSitemap.cjs");
(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)(() => {
if (originalEnv !== void 0) {
process.env.ONE_SERVER_URL = originalEnv;
} else {
delete process.env.ONE_SERVER_URL;
}
});
(0, import_vitest.it)("generates basic sitemap XML", () => {
const routes = [{
path: "/"
}, {
path: "/about"
}, {
path: "/blog"
}];
const options = {};
const result = (0, import_generateSitemap.generateSitemap)(routes, options);
(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 routes = [{
path: "/"
}, {
path: "/about"
}];
const options = {
baseUrl: "https://example.com"
};
const result = (0, import_generateSitemap.generateSitemap)(routes, options);
(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 routes = [{
path: "/about"
}];
const options = {
baseUrl: "https://example.com/"
};
const result = (0, import_generateSitemap.generateSitemap)(routes, options);
(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 routes = [{
path: "/test"
}];
const options = {};
const result = (0, import_generateSitemap.generateSitemap)(routes, options);
(0, import_vitest.expect)(result).toContain("<loc>https://env-url.com/test</loc>");
});
(0, import_vitest.it)("applies default priority to all routes", () => {
const routes = [{
path: "/"
}, {
path: "/about"
}];
const options = {
priority: 0.8
};
const result = (0, import_generateSitemap.generateSitemap)(routes, options);
(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 routes = [{
path: "/"
}, {
path: "/about"
}];
const options = {
changefreq: "weekly"
};
const result = (0, import_generateSitemap.generateSitemap)(routes, options);
(0, import_vitest.expect)(result).toContain("<changefreq>weekly</changefreq>");
});
(0, import_vitest.it)("respects route-level sitemap exports", () => {
const routes = [{
path: "/",
routeExport: {
priority: 1,
changefreq: "daily"
}
}, {
path: "/about",
routeExport: {
priority: 0.5,
changefreq: "monthly"
}
}];
const options = {
priority: 0.7,
changefreq: "weekly"
};
const result = (0, import_generateSitemap.generateSitemap)(routes, options);
(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 routes = [{
path: "/"
}, {
path: "/admin",
routeExport: {
exclude: true
}
}, {
path: "/about"
}];
const options = {};
const result = (0, import_generateSitemap.generateSitemap)(routes, options);
(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 routes = [{
path: "/"
}, {
path: "/admin/dashboard"
}, {
path: "/admin/users"
}, {
path: "/about"
}, {
path: "/api/health"
}];
const options = {
exclude: ["/admin/*", "/api/*"]
};
const result = (0, import_generateSitemap.generateSitemap)(routes, options);
(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 routes = [{
path: "/",
routeExport: {
lastmod: "2024-01-15"
}
}, {
path: "/about",
routeExport: {
lastmod: /* @__PURE__ */new Date("2024-06-20")
}
}];
const options = {};
const result = (0, import_generateSitemap.generateSitemap)(routes, options);
(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 routes = [{
path: "/search?q=foo&bar=baz"
}];
const options = {
baseUrl: "https://example.com"
};
const result = (0, import_generateSitemap.generateSitemap)(routes, options);
(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 routes = [];
const options = {};
const result = (0, import_generateSitemap.generateSitemap)(routes, options);
(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 routes = [{
path: "/",
routeExport: {
changefreq
}
}];
const result = (0, import_generateSitemap.generateSitemap)(routes, {});
(0, import_vitest.expect)(result).toContain(`<changefreq>${changefreq}</changefreq>`);
}
});
(0, import_vitest.it)("formats priority with one decimal place", () => {
const routes = [{
path: "/",
routeExport: {
priority: 1
}
}, {
path: "/about",
routeExport: {
priority: 0.5
}
}, {
path: "/blog",
routeExport: {
priority: 0.75
}
}];
const options = {};
const result = (0, import_generateSitemap.generateSitemap)(routes, options);
(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>");
});
});