Files
better-auth/packages/release-tooling/test/change-classifier.test.ts

65 lines
2.0 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
classifyChangeType,
isMaintenanceBranch,
mapTypeToBump,
resolveDomain,
resolvePackage,
} from "../src/change-classifier.ts";
describe("change classification", () => {
it("recognizes versioned maintenance branches", () => {
expect(isMaintenanceBranch("v1.6.x")).toBe(true);
expect(isMaintenanceBranch("v1.6.30")).toBe(false);
expect(isMaintenanceBranch("v1.4.x-staging")).toBe(false);
expect(isMaintenanceBranch("release/1.6")).toBe(false);
});
it.each([
["sso", "enterprise"],
["expo", "platform"],
["session", "core"],
["prisma-adapter", "database"],
])("maps the %s scope to the %s domain", (scope, domain) => {
expect(resolveDomain(scope, [])).toBe(domain);
});
it.each([
["packages/expo/src/index.ts", "platform"],
["packages/sso/src/index.ts", "enterprise"],
["packages/better-auth/src/db/index.ts", "database"],
["docs/content/docs/index.mdx", "docs"],
])("maps %s to the %s domain", (path, domain) => {
expect(resolveDomain(undefined, [path])).toBe(domain);
});
it.each([
["expo", "@better-auth/expo"],
["sso", "@better-auth/sso"],
["cli", "auth"],
["session", "better-auth"],
])("maps the %s scope to the %s package", (scope, packageName) => {
expect(resolvePackage(scope, [])).toBe(packageName);
});
it("prefers a specific package over the core catch-all", () => {
expect(
resolvePackage(undefined, [
"packages/better-auth/src/index.ts",
"packages/expo/src/index.ts",
]),
).toBe("@better-auth/expo");
});
it("classifies semver and release-note change types", () => {
expect(mapTypeToBump("feat", false)).toBe("minor");
expect(mapTypeToBump("fix", false)).toBe("patch");
expect(mapTypeToBump("docs", false)).toBe("skip");
expect(mapTypeToBump("fix", true)).toBe("minor");
expect(classifyChangeType("feat", false)).toBe("feat");
expect(classifyChangeType("fix", false)).toBe("fix");
expect(classifyChangeType("fix", true)).toBe("breaking");
});
});