Skip to content
Source
Sign inSign up
Open History to see the last commit

GitWorkflowService.test.ts

59 lines2.6 KB

1import { assert, it } from "@effect/vitest";
2import * as Effect from "effect/Effect";
3import * as Layer from "effect/Layer";
4​
5import * as NodeCrypto from "@effect/platform-node/NodeCrypto";
6import * as NodeServices from "@effect/platform-node/NodeServices";
7import * as FileSystem from "effect/FileSystem";
8​
9import * as ServerConfig from "../config.ts";
10import * as VcsProcess from "../vcs/VcsProcess.ts";
11import * as GitManager from "./GitManager.ts";
12import * as GitWorkflowService from "./GitWorkflowService.ts";
13import * as GitVcsDriver from "../vcs/GitVcsDriver.ts";
14import * as VcsDriverRegistry from "../vcs/VcsDriverRegistry.ts";
15​
16it.layer(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer))("GitWorkflowService", (it) => {
17 it.effect("finds a name among the refs of every namespace", () =>
18 Effect.gen(function* () {
19 const fileSystem = yield* FileSystem.FileSystem;
20 const cwd = yield* fileSystem.makeTempDirectoryScoped({ prefix: "t3-ref-named-" });
21 const workflow = yield* GitWorkflowService.GitWorkflowService;
22 const driver = yield* GitVcsDriver.GitVcsDriver;
23 for (const args of [
24 ["init", "-b", "main"],
25 ["-c", "user.email=t@t", "-c", "user.name=t", "commit", "--allow-empty", "-m", "init"],
26 ["update-ref", "refs/remotes/upstream/feature/topic", "HEAD"],
27 ["symbolic-ref", "refs/remotes/origin/alias", "refs/heads/main"],
28 ["update-ref", "refs/mirror/origin/mirrored", "HEAD"],
29 ]) {
30 yield* driver.execute({ operation: "test.setupRepo", cwd, args });
31 }
32 const found = yield* Effect.forEach(
33 ["main", "feature/topic", "alias", "mirrored", "t3/renamed", "feature/*"],
34 (refName) => workflow.hasRefNamed({ cwd, refName }),
35 );
36 assert.deepEqual(found, [true, true, true, true, false, false]);
37 }).pipe(
38 Effect.scoped,
39 Effect.provide(
40 GitWorkflowService.layer.pipe(
41 Layer.provide(
42 Layer.mock(VcsDriverRegistry.VcsDriverRegistry)({
43 resolve: () => Effect.succeed({ kind: "git" } as VcsDriverRegistry.VcsDriverHandle),
44 }),
45 ),
46 Layer.provide(Layer.mock(GitManager.GitManager)({})),
47 Layer.provideMerge(GitVcsDriver.layer),
48 Layer.provideMerge(VcsProcess.layer),
49 Layer.provideMerge(
50 ServerConfig.layerTest(process.cwd(), { prefix: "t3-ref-named-" }).pipe(
51 Layer.provide(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer)),
52 ),
53 ),
54 Layer.provideMerge(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer)),
55 ),
56 ),
57 ),
58 );
59});