test(core): remove session heartbeat test seams (#121913)

This commit is contained in:
Peter Steinberger
2026-08-11 00:55:04 -07:00
committed by GitHub
parent a12e0decd6
commit 579c38dc68
6 changed files with 37 additions and 48 deletions
-17
View File
@@ -1,17 +0,0 @@
import "./sessions.js";
type SessionsCommandTestApi = {
parseSessionsLimit(value: string | undefined): number;
};
function getTestApi(): SessionsCommandTestApi {
return (globalThis as Record<PropertyKey, unknown>)[
Symbol.for("openclaw.sessionsCommandTestApi")
] as SessionsCommandTestApi;
}
export const testing: SessionsCommandTestApi = {
parseSessionsLimit(value) {
return getTestApi().parseSessionsLimit(value);
},
};
+26 -3
View File
@@ -17,7 +17,6 @@ process.env.FORCE_COLOR = "0";
mockSessionsConfig();
import { sessionsCommand } from "./sessions.js";
import { testing } from "./sessions.test-support.js";
describe("sessionsCommand", () => {
beforeEach(() => {
@@ -341,8 +340,32 @@ describe("sessionsCommand", () => {
expect(main?.runtimePolicySessionKey).toBe("agent:main:telegram:default:direct:42");
});
it("uses a default JSON output limit of 100 sessions", () => {
expect(testing.parseSessionsLimit(undefined)).toBe(100);
it("uses a default JSON output limit of 100 sessions", async () => {
const entries = Object.fromEntries(
Array.from({ length: 101 }, (_, index) => [
`agent:main:session-${index}`,
{
sessionId: `session-${index}`,
updatedAt: Date.now() - index,
model: "test:opus",
},
]),
);
const store = await writeStore(entries, "sessions-default-limit");
const payload = await runSessionsJson<{
count?: number;
totalCount?: number;
limitApplied?: number | null;
hasMore?: boolean;
sessions?: Array<{ key: string }>;
}>(sessionsCommand, store);
expect(payload.count).toBe(100);
expect(payload.totalCount).toBe(101);
expect(payload.limitApplied).toBe(100);
expect(payload.hasMore).toBe(true);
expect(payload.sessions).toHaveLength(100);
});
it("honors explicit JSON output limits", async () => {
-9
View File
@@ -526,12 +526,3 @@ export async function sessionsCommand(
runtime.log(line.trimEnd());
}
}
const testing = {
parseSessionsLimit,
} as const;
if (process.env.VITEST || process.env.NODE_ENV === "test") {
(globalThis as Record<PropertyKey, unknown>)[Symbol.for("openclaw.sessionsCommandTestApi")] =
testing;
}
@@ -1,18 +1,21 @@
import { describe, expect, it } from "vitest";
import { testing } from "./heartbeat-runner.js";
import {
inferHeartbeatWakeSourceFromReason,
resolveHeartbeatWakePayloadFlags,
} from "./heartbeat-wake-policy.js";
describe("session-state heartbeat wakes", () => {
it("infers the source and marks the wake as payload-bearing", () => {
expect(testing.inferHeartbeatWakeSourceFromReason("session-state:agent:main:child")).toBe(
expect(inferHeartbeatWakeSourceFromReason("session-state:agent:main:child")).toBe(
"session-state",
);
expect(
testing.resolveHeartbeatWakePayloadFlags({
resolveHeartbeatWakePayloadFlags({
reason: "session-state:agent:main:child",
}),
).toMatchObject({ isWakePayload: true });
expect(
testing.resolveHeartbeatWakePayloadFlags({
resolveHeartbeatWakePayloadFlags({
source: "session-state",
}),
).toMatchObject({ isWakePayload: true });
@@ -27,7 +27,8 @@ import { closeOpenClawStateDatabaseForTest } from "../state/openclaw-state-db.js
import { stripTrailingHeartbeatNotifyFalse } from "./heartbeat-delivery-normalization.js";
import { getLastHeartbeatEvent, resetHeartbeatEventsForTest } from "./heartbeat-events.js";
import { claimHeartbeatOutcomeForRun } from "./heartbeat-outcome-store.js";
import { runHeartbeatOnce, testing, type HeartbeatDeps } from "./heartbeat-runner.js";
import { truncateHeartbeatPreview } from "./heartbeat-runner-prompt.js";
import { runHeartbeatOnce, type HeartbeatDeps } from "./heartbeat-runner.js";
import { installHeartbeatRunnerTestRuntime } from "./heartbeat-runner.test-harness.js";
import {
readSessionStoreForTest,
@@ -45,8 +46,8 @@ installHeartbeatRunnerTestRuntime();
describe("heartbeat event previews", () => {
it("keeps the 200-code-unit preview UTF-16 well-formed", () => {
expect(testing.truncateHeartbeatPreview(`${"x".repeat(199)}🚀tail`)).toBe("x".repeat(199));
expect(testing.truncateHeartbeatPreview(undefined)).toBeUndefined();
expect(truncateHeartbeatPreview(`${"x".repeat(199)}🚀tail`)).toBe("x".repeat(199));
expect(truncateHeartbeatPreview(undefined)).toBeUndefined();
});
});
-12
View File
@@ -1,10 +1,4 @@
// Runs heartbeat checks and emits status updates for configured agents.
import { truncateHeartbeatPreview } from "./heartbeat-runner-prompt.js";
import {
inferHeartbeatWakeSourceFromReason,
resolveHeartbeatWakePayloadFlags,
} from "./heartbeat-wake-policy.js";
export type { HeartbeatDeps } from "./heartbeat-runner-execution.js";
export {
resolveHeartbeatAgents,
@@ -22,9 +16,3 @@ export {
type HeartbeatSummary,
} from "./heartbeat-summary.js";
export { areHeartbeatsEnabled, setHeartbeatsEnabled } from "./heartbeat-wake.js";
export const testing = {
inferHeartbeatWakeSourceFromReason,
resolveHeartbeatWakePayloadFlags,
truncateHeartbeatPreview,
};