Open History to see the last commit
1import { expect, it } from "@effect/vitest";
2import * as Effect from "effect/Effect";
3import * as Schema from "effect/Schema";
4
5import { repositoryNameFromRemoteUrl } from "./ForgejoSourceControlProvider.ts";
6import { ForgejoPullRequestSchema, toForgejoChangeRequest } from "./forgejoPullRequests.ts";
7
8const decodeForgejoPullRequest = Schema.decodeEffect(ForgejoPullRequestSchema);
9
10it.effect("names a mounted server's heads by owner and repository, apart from forks", () =>
11 Effect.gen(function* () {
12 for (const owner of ["maria", "reviewer"]) {
13 const changeRequest = toForgejoChangeRequest(
14 yield* decodeForgejoPullRequest({
15 number: 42,
16 title: "Greeting",
17 html_url: "https://forgejo.example/forgejo/maria/project/pulls/42",
18 state: "open",
19 merged: false,
20 base: {
21 ref: "main",
22 sha: "base",
23 repo: { full_name: "maria/project", owner: { login: "maria" } },
24 },
25 head: {
26 ref: "greeting",
27 sha: "head",
28 repo: { full_name: `${owner}/project`, owner: { login: owner } },
29 },
30 }),
31 );
32 expect(changeRequest).toMatchObject({
33 headRefName: "greeting",
34 isCrossRepository: owner !== "maria",
35 headRepositoryNameWithOwner: `${owner}/project`,
36 headRepositoryOwnerLogin: owner,
37 });
38 expect(
39 repositoryNameFromRemoteUrl(`https://forgejo.example/forgejo/${owner}/project.git`),
40 ).toBe(`${owner}/project`);
41 }
42 expect(repositoryNameFromRemoteUrl("git@forgejo.example:maria/project.git")).toBe(
43 "maria/project",
44 );
45 }),
46);