History

feat(scm): Gitlab (#2462)

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

Commit 0ce7e561 parent 350d76e24 files · +1606 −185Browse files

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

Unified · Split

apps/server/src/sourceControl/GitLabSourceControlProvider.test.ts+105−0
@@ -0,0 +1,105 @@
1import { assert, it } from "@effect/vitest";
2import { Effect, Layer, Option } from "effect";
3
4import { GitLabCli, type GitLabCliShape } from "./GitLabCli.ts";
5import * as GitLabSourceControlProvider from "./GitLabSourceControlProvider.ts";
6
7function makeProvider(gitlab: Partial<GitLabCliShape>) {
8 return GitLabSourceControlProvider.make().pipe(Effect.provide(Layer.mock(GitLabCli)(gitlab)));
9}
10
11it.effect("maps GitLab MR summaries into provider-neutral change requests", () =>
12 Effect.gen(function* () {
13 const provider = yield* makeProvider({
14 getMergeRequest: () =>
15 Effect.succeed({
16 number: 42,
17 title: "Add GitLab provider",
18 url: "https://gitlab.com/pingdotgg/t3code/-/merge_requests/42",
19 baseRefName: "main",
20 headRefName: "feature/source-control",
21 state: "open",
22 isCrossRepository: true,
23 headRepositoryNameWithOwner: "fork/t3code",
24 headRepositoryOwnerLogin: "fork",
25 }),
26 });
27
28 const changeRequest = yield* provider.getChangeRequest({
29 cwd: "/repo",
30 reference: "42",
31 });
32
33 assert.deepStrictEqual(changeRequest, {
34 provider: "gitlab",
35 number: 42,
36 title: "Add GitLab provider",
37 url: "https://gitlab.com/pingdotgg/t3code/-/merge_requests/42",
38 baseRefName: "main",
39 headRefName: "feature/source-control",
40 state: "open",
41 updatedAt: Option.none(),
42 isCrossRepository: true,
43 headRepositoryNameWithOwner: "fork/t3code",
44 headRepositoryOwnerLogin: "fork",
45 });
46 }),
47);
48
49it.effect("lists GitLab MRs through provider-neutral input names", () =>
50 Effect.gen(function* () {
51 let listInput: Parameters<GitLabCliShape["listMergeRequests"]>[0] | null = null;
52 const provider = yield* makeProvider({
53 listMergeRequests: (input) => {
54 listInput = input;
55 return Effect.succeed([]);
56 },
57 });
58
59 yield* provider.listChangeRequests({
60 cwd: "/repo",
61 headSelector: "feature/provider",
62 state: "all",
63 limit: 10,
64 });
65
66 assert.deepStrictEqual(listInput, {
67 cwd: "/repo",
68 headSelector: "feature/provider",
69 state: "all",
70 limit: 10,
71 });
72 }),
73);
74
75it.effect("creates GitLab MRs through provider-neutral input names", () =>
76 Effect.gen(function* () {
77 let createInput: Parameters<GitLabCliShape["createMergeRequest"]>[0] | null = null;
78 const provider = yield* makeProvider({
79 createMergeRequest: (input) => {
80 createInput = input;
81 return Effect.void;
82 },
83 });
84
85 yield* provider.createChangeRequest({
86 cwd: "/repo",
87 baseRefName: "main",
88 headSelector: "owner:feature/provider",
89 title: "Provider MR",
90 bodyFile: "/tmp/body.md",
91 });
92
93 assert.deepStrictEqual(createInput, {
94 cwd: "/repo",
95 baseBranch: "main",
96 headSelector: "owner:feature/provider",
97 source: {
98 owner: "owner",
99 refName: "feature/provider",
100 },
101 title: "Provider MR",
102 bodyFile: "/tmp/body.md",
103 });
104 }),
105);