Watch
0
0
Fork
You've already forked hyperhive
0
hyperhive/frontend/packages/swarm-ui/test/issue-report-repo.test.mjs
iris f6acc1e976 swarm-ui: keep the issue report's table, errors and repo filter consistent
A failed report dropped its error under the previous repo's rows, the
repo list and the report shared one error slot, a remembered repo that
the list lacked left the select on all repos, and the report URL did not
encode the repo path. Each request now has its own error, a failed report
clears the rows, the remembered repo keeps an option, and the path parts
are encoded.
2026-10-21 22:58:51 +02:00

55 lines
1.5 KiB
JavaScript

import { test } from "node:test";
import assert from "node:assert/strict";
import {
ALL_REPOS,
reportUrl,
repoOptions,
} from "../src/pages/issue-report-repo.ts";
test("reportUrl: no repo means the combined report", () => {
assert.equal(reportUrl(ALL_REPOS), "/api/issue-report");
});
test("reportUrl: a filter without a slash is not a repo", () => {
assert.equal(reportUrl("nope"), "/api/issue-report");
});
test("reportUrl: org and name become two path segments", () => {
assert.equal(
reportUrl("hyperhive/hyperhive"),
"/api/repos/hyperhive/hyperhive/issue-report",
);
});
test("reportUrl: reserved characters in a name are encoded", () => {
assert.equal(
reportUrl("org/a?b#c%d"),
"/api/repos/org/a%3Fb%23c%25d/issue-report",
);
});
test("repoOptions: all repos comes first, then the list", () => {
assert.deepEqual(repoOptions(["a/x", "b/y"], ALL_REPOS), [
{ value: "", label: "all repos" },
{ value: "a/x", label: "a/x" },
{ value: "b/y", label: "b/y" },
]);
});
test("repoOptions: a listed selection adds nothing", () => {
assert.equal(repoOptions(["a/x"], "a/x").length, 2);
});
test("repoOptions: a remembered repo keeps an option before the list loads", () => {
assert.deepEqual(repoOptions(null, "a/x"), [
{ value: "", label: "all repos" },
{ value: "a/x", label: "a/x" },
]);
});
test("repoOptions: a remembered repo missing from the list says why", () => {
assert.deepEqual(repoOptions(["b/y"], "a/x").at(-1), {
value: "a/x",
label: "a/x (no open issues)",
});
});