import { assert, describe, it } from "@effect/vitest";import { Option } from "effect"; import { detectSourceControlProviderFromRemoteUrl, getChangeRequestTerminologyForKind, parseRemoteHostForSourceControl, resolveChangeRequestPresentation,} from "./sourceControl.ts"; describe("source control presentation", () => { it("uses merge request terminology for GitLab", () => { assert.deepEqual(getChangeRequestTerminologyForKind("gitlab"), { shortLabel: "MR", singular: "merge request", }); }); it("uses pull request terminology for GitHub-compatible providers", () => { assert.deepEqual(getChangeRequestTerminologyForKind("github"), { shortLabel: "PR", singular: "pull request", }); assert.deepEqual(getChangeRequestTerminologyForKind("azure-devops"), { shortLabel: "PR", singular: "pull request", }); assert.deepEqual(getChangeRequestTerminologyForKind("bitbucket"), { shortLabel: "PR", singular: "pull request", }); }); it("falls back to generic change request copy for unknown providers", () => { const presentation = resolveChangeRequestPresentation({ kind: "unknown", name: "forge", baseUrl: "", }); assert.equal(presentation.shortName, "change request"); assert.equal(presentation.longName, "change request"); });}); describe("detectSourceControlProviderFromRemoteUrl", () => { it("detects common source control hosts", () => { assert.equal( detectSourceControlProviderFromRemoteUrl("git@github.com:owner/repo.git")?.kind, "github", ); assert.equal( detectSourceControlProviderFromRemoteUrl("https://gitlab.com/group/repo.git")?.kind, "gitlab", ); assert.equal( detectSourceControlProviderFromRemoteUrl("https://dev.azure.com/org/project/_git/repo")?.kind, "azure-devops", ); assert.equal( detectSourceControlProviderFromRemoteUrl("git@bitbucket.org:workspace/repo.git")?.kind, "bitbucket", ); });}); describe("parseRemoteHostOption", () => { it("returns parsed hosts as options", () => { assert.deepEqual( parseRemoteHostForSourceControl("git@github.com:owner/repo.git"), Option.some("github.com"), ); assert.deepEqual( parseRemoteHostForSourceControl("https://gitlab.com/group/repo.git"), Option.some("gitlab.com"), ); }); it("returns none for empty or invalid remotes", () => { assert.equal(Option.isNone(parseRemoteHostForSourceControl(" ")), true); assert.equal(Option.isNone(parseRemoteHostForSourceControl("not a url")), true); });});
import { assert, describe, it } from "@effect/vitest";
import { Option } from "effect";
import {
detectSourceControlProviderFromRemoteUrl,
getChangeRequestTerminologyForKind,
parseRemoteHostForSourceControl,
resolveChangeRequestPresentation,
} from "./sourceControl.ts";
describe("source control presentation", () => {
it("uses merge request terminology for GitLab", () => {
assert.deepEqual(getChangeRequestTerminologyForKind("gitlab"), {
shortLabel: "MR",
singular: "merge request",
});
});
it("uses pull request terminology for GitHub-compatible providers", () => {
assert.deepEqual(getChangeRequestTerminologyForKind("github"), {
shortLabel: "PR",
singular: "pull request",
});
assert.deepEqual(getChangeRequestTerminologyForKind("azure-devops"), {
shortLabel: "PR",
singular: "pull request",
});
assert.deepEqual(getChangeRequestTerminologyForKind("bitbucket"), {
shortLabel: "PR",
singular: "pull request",
});
});
it("falls back to generic change request copy for unknown providers", () => {
const presentation = resolveChangeRequestPresentation({
kind: "unknown",
name: "forge",
baseUrl: "",
});
assert.equal(presentation.shortName, "change request");
assert.equal(presentation.longName, "change request");
});
});
describe("detectSourceControlProviderFromRemoteUrl", () => {
it("detects common source control hosts", () => {
assert.equal(
detectSourceControlProviderFromRemoteUrl("git@github.com:owner/repo.git")?.kind,
"github",
);
assert.equal(
detectSourceControlProviderFromRemoteUrl("https://gitlab.com/group/repo.git")?.kind,
"gitlab",
);
assert.equal(
detectSourceControlProviderFromRemoteUrl("https://dev.azure.com/org/project/_git/repo")?.kind,
"azure-devops",
);
assert.equal(
detectSourceControlProviderFromRemoteUrl("git@bitbucket.org:workspace/repo.git")?.kind,
"bitbucket",
);
});
});
describe("parseRemoteHostOption", () => {
it("returns parsed hosts as options", () => {
assert.deepEqual(
parseRemoteHostForSourceControl("git@github.com:owner/repo.git"),
Option.some("github.com"),
);
assert.deepEqual(
parseRemoteHostForSourceControl("https://gitlab.com/group/repo.git"),
Option.some("gitlab.com"),
);
});
it("returns none for empty or invalid remotes", () => {
assert.equal(Option.isNone(parseRemoteHostForSourceControl(" ")), true);
assert.equal(Option.isNone(parseRemoteHostForSourceControl("not a url")), true);
});
});