import { describe, expect, it } from "vitest"; // re-export the normalizeUrl function for testing // note: in a real scenario, we'd export this from git.ts or move to a shared utils file function normalizeUrl(url: string): string { return url.replace(/\.git$/, "").toLowerCase(); } describe("normalizeUrl", () => { it("removes .git suffix", () => { expect(normalizeUrl("https://github.com/owner/repo.git")).toBe("https://github.com/owner/repo"); }); it("lowercases URL", () => { expect(normalizeUrl("https://github.com/Owner/Repo")).toBe("https://github.com/owner/repo"); }); it("handles URL without .git suffix", () => { expect(normalizeUrl("https://github.com/owner/repo")).toBe("https://github.com/owner/repo"); }); it("handles combined case and .git suffix", () => { expect(normalizeUrl("https://github.com/OWNER/REPO.git")).toBe("https://github.com/owner/repo"); }); }); describe("push URL validation", () => { // these tests document the expected behavior // actual integration testing happens via the agent test suite it("should block push when actual URL differs from pushUrl", () => { // pushUrl is set by setupGit (base repo) or checkout_pr (fork repo) const pushUrl = "https://github.com/fork-owner/repo.git"; const actualUrl = "https://github.com/base-owner/repo.git"; // different repo const pushUrlNormalized = normalizeUrl(pushUrl); const actualUrlNormalized = normalizeUrl(actualUrl); expect(pushUrlNormalized).not.toBe(actualUrlNormalized); // in real code, this mismatch would throw an error }); it("should allow push when actual URL matches pushUrl", () => { const pushUrl = "https://github.com/fork-owner/repo.git"; const actualUrl = "https://github.com/fork-owner/repo"; // same repo, no .git const pushUrlNormalized = normalizeUrl(pushUrl); const actualUrlNormalized = normalizeUrl(actualUrl); expect(pushUrlNormalized).toBe(actualUrlNormalized); // in real code, this would allow the push }); it("should handle case differences in URLs", () => { const pushUrl = "https://github.com/Owner/Repo.git"; const actualUrl = "https://github.com/owner/repo"; const pushUrlNormalized = normalizeUrl(pushUrl); const actualUrlNormalized = normalizeUrl(actualUrl); expect(pushUrlNormalized).toBe(actualUrlNormalized); }); });