mirror of
https://github.com/better-auth/better-auth.git
synced 2026-10-18 11:32:15 -05:00
141 lines
3.9 KiB
TypeScript
141 lines
3.9 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { docsVersionSources } from "./docs-version-sources";
|
|
import type { VersionAvailability } from "./docs-versions";
|
|
import {
|
|
docsVersions,
|
|
getVersionFromPathname,
|
|
getVersionTargetHref,
|
|
resolveVersionFromSlug,
|
|
scopeDocsHref,
|
|
versionedDocsHref,
|
|
} from "./docs-versions";
|
|
|
|
const [betaVersion, latestVersion, version16] = docsVersions;
|
|
|
|
const availability: VersionAvailability = {
|
|
latest: [],
|
|
"1.6": ["/docs/introduction", "/docs/plugins/scim"],
|
|
beta: ["/docs/introduction", "/docs/plugins/scim"],
|
|
};
|
|
|
|
describe("documentation versions", () => {
|
|
it("lists beta before stable while keeping stable as the default", () => {
|
|
expect(docsVersions.map((version) => version.id)).toEqual([
|
|
"beta",
|
|
"latest",
|
|
"1.6",
|
|
]);
|
|
expect(getVersionFromPathname("/docs/introduction").id).toBe("latest");
|
|
expect(resolveVersionFromSlug([]).version.id).toBe("latest");
|
|
});
|
|
|
|
it("targets maintenance branches for documentation edits", () => {
|
|
expect(docsVersionSources[version16.id].editBranch).toBe("v1.6.x");
|
|
});
|
|
|
|
it("pins historical documentation to an immutable revision", () => {
|
|
expect(docsVersionSources[latestVersion.id].commitSha).toBeNull();
|
|
expect(docsVersionSources[version16.id].commitSha).toMatch(
|
|
/^[0-9a-f]{40}$/,
|
|
);
|
|
});
|
|
|
|
it("pins beta documentation to next and keeps its release line separate", () => {
|
|
expect(docsVersionSources[betaVersion.id].editBranch).toBe("next");
|
|
expect(docsVersionSources[betaVersion.id].commitSha).toMatch(
|
|
/^[0-9a-f]{40}$/,
|
|
);
|
|
expect(betaVersion.releaseLine).toBe("1.8");
|
|
});
|
|
|
|
it("resolves beta pages and scopes their links", () => {
|
|
expect(resolveVersionFromSlug(["beta", "plugins", "scim"])).toEqual({
|
|
version: betaVersion,
|
|
relSlug: ["plugins", "scim"],
|
|
});
|
|
expect(getVersionFromPathname("/docs/beta/plugins/scim")).toBe(betaVersion);
|
|
expect(getVersionFromPathname("/docs/beta-tutorial")).toBe(latestVersion);
|
|
expect(scopeDocsHref("/docs/plugins/scim", betaVersion)).toBe(
|
|
"/docs/beta/plugins/scim",
|
|
);
|
|
expect(scopeDocsHref("/docs/beta/plugins/scim", betaVersion)).toBe(
|
|
"/docs/beta/plugins/scim",
|
|
);
|
|
expect(scopeDocsHref("/docs/1.6/introduction", betaVersion)).toBe(
|
|
"/docs/1.6/introduction",
|
|
);
|
|
});
|
|
|
|
it("switches between beta and stable without losing the current page", () => {
|
|
expect(
|
|
getVersionTargetHref(
|
|
"/docs/beta/plugins/scim",
|
|
betaVersion,
|
|
latestVersion,
|
|
{ ...availability, latest: ["/docs/plugins/scim"] },
|
|
),
|
|
).toBe("/docs/plugins/scim");
|
|
expect(
|
|
getVersionTargetHref(
|
|
"/docs/plugins/scim",
|
|
latestVersion,
|
|
betaVersion,
|
|
availability,
|
|
),
|
|
).toBe("/docs/beta/plugins/scim");
|
|
});
|
|
|
|
it("resolves archived version slugs", () => {
|
|
expect(resolveVersionFromSlug(["1.6", "plugins", "scim"])).toEqual({
|
|
version: version16,
|
|
relSlug: ["plugins", "scim"],
|
|
});
|
|
});
|
|
|
|
it("detects archived versions from the pathname", () => {
|
|
expect(getVersionFromPathname("/docs/1.6/plugins/scim")).toBe(version16);
|
|
});
|
|
|
|
it("builds archived documentation URLs", () => {
|
|
expect(versionedDocsHref("/docs/plugins/scim", version16)).toBe(
|
|
"/docs/1.6/plugins/scim",
|
|
);
|
|
expect(versionedDocsHref("/docs", version16)).toBe(
|
|
"/docs/1.6/introduction",
|
|
);
|
|
});
|
|
|
|
it("keeps the same page when it exists in the target version", () => {
|
|
expect(
|
|
getVersionTargetHref(
|
|
"/docs/plugins/scim",
|
|
latestVersion,
|
|
version16,
|
|
availability,
|
|
),
|
|
).toBe("/docs/1.6/plugins/scim");
|
|
});
|
|
|
|
it("falls back to the closest parent page", () => {
|
|
expect(
|
|
getVersionTargetHref(
|
|
"/docs/plugins/scim/reference",
|
|
latestVersion,
|
|
version16,
|
|
availability,
|
|
),
|
|
).toBe("/docs/1.6/plugins/scim");
|
|
});
|
|
|
|
it("falls back to the introduction when no path segment matches", () => {
|
|
expect(
|
|
getVersionTargetHref(
|
|
"/docs/unknown",
|
|
latestVersion,
|
|
version16,
|
|
availability,
|
|
),
|
|
).toBe("/docs/1.6/introduction");
|
|
});
|
|
});
|