Skip to content
46 linesCodeBlameRaw
1import assert from "node:assert/strict";
2import { test } from "node:test";
3
4import type { G1tEvent } from "../../../packages/contracts/src/events.ts";
5import { welcomeFor, welcomeMessageId } from "./welcome.ts";
6
7const joined = (data: Record<string, unknown>, type = "workspace.member_joined") =>
8 ({ type, data }) as unknown as Pick<G1tEvent, "type" | "data">;
9
10const ada = { workspaceId: "wsp_1", workspace: "Acme", userId: "usr_ada", username: "ada", role: "member" };
11
12test("a person who accepted an invitation or used an invite code is welcomed", () => {
13 assert.deepEqual(welcomeFor(joined({ ...ada, how: "invitation" })), {
14 workspace_id: "wsp_1",
15 workspace: "acme",
16 user_id: "usr_ada",
17 username: "ada",
18 });
19 assert.deepEqual(welcomeFor(joined({ ...ada, how: "joined", role: "owner" }))?.username, "ada");
20});
21
22test("the workspace's creator gets no welcome, and nor does anyone an event leaves unnamed", () => {
23 assert.equal(welcomeFor(joined({ ...ada, how: "created", role: "owner" })), null, "they made it");
24 assert.equal(welcomeFor(joined({ ...ada })), null, "no door named");
25 assert.equal(welcomeFor(joined({ ...ada, how: "added" })), null, "a door this version doesn't know");
26 assert.equal(welcomeFor(joined({ ...ada, how: "invitation", userId: "" })), null);
27 assert.equal(welcomeFor(joined({ ...ada, how: "invitation", workspace: " " })), null);
28 assert.equal(welcomeFor(joined({ ...ada, how: "invitation", username: undefined })), null);
29 assert.equal(welcomeFor(joined({ ...ada, how: "invitation" }, "team.member_added")), null, "a team is not the workspace");
30 assert.equal(welcomeFor(joined({ ...ada, how: "invitation" }, "workspace.updated")), null);
31 assert.equal(welcomeFor(null), null);
32 assert.equal(welcomeFor({ type: "workspace.member_joined", data: undefined } as unknown as Pick<G1tEvent, "type" | "data">), null);
33});
34
35test("a welcome is claimed under one id per person per workspace, which names no message in chat", () => {
36 assert.equal(welcomeMessageId("wsp_1", "usr_ada"), "welcome:wsp_1:usr_ada");
37 // The same event twice, or a second door into the same workspace, is the same claim.
38 const first = welcomeFor(joined({ ...ada, how: "invitation" }))!;
39 const again = welcomeFor(joined({ ...ada, how: "joined" }))!;
40 assert.equal(welcomeMessageId(first.workspace_id, first.user_id), welcomeMessageId(again.workspace_id, again.user_id));
41 // Another workspace, or another person, is its own welcome.
42 assert.notEqual(welcomeMessageId("wsp_2", "usr_ada"), welcomeMessageId("wsp_1", "usr_ada"));
43 assert.notEqual(welcomeMessageId("wsp_1", "usr_bo"), welcomeMessageId("wsp_1", "usr_ada"));
44 // The prefix surface.ts reads, so no reaction is tried on a message that does not exist.
45 assert.ok(welcomeMessageId("wsp_1", "usr_ada").startsWith("welcome:"));
46});