Skip to content

g1t/apps/web/app/lib/commit-checks.test.ts

65 lines2,906 bytesCodeBlame

Pick any line to see why it is the way it is: the commit, the pull request and issue it came from, and what the agent was thinking.

Merge checks: statuses and check runs on every commit1import assert from "node:assert/strict";
2import { test } from "node:test";
3
4import type { CheckItem } from "@g1t/contracts";
5
6import { checkDetail, checksHeadline, checksTally, detailsLink, took } from "./commit-checks.ts";
7
8const item = (over: Partial<CheckItem>): CheckItem => ({
9 kind: "check_run",
10 id: "cr_1",
11 name: "lint",
12 state: "success",
13 description: null,
14 detailsUrl: null,
15 url: null,
16 app: null,
17 startedAt: null,
18 completedAt: null,
19 ...over,
20});
21
22test("the headline says the worst of a commit's checks", () => {
23 assert.equal(checksHeadline({ state: "success" }), "All checks have passed");
24 assert.equal(checksHeadline({ state: "failure" }), "Some checks were not successful");
25 assert.equal(checksHeadline({ state: "pending" }), "Some checks haven't completed yet");
26});
27
28test("the tally counts each kind, worst first", () => {
29 assert.equal(checksTally({ total: 2, successful: 2, failed: 0, pending: 0, skipped: 0 }), "2 successful checks");
30 assert.equal(checksTally({ total: 1, successful: 1, failed: 0, pending: 0, skipped: 0 }), "1 successful check");
31 assert.equal(
32 checksTally({ total: 4, successful: 2, failed: 1, pending: 1, skipped: 0 }),
33 "1 failing, 1 in progress and 2 successful checks",
34 );
35});
36
37test("a check run says how it went and how long it took", () => {
38 const started = "2026-10-07T14:00:00Z";
39 assert.equal(took(started, "2026-10-07T14:00:25Z"), "25s");
40 assert.equal(took(started, "2026-10-07T14:01:12Z"), "1m 12s");
41 assert.equal(took(started, null), "");
42 assert.equal(checkDetail(item({ startedAt: started, completedAt: "2026-10-07T14:00:25Z" })), "Successful in 25s");
43 assert.equal(
44 checkDetail(item({ state: "failure", startedAt: started, completedAt: "2026-10-07T14:00:12Z", description: "2 problems" })),
45 "Failing after 12s — 2 problems",
46 );
47 assert.equal(checkDetail(item({ state: "pending" })), "Queued");
48 assert.equal(checkDetail(item({ state: "pending", startedAt: started })), "In progress");
49 assert.equal(checkDetail(item({ kind: "status", description: "Deployment has completed" })), "Deployment has completed");
50 assert.equal(checkDetail(item({ kind: "status", state: "skipped" })), "Skipped");
51});
52
53test("details go to g1t's own page first, and elsewhere apart", () => {
54 assert.deepEqual(detailsLink(item({ url: "/acme/web/checks/cr_1", detailsUrl: "https://ci.example.com/1" })), {
55 href: "/acme/web/checks/cr_1",
56 external: false,
57 });
58 assert.deepEqual(detailsLink(item({ detailsUrl: "https://g1t.sh/acme/web/actions/runs/run_1" })), {
59 href: "/acme/web/actions/runs/run_1",
60 external: false,
61 });
62 assert.deepEqual(detailsLink(item({ detailsUrl: "https://vercel.com/acme/web/1" })), { href: "https://vercel.com/acme/web/1", external: true });
63 assert.equal(detailsLink(item({ detailsUrl: "javascript:alert(1)" })), null);
64 assert.equal(detailsLink(item({})), null);
65});

This file's history is long; its oldest lines are credited to the oldest commit read.