swarm-ui: link a gitlab account to an agent
This commit is contained in:
parent
b7d8c0dfc0
commit
3e5b5b54a2
1 changed files with 240 additions and 56 deletions
73
frontend/packages/swarm-ui/test/account-api.test.mjs
Normal file
73
frontend/packages/swarm-ui/test/account-api.test.mjs
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
// The link / list / delete requests for forge and gitlab accounts, and the
|
||||
// client-side check before a link is sent. Run by `npm test` with Node's
|
||||
// type stripping.
|
||||
import assert from "node:assert/strict";
|
||||
import { test } from "node:test";
|
||||
import {
|
||||
checkLink,
|
||||
deleteUrl,
|
||||
linkBody,
|
||||
linkUrl,
|
||||
listUrl,
|
||||
} from "../src/agent/detail/account-api.ts";
|
||||
|
||||
test("a gitlab link PUTs to gitlab-accounts, a forge link to forge-accounts", () => {
|
||||
assert.equal(
|
||||
linkUrl("h1", "atlas", "gitlab", "gitlab-com"),
|
||||
"/api/hives/h1/agents/atlas/gitlab-accounts/gitlab-com",
|
||||
);
|
||||
assert.equal(
|
||||
linkUrl("h1", "atlas", "forge", "myforge"),
|
||||
"/api/hives/h1/agents/atlas/forge-accounts/myforge",
|
||||
);
|
||||
});
|
||||
|
||||
test("path segments are encoded", () => {
|
||||
assert.equal(
|
||||
linkUrl("a/b", "x y", "gitlab", "l?"),
|
||||
"/api/hives/a%2Fb/agents/x%20y/gitlab-accounts/l%3F",
|
||||
);
|
||||
});
|
||||
|
||||
test("the body carries the trimmed url and the token untouched", () => {
|
||||
assert.deepEqual(JSON.parse(linkBody(" https://gitlab.com ", " tok en ")), {
|
||||
url: "https://gitlab.com",
|
||||
token: " tok en ",
|
||||
});
|
||||
});
|
||||
|
||||
test("list and delete hit the linked-accounts and gitlab routes", () => {
|
||||
assert.equal(
|
||||
listUrl("h1", "atlas"),
|
||||
"/api/hives/h1/agents/atlas/linked-accounts",
|
||||
);
|
||||
assert.equal(
|
||||
deleteUrl("h1", "atlas", { kind: "gitlab", name: "gitlab-com" }),
|
||||
"/api/hives/h1/agents/atlas/gitlab-accounts/gitlab-com",
|
||||
);
|
||||
// Control: the other kinds keep their routes.
|
||||
assert.equal(
|
||||
deleteUrl("h1", "atlas", { kind: "forgejo", name: "f" }),
|
||||
"/api/hives/h1/agents/atlas/forge-accounts/f",
|
||||
);
|
||||
assert.equal(
|
||||
deleteUrl("h1", "atlas", { kind: "github", name: "x" }),
|
||||
"/api/hives/h1/agents/atlas/github-account",
|
||||
);
|
||||
});
|
||||
|
||||
test("checkLink accepts a good input and names what is wrong otherwise", () => {
|
||||
assert.equal(checkLink("gitlab-com", "https://gitlab.com", "t"), null);
|
||||
assert.equal(checkLink("a", " http://gl.lan:8443/x ", "t"), null);
|
||||
assert.match(checkLink("Bad", "https://gitlab.com", "t"), /label/);
|
||||
assert.match(checkLink("", "https://gitlab.com", "t"), /label/);
|
||||
assert.match(checkLink("a".repeat(64), "https://gitlab.com", "t"), /label/);
|
||||
assert.match(checkLink("a", "gitlab.com", "t"), /URL/);
|
||||
assert.match(checkLink("a", "ftp://gitlab.com", "t"), /URL/);
|
||||
assert.match(checkLink("a", "https://gitlab.com", ""), /token/);
|
||||
});
|
||||
|
||||
test("a message never contains the token", () => {
|
||||
const msg = checkLink("Bad", "nope", "s3cr3t-value");
|
||||
assert.ok(!String(msg).includes("s3cr3t-value"));
|
||||
});
|
||||
Loading…
Reference in a new issue