Showing the changes to apps/server/src/sourceControl/AzureDevOpsSourceControlProvider.test.ts (1 of 59 files). Show all
Unified · Split
| @@ -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 | ); | ||