Skip to content

g1t/apps/web/app/lib/mention.test.ts

56 lines2,625 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.

Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API1import assert from "node:assert/strict";
2import { test } from "node:test";
3
Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar4import { mentionSuggestions, partialMention } from "./mention.ts";
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API5
g1t is one name: its agent's work, commits and comments show as @g1t, and nobody can claim g1t or g1t-agent6test("an @ that could become @g1t is offered", () => {
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API7 assert.equal(partialMention("@", 1), 0);
8 assert.equal(partialMention("thanks @g1", 10), 7);
g1t is one name: its agent's work, commits and comments show as @g1t, and nobody can claim g1t or g1t-agent9 assert.equal(partialMention("(@G1", 4), 1);
10 assert.equal(partialMention("line\n@g", 7), 5);
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API11});
12
13test("anything else is not", () => {
14 // Already complete.
g1t is one name: its agent's work, commits and comments show as @g1t, and nobody can claim g1t or g1t-agent15 assert.equal(partialMention("@g1t", 4), null);
16 assert.equal(partialMention("@G1T", 4), null);
17 // Longer names that start with it are other names.
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API18 assert.equal(partialMention("@g1t-agent", 10), null);
g1t is one name: its agent's work, commits and comments show as @g1t, and nobody can claim g1t or g1t-agent19 assert.equal(partialMention("@g1t-a", 6), null);
20 assert.equal(partialMention("@g1t/g1t", 8), null);
21 assert.equal(partialMention("@g1tx", 5), null);
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API22 // Another name.
23 assert.equal(partialMention("@ana", 4), null);
24 // An email address.
25 assert.equal(partialMention("me@g1", 5), null);
26 // The caret is not at the end of it.
27 assert.equal(partialMention("@g1 later", 9), null);
28});
Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar29
30const TEAMS = ["@acme/backend", "@acme/backend-oncall", "@acme/web", "@acme/design", "@acme/docs", "@acme/data"];
31
32test("@g1t is offered with no teams, as before", () => {
33 assert.deepEqual(mentionSuggestions("thanks @g1", 10), { start: 7, options: ["@g1t"] });
34 assert.deepEqual(mentionSuggestions("@", 1), { start: 0, options: ["@g1t"] });
35 assert.equal(mentionSuggestions("@g1t", 4), null);
36 assert.equal(mentionSuggestions("me@g1", 5), null);
37 assert.equal(mentionSuggestions("@ana", 4), null);
38 assert.equal(mentionSuggestions("@g1 later", 9), null);
39});
40
41test("teams complete from the workspace or from their own name", () => {
42 assert.deepEqual(mentionSuggestions("cc @acme/b", 10, TEAMS), { start: 3, options: ["@acme/backend", "@acme/backend-oncall"] });
43 assert.deepEqual(mentionSuggestions("@back", 5, TEAMS), { start: 0, options: ["@acme/backend", "@acme/backend-oncall"] });
44 assert.deepEqual(mentionSuggestions("(@ACME/W", 8, TEAMS), { start: 1, options: ["@acme/web"] });
45 // Handles given without their @ work the same.
46 assert.deepEqual(mentionSuggestions("@we", 3, ["acme/web"]), { start: 0, options: ["@acme/web"] });
47});
48
49test("at most five, @g1t first, and nothing once one is typed in full", () => {
50 const all = mentionSuggestions("@", 1, TEAMS);
51 assert.equal(all?.options.length, 5);
52 assert.equal(all?.options[0], "@g1t");
53 assert.equal(mentionSuggestions("@acme/web", 9, TEAMS), null);
54 assert.equal(mentionSuggestions("@acme/x", 7, TEAMS), null);
55 assert.equal(mentionSuggestions("@acme/web later", 15, TEAMS), null);
56});