mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-12 21:53:00 -06:00
test(core): remove session heartbeat test seams (#121913)
This commit is contained in:
committed by
GitHub
parent
a12e0decd6
commit
579c38dc68
@@ -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);
|
||||
},
|
||||
};
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user