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 @@
1import { assert, it } from "@effect/vitest";
2import { Effect, Layer, Option } from "effect";
3
4import * as AzureDevOpsCli from "./AzureDevOpsCli.ts";
5import * as AzureDevOpsSourceControlProvider from "./AzureDevOpsSourceControlProvider.ts";
6
7function makeProvider(azure: Partial<AzureDevOpsCli.AzureDevOpsCliShape>) {
8 return AzureDevOpsSourceControlProvider.make().pipe(
9 Effect.provide(Layer.mock(AzureDevOpsCli.AzureDevOpsCli)(azure)),
10 );
11}
12
13it.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
47it.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
76it.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);