one
Version:
One is a new React Framework that makes Vite serve both native and web.
99 lines (98 loc) • 4.11 kB
JavaScript
import { describe, expect, it } from "vitest";
import { getPathnameFromFilePath } from "./getPathnameFromFilePath.native.js";
describe("getPathnameFromFilePath", function () {
it("index route", function () {
expect(getPathnameFromFilePath("/index+spa.tsx")).toBe("/");
});
it("simple page", function () {
expect(getPathnameFromFilePath("/about+ssg.tsx")).toBe("/about");
});
it("dynamic param", function () {
expect(getPathnameFromFilePath("/[serverId]/index+spa.tsx")).toBe("/:serverId/");
});
it("nested dynamic params", function () {
expect(getPathnameFromFilePath("/[serverId]/[channelId]/index+spa.tsx")).toBe("/:serverId/:channelId/");
});
it("catch-all route without params", function () {
expect(getPathnameFromFilePath("/docs/[...slug]+ssg.tsx")).toBe("/docs/*");
});
it("catch-all route with params", function () {
expect(getPathnameFromFilePath("/docs/[...slug]+ssg.tsx", {
slug: "intro/basics"
})).toBe("/docs/intro/basics");
});
it("route groups are stripped", function () {
expect(getPathnameFromFilePath("/(site)/(legal)/terms+ssg.tsx")).toBe("/terms");
});
it("nested path", function () {
expect(getPathnameFromFilePath("/dashboard/settings/index+ssr.tsx")).toBe("/dashboard/settings/");
});
it("folder render mode suffix stripped", function () {
expect(getPathnameFromFilePath("/folder+ssr/page+ssg.tsx")).toBe("/folder/page");
});
it("+not-found route", function () {
expect(getPathnameFromFilePath("/not-found/+not-found+ssg.tsx")).toBe("/not-found/+not-found");
});
it("dynamic param with +not-found", function () {
expect(getPathnameFromFilePath("/[slug]/+not-found+ssr.tsx")).toBe("/:slug/+not-found");
});
it("underscore-prefixed path segment", function () {
expect(getPathnameFromFilePath("/_/home/index+spa.tsx")).toBe("/_/home/");
});
describe("input must start with / not ./", function () {
it('"./" prefix produces wrong keys', function () {
var broken = getPathnameFromFilePath("./[serverId]/index+spa.tsx");
expect(broken).toBe("./:serverId/");
expect(broken).not.toBe("/:serverId/");
});
it('"/" prefix produces correct keys', function () {
expect(getPathnameFromFilePath("/[serverId]/index+spa.tsx")).toBe("/:serverId/");
});
it('"./" root produces wrong key', function () {
var broken = getPathnameFromFilePath("./index+spa.tsx");
expect(broken).toBe("./");
expect(broken).not.toBe("/");
});
it('"/" root produces correct key', function () {
expect(getPathnameFromFilePath("/index+spa.tsx")).toBe("/");
});
});
describe("with params substitution", function () {
it("substitutes dynamic param", function () {
expect(getPathnameFromFilePath("/ssr/[param]+ssr.tsx", {
param: "hello"
})).toBe("/ssr/hello");
});
it("substitutes params in both dirname and filename", function () {
expect(getPathnameFromFilePath("/servers/[serverId]/[channelId]+spa.tsx", {
serverId: "abc",
channelId: "123"
})).toBe("/servers/abc/123");
});
it("substitutes dirname params for SSG dynamic routes", function () {
expect(getPathnameFromFilePath("/[lang]/index+ssg.tsx", {
lang: "en"
}, true)).toBe("/en/");
expect(getPathnameFromFilePath("/[lang]/index+ssg.tsx", {
lang: "ko"
}, true)).toBe("/ko/");
});
it("substitutes nested dirname params", function () {
expect(getPathnameFromFilePath("/[lang]/[region]/index+ssg.tsx", {
lang: "en",
region: "us"
}, true)).toBe("/en/us/");
});
});
describe("strict mode", function () {
it("throws on missing param in strict mode", function () {
expect(function () {
return getPathnameFromFilePath("/[id]+ssr.tsx", {}, true);
}).toThrow("Params doesn't fit route");
});
it("returns placeholder in non-strict mode", function () {
expect(getPathnameFromFilePath("/[id]+ssr.tsx", {}, false)).toBe("/:id");
});
});
});
//# sourceMappingURL=getPathnameFromFilePath.test.native.js.map