g1t/apps/sudo/app/lib/invites.test.ts

80 lines3,793 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.

Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look1import assert from "node:assert/strict";
2import { test } from "node:test";
3
status.g1t.sh with incident management, invites that land you in the workspace, settings as pages, usage without quotas4import {
5 INVITES_DONE,
6 MAX_BULK,
7 doneMessage,
8 invitesHref,
9 parseGrant,
10 parseIds,
11 parseMintEmail,
12 parseNote,
13 parseTab,
14 parseWaitlistStatus,
15} from "./invites.ts";
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look16
17const form = (fields: Record<string, string>) => ({ get: (name: string) => fields[name] ?? null });
18
19test("the page opens on the waitlist, and each tab has an address", () => {
20 assert.equal(parseTab(null), "waitlist");
21 assert.equal(parseTab("tree"), "tree");
22 assert.equal(parseTab("nope"), "waitlist");
23 assert.equal(invitesHref("invites", { q: "g1t-k7m2", empty: "" }), "/invites?tab=invites&q=g1t-k7m2");
24 assert.equal(parseWaitlistStatus(null), "waiting");
25 assert.equal(parseWaitlistStatus("all"), "all");
26 assert.equal(parseWaitlistStatus("dismissed"), "dismissed");
27});
28
29test("a grant names who, how many and why", () => {
30 assert.deepEqual(parseGrant(form({ target: "user", name: "@Ada", amount: "10", note: "Launch partner" })), {
31 ok: true,
32 value: { target: "user", name: "ada", amount: 10, note: "Launch partner" },
33 });
34 assert.deepEqual(parseGrant(form({ target: "workspace", name: "acme", amount: "-5", note: "Abuse" })), {
35 ok: true,
36 value: { target: "workspace", name: "acme", amount: -5, note: "Abuse" },
37 });
38 assert.equal(parseGrant(form({ target: "team", name: "acme", amount: "5", note: "why" })).ok, false);
39 assert.equal(parseGrant(form({ target: "user", name: "not a name", amount: "5", note: "why" })).ok, false);
40 assert.equal(parseGrant(form({ target: "user", name: "ada", amount: "0", note: "why" })).ok, false);
41 assert.equal(parseGrant(form({ target: "user", name: "ada", amount: "1.5", note: "why" })).ok, false);
42 assert.equal(parseGrant(form({ target: "user", name: "ada", amount: "5000", note: "why" })).ok, false);
43 assert.equal(parseGrant(form({ target: "user", name: "ada", amount: "5", note: "" })).ok, false);
44});
45
46test("a minted invite is for one address, or for anyone", () => {
47 assert.deepEqual(parseMintEmail(""), { ok: true, value: null });
48 assert.deepEqual(parseMintEmail(" Ada@Example.com "), { ok: true, value: "ada@example.com" });
49 assert.equal(parseMintEmail("ada@").ok, false);
50});
51
52test("every outcome has words", () => {
53 for (const key of ["approved", "dismissed", "revoked", "granted"]) assert.ok(INVITES_DONE[key]);
54});
status.g1t.sh with incident management, invites that land you in the workspace, settings as pages, usage without quotas55
56test("several requests are decided at once, each once", () => {
57 const ticked = (ids: string[]) => ({ getAll: (name: string) => (name === "ids" ? ids : []) });
58 assert.deepEqual(parseIds(ticked(["wl_01jb2k", "wl_01jb2m", "wl_01jb2k"])), { ok: true, value: ["wl_01jb2k", "wl_01jb2m"] });
59 assert.equal(parseIds(ticked([])).ok, false);
60 assert.equal(parseIds(ticked(["inv_01jb2k", "wl_<script>"])).ok, false);
61 const many = Array.from({ length: MAX_BULK + 1 }, (_, n) => `wl_${n.toString(36)}`);
62 assert.equal(parseIds(ticked(many)).ok, false);
63 assert.equal(parseIds(ticked(many.slice(0, MAX_BULK))).ok, true);
64});
65
66test("an approval's note is optional and short", () => {
67 assert.deepEqual(parseNote(" Welcome aboard. "), { ok: true, value: "Welcome aboard." });
68 assert.deepEqual(parseNote(""), { ok: true, value: null });
69 assert.deepEqual(parseNote(null), { ok: true, value: null });
70 assert.equal(parseNote("x".repeat(501)).ok, false);
71});
72
73test("the flash says how many were decided", () => {
74 assert.equal(doneMessage("approved", "3"), "Approved 3 requests. Each invite is on its way.");
75 assert.equal(doneMessage("dismissed", "2"), "Dismissed 2 requests.");
76 assert.equal(doneMessage("approved", null), INVITES_DONE.approved);
77 assert.equal(doneMessage("approved", "1"), INVITES_DONE.approved);
78 assert.equal(doneMessage("nope", "4"), null);
79 assert.equal(doneMessage(null, null), null);
80});