


























11// Status summary tests cover aggregate status text for channels, sessions, tasks, and audit findings.
22import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
33import type { TaskAuditFinding } from "../tasks/task-registry.audit.js";
4-import type { TaskRegistrySummary } from "../tasks/task-registry.types.js";
4+import type { TaskRecord, TaskRegistrySummary } from "../tasks/task-registry.types.js";
5566const statusSummaryMocks = vi.hoisted(() => ({
77hasConfiguredChannelsForReadOnlyScope: vi.fn(() => true),
@@ -35,7 +35,11 @@ const statusSummaryMocks = vi.hoisted(() => ({
3535cron: 0,
3636},
3737} as TaskRegistrySummary,
38-getInspectableTaskRegistrySummary: vi.fn(() => statusSummaryMocks.taskRegistrySummary),
38+inspectableTasks: [] as TaskRecord[],
39+reconcileInspectableTasks: vi.fn(() => statusSummaryMocks.inspectableTasks),
40+getInspectableTaskRegistrySummary: vi.fn(
41+(_tasks?: TaskRecord[]) => statusSummaryMocks.taskRegistrySummary,
42+),
3943taskAuditFindings: [
4044{
4145severity: "warn",
@@ -55,7 +59,9 @@ const statusSummaryMocks = vi.hoisted(() => ({
5559},
5660},
5761] as TaskAuditFinding[],
58-getInspectableTaskAuditFindings: vi.fn(() => statusSummaryMocks.taskAuditFindings),
62+getInspectableTaskAuditFindings: vi.fn(
63+(_tasks?: TaskRecord[]) => statusSummaryMocks.taskAuditFindings,
64+),
5965}));
60666167vi.mock("../plugins/channel-plugin-ids.js", () => ({
@@ -142,6 +148,7 @@ vi.mock("../infra/system-events.js", () => ({
142148143149vi.mock("../tasks/task-registry.maintenance.js", () => ({
144150configureTaskRegistryMaintenance: statusSummaryMocks.configureTaskRegistryMaintenance,
151+reconcileInspectableTasks: statusSummaryMocks.reconcileInspectableTasks,
145152getInspectableTaskRegistrySummary: statusSummaryMocks.getInspectableTaskRegistrySummary,
146153getInspectableTaskAuditFindings: statusSummaryMocks.getInspectableTaskAuditFindings,
147154}));
@@ -204,6 +211,7 @@ describe("getStatusSummary", () => {
204211cron: 0,
205212},
206213};
214+statusSummaryMocks.inspectableTasks = [];
207215statusSummaryMocks.taskAuditFindings = [
208216{
209217severity: "warn",
@@ -252,6 +260,21 @@ describe("getStatusSummary", () => {
252260expect(summary.taskAudit.warnings).toBe(1);
253261});
254262263+it("reuses one reconciled task snapshot for task summaries and audit findings", async () => {
264+const inspectableTasks: TaskRecord[] = [];
265+statusSummaryMocks.inspectableTasks = inspectableTasks;
266+267+await getStatusSummary();
268+269+expect(statusSummaryMocks.reconcileInspectableTasks).toHaveBeenCalledTimes(1);
270+expect(statusSummaryMocks.getInspectableTaskRegistrySummary).toHaveBeenCalledWith(
271+inspectableTasks,
272+);
273+expect(statusSummaryMocks.getInspectableTaskAuditFindings).toHaveBeenCalledWith(
274+inspectableTasks,
275+);
276+});
277+255278it("keeps retained lost tasks out of default status audit counts", async () => {
256279const cleanupAfter = Date.now() + 60_000;
257280statusSummaryMocks.taskRegistrySummary = {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。