History

feat(source-control): add Bitbucket & Azure Devops providers (#2473)

Julius Marminge committed 6 months agov0.0.22-nightly.20260504.196

Commit 91a03e01 parent d501ebe59 files · +5834 −2327Browse files

Showing the changes to apps/server/src/sourceControl/AzureDevOpsSourceControlProvider.test.ts (1 of 59 files). Show all

Unified · Split

apps/server/src/sourceControl/AzureDevOpsSourceControlProvider.test.ts+91−0
@@ -0,0 +1,91 @@
1+import { assert, it } from "@effect/vitest";
2+import { Effect, Layer, Option } from "effect";
3+
4+import * as AzureDevOpsCli from "./AzureDevOpsCli.ts";
5+import * as AzureDevOpsSourceControlProvider from "./AzureDevOpsSourceControlProvider.ts";
6+
7+function makeProvider(azure: Partial<AzureDevOpsCli.AzureDevOpsCliShape>) {
8+ return AzureDevOpsSourceControlProvider.make().pipe(
9+ Effect.provide(Layer.mock(AzureDevOpsCli.AzureDevOpsCli)(azure)),
10+ );
11+}
12+
13+it.effect("maps Azure DevOps PR summaries into provider-neutral change requests", () =>
14+ Effect.gen(function* () {
15+ const provider = yield* makeProvider({
16+ getPullRequest: () =>
17+ Effect.succeed({
18+ number: 42,
19+ title: "Add Azure provider",
20+ url: "https://dev.azure.com/acme/project/_git/repo/pullrequest/42",
21+ baseRefName: "main",
22+ headRefName: "feature/source-control",
23+ state: "open",
24+ updatedAt: Option.none(),
25+ }),
26+ });
27+
28+ const changeRequest = yield* provider.getChangeRequest({
29+ cwd: "/repo",
30+ reference: "42",
31+ });
32+
33+ assert.deepStrictEqual(changeRequest, {
34+ provider: "azure-devops",
35+ number: 42,
36+ title: "Add Azure provider",
37+ url: "https://dev.azure.com/acme/project/_git/repo/pullrequest/42",
38+ baseRefName: "main",
39+ headRefName: "feature/source-control",
40+ state: "open",
41+ updatedAt: Option.none(),
42+ isCrossRepository: false,
43+ });
44+ }),
45+);
46+
47+it.effect("creates Azure DevOps PRs through provider-neutral input names", () =>
48+ Effect.gen(function* () {
49+ let createInput: Parameters<AzureDevOpsCli.AzureDevOpsCliShape["createPullRequest"]>[0] | null =
50+ null;
51+ const provider = yield* makeProvider({
52+ createPullRequest: (input) => {
53+ createInput = input;
54+ return Effect.void;
55+ },
56+ });
57+
58+ yield* provider.createChangeRequest({
59+ cwd: "/repo",
60+ baseRefName: "main",
61+ headSelector: "feature/provider",
62+ title: "Provider PR",
63+ bodyFile: "/tmp/body.md",
64+ });
65+
66+ assert.deepStrictEqual(createInput, {
67+ cwd: "/repo",
68+ baseBranch: "main",
69+ headSelector: "feature/provider",
70+ title: "Provider PR",
71+ bodyFile: "/tmp/body.md",
72+ });
73+ }),
74+);
75+
76+it.effect("uses Azure CLI repository detection for default branch lookup", () =>
77+ Effect.gen(function* () {
78+ let cwdInput: string | null = null;
79+ const provider = yield* makeProvider({
80+ getDefaultBranch: (input) => {
81+ cwdInput = input.cwd;
82+ return Effect.succeed("main");
83+ },
84+ });
85+
86+ const defaultBranch = yield* provider.getDefaultBranch({ cwd: "/repo" });
87+
88+ assert.strictEqual(defaultBranch, "main");
89+ assert.strictEqual(cwdInput, "/repo");
90+ }),
91+);