Watch
0
0
Fork
You've already forked hyperhive
0
hyperhive/frontend/packages/swarm-ui/test/alerts.test.mjs
iris f0a6d6c042 swarm-ui: add a button to the alerts page that shows the pending, no-data and error instances
The page opens on the firing ones. The button lists every instance again,
with the state filter and the tones back, so the table's filtering is
visible. The saved-filters key goes back to its original name, since the
state column is a filter again.
2026-10-18 13:29:52 +02:00

89 lines
2.5 KiB
JavaScript

// Which alert instances the alerts page lists. Run by `npm test`, which Node
// runs with its built-in test runner and type stripping, so the `.ts` module
// is imported as it is.
import assert from "node:assert/strict";
import { test } from "node:test";
import {
activeSinceMs,
alertKey,
firingAlerts,
listedAlerts,
} from "../src/pages/alerts.ts";
const alert = (name, state, extra = {}) => ({
name,
state,
active_at: null,
summary: null,
labels: { instance: name },
...extra,
});
test("only instances in the Alerting state are listed", () => {
const all = [
alert("a", "Alerting"),
alert("b", "Pending"),
alert("c", "NoData"),
alert("d", "Error"),
alert("e", "Alerting"),
];
assert.deepEqual(
firingAlerts(all).map((a) => a.name),
["a", "e"],
);
});
test("asking for the rest lists every instance, in order", () => {
const all = [
alert("a", "Pending"),
alert("b", "Alerting"),
alert("c", "Error"),
];
assert.deepEqual(
listedAlerts(all, true).map((a) => a.name),
["a", "b", "c"],
);
assert.deepEqual(
listedAlerts(all, false).map((a) => a.name),
["b"],
);
});
test("nothing firing leaves the list empty, and the input is not changed", () => {
const all = [alert("a", "Pending"), alert("b", "Error")];
assert.deepEqual(firingAlerts(all), []);
assert.equal(all.length, 2);
assert.deepEqual(firingAlerts([]), []);
});
test("the state match is exact, so an unknown or lower-case state is left out", () => {
assert.deepEqual(firingAlerts([alert("a", "alerting"), alert("b", "")]), []);
});
test("an instance that never became active has no active-since time", () => {
assert.equal(activeSinceMs(alert("a", "Alerting")), null);
assert.equal(
activeSinceMs(
alert("a", "Alerting", { active_at: "0001-01-01T00:00:00Z" }),
),
null,
);
assert.equal(
activeSinceMs(alert("a", "Alerting", { active_at: "not a date" })),
null,
);
assert.equal(
activeSinceMs(
alert("a", "Alerting", { active_at: "2026-10-18T08:00:00Z" }),
),
Date.parse("2026-10-18T08:00:00Z"),
);
});
test("instances of one rule get different keys, whatever the label order", () => {
const a = alert("r", "Alerting", { labels: { x: "1", y: "2" } });
const b = alert("r", "Alerting", { labels: { y: "2", x: "1" } });
const c = alert("r", "Alerting", { labels: { x: "1", y: "3" } });
assert.equal(alertKey(a), alertKey(b));
assert.notEqual(alertKey(a), alertKey(c));
});