19242b4152
- EventToastBridge checks notification_toast_level and notification_mute_categories - toast-rules.ts: event-to-category/severity mapping functions - Settings page: notification preferences section (toast level dropdown, mute checkboxes) - Settings API types extended with notification preference fields - 17 frontend tests (toast-rules + bridge) - Preference hierarchy: mute categories → toast level → show/hide Quality gates: vitest 17 passed, tsc clean, eslint clean
70 lines
2.1 KiB
TypeScript
70 lines
2.1 KiB
TypeScript
import { describe, it, expect } from "vitest";
|
|
import { mapEventToCategory, mapEventToSeverity } from "./toast-rules";
|
|
import type { InstanceEventPayload } from "../types/events";
|
|
|
|
function makeEvent(
|
|
event: string,
|
|
overrides?: Partial<InstanceEventPayload>,
|
|
): InstanceEventPayload {
|
|
return {
|
|
event,
|
|
instance_id: "i-1",
|
|
status: undefined,
|
|
message: undefined,
|
|
metadata: {},
|
|
timestamp: "2026-05-29T10:00:00Z",
|
|
correlation_id: "c1",
|
|
...overrides,
|
|
};
|
|
}
|
|
|
|
describe("mapEventToCategory", () => {
|
|
it('returns "instance" for instance.* events', () => {
|
|
expect(mapEventToCategory(makeEvent("instance.started"))).toBe("instance");
|
|
expect(mapEventToCategory(makeEvent("instance.error"))).toBe("instance");
|
|
});
|
|
|
|
it('returns "health" for health.* events', () => {
|
|
expect(mapEventToCategory(makeEvent("health.error"))).toBe("health");
|
|
});
|
|
|
|
it('returns "system" for unknown events', () => {
|
|
expect(mapEventToCategory(makeEvent("system.announcement"))).toBe("system");
|
|
});
|
|
});
|
|
|
|
describe("mapEventToSeverity", () => {
|
|
it("returns error for instance.error and health.error", () => {
|
|
expect(mapEventToSeverity(makeEvent("instance.error"))).toBe("error");
|
|
expect(mapEventToSeverity(makeEvent("health.error"))).toBe("error");
|
|
});
|
|
|
|
it("returns warning for unhealthy health changes", () => {
|
|
expect(
|
|
mapEventToSeverity(
|
|
makeEvent("instance.health_changed", { status: "unhealthy" }),
|
|
),
|
|
).toBe("warning");
|
|
});
|
|
|
|
it("returns success for recovery to running", () => {
|
|
expect(
|
|
mapEventToSeverity(
|
|
makeEvent("instance.health_changed", { status: "running" }),
|
|
),
|
|
).toBe("success");
|
|
});
|
|
|
|
it("returns info for lifecycle events", () => {
|
|
expect(mapEventToSeverity(makeEvent("instance.created"))).toBe("info");
|
|
expect(mapEventToSeverity(makeEvent("instance.started"))).toBe("info");
|
|
expect(mapEventToSeverity(makeEvent("instance.stopped"))).toBe("info");
|
|
expect(mapEventToSeverity(makeEvent("instance.restarted"))).toBe("info");
|
|
expect(mapEventToSeverity(makeEvent("instance.deleted"))).toBe("info");
|
|
});
|
|
|
|
it("returns info for unmapped events", () => {
|
|
expect(mapEventToSeverity(makeEvent("unknown.event"))).toBe("info");
|
|
});
|
|
});
|