test: use sqlite locators in gateway session tests

This commit is contained in:
Peter Steinberger
2026-05-09 05:30:21 +01:00
parent c7b8bf3738
commit 1e23ff88be
4 changed files with 30 additions and 12 deletions

View File

@@ -1,6 +1,6 @@
import path from "node:path";
import { expect, test } from "vitest";
import { listSessionEntries, type SessionEntry } from "../config/sessions.js";
import { createSqliteSessionTranscriptLocator } from "../config/sessions/paths.js";
import { replaceSqliteSessionTranscriptEvents } from "../config/sessions/transcript-store.sqlite.js";
import { parseAgentSessionKey } from "../routing/session-key.js";
import { openOpenClawAgentDatabase } from "../state/openclaw-agent-db.js";
@@ -15,6 +15,10 @@ import {
const { createSessionStoreDir, openClient } = setupGatewaySessionsTestHarness();
function sqliteTranscript(sessionId: string, agentId = "main"): string {
return createSqliteSessionTranscriptLocator({ agentId, sessionId });
}
function seedTranscript(params: {
sessionId: string;
transcriptPath: string;
@@ -68,9 +72,9 @@ function seedRawSessionStore(store: Record<string, unknown>) {
}
test("sessions.preview returns transcript previews", async () => {
const { dir } = await createSessionStoreDir();
await createSessionStoreDir();
const sessionId = "sess-preview";
const transcriptPath = path.join(dir, `${sessionId}.jsonl`);
const transcriptPath = sqliteTranscript(sessionId);
const lines = createToolSummaryPreviewTranscriptLines(sessionId);
seedTranscriptLines(sessionId, transcriptPath, lines);
@@ -96,11 +100,11 @@ test("sessions.preview returns transcript previews", async () => {
});
test("sessions.resolve and mutators use canonical main key without cleaning legacy ghost keys", async () => {
const { dir } = await createSessionStoreDir();
await createSessionStoreDir();
testState.agentsConfig = { list: [{ id: "ops", default: true }] };
testState.sessionConfig = { mainKey: "work" };
const sessionId = "sess-alias-cleanup";
const transcriptPath = path.join(dir, `${sessionId}.jsonl`);
const transcriptPath = sqliteTranscript(sessionId, "ops");
seedTranscript({
sessionId,
transcriptPath,

View File

@@ -1,6 +1,6 @@
import path from "node:path";
import { expect, test, vi } from "vitest";
import { getSessionEntry } from "../config/sessions.js";
import { createSqliteSessionTranscriptLocator } from "../config/sessions/paths.js";
import {
loadSqliteSessionTranscriptEvents,
replaceSqliteSessionTranscriptEvents,
@@ -14,8 +14,12 @@ import {
const { createSessionFixtureDir, openClient } = setupGatewaySessionsTestHarness();
function sqliteTranscript(sessionId: string): string {
return createSqliteSessionTranscriptLocator({ agentId: "main", sessionId });
}
test("lists and patches session entries via sessions.* RPC", async () => {
const { dir } = await createSessionFixtureDir();
await createSessionFixtureDir();
const now = Date.now();
const recent = now - 30_000;
const stale = now - 15 * 60_000;
@@ -23,13 +27,13 @@ test("lists and patches session entries via sessions.* RPC", async () => {
replaceSqliteSessionTranscriptEvents({
agentId: "main",
sessionId: "sess-main",
transcriptPath: path.join(dir, "sess-main.jsonl"),
transcriptPath: sqliteTranscript("sess-main"),
events: Array.from({ length: 10 }, (_, idx) => ({ role: "user", content: `line ${idx}` })),
});
replaceSqliteSessionTranscriptEvents({
agentId: "main",
sessionId: "sess-group",
transcriptPath: path.join(dir, "sess-group.jsonl"),
transcriptPath: sqliteTranscript("sess-group"),
events: [{ role: "user", content: "group line 0" }],
});

View File

@@ -8,6 +8,7 @@ import {
} from "../agents/subagent-registry.test-helpers.js";
import type { OpenClawConfig } from "../config/config.js";
import type { SessionEntry } from "../config/sessions.js";
import { createSqliteSessionTranscriptLocator } from "../config/sessions/paths.js";
import { replaceSqliteSessionTranscriptEvents } from "../config/sessions/transcript-store.sqlite.js";
import { registerAgentRunContext, resetAgentRunContextForTest } from "../infra/agent-events.js";
import { closeOpenClawStateDatabaseForTest } from "../state/openclaw-state-db.js";
@@ -46,6 +47,10 @@ function createLegacyRuntimeStore(model: string): Record<string, SessionEntry> {
};
}
function sqliteTranscript(sessionId: string): string {
return createSqliteSessionTranscriptLocator({ agentId: "main", sessionId });
}
function withTranscriptStoreFixture<T>(params: {
prefix: string;
transcriptId: string;
@@ -64,7 +69,7 @@ function withTranscriptStoreFixture<T>(params: {
replaceSqliteSessionTranscriptEvents({
agentId: "main",
sessionId: params.transcriptId,
transcriptPath: path.join(tmpDir, `${params.transcriptId}.jsonl`),
transcriptPath: sqliteTranscript(params.transcriptId),
events: [
{ type: "session", version: 1, id: params.transcriptId },
{

View File

@@ -5,6 +5,7 @@ import { afterEach, describe, expect, test, vi } from "vitest";
import { resetConfigRuntimeState } from "../config/config.js";
import type { OpenClawConfig } from "../config/config.js";
import type { SessionEntry } from "../config/sessions.js";
import { createSqliteSessionTranscriptLocator } from "../config/sessions/paths.js";
import { replaceSqliteSessionTranscriptEvents } from "../config/sessions/transcript-store.sqlite.js";
import { createEmptyPluginRegistry } from "../plugins/registry-empty.js";
import { resetPluginRuntimeStateForTest, setActivePluginRegistry } from "../plugins/runtime.js";
@@ -78,6 +79,10 @@ function requireString(value: string | undefined, label: string): string {
return value;
}
function sqliteTranscript(sessionId: string): string {
return createSqliteSessionTranscriptLocator({ agentId: "main", sessionId });
}
describe("gateway session utils", () => {
afterEach(() => {
resetConfigRuntimeState();
@@ -887,7 +892,7 @@ describe("listSessionsFromStore selected model display", () => {
replaceSqliteSessionTranscriptEvents({
agentId: "main",
sessionId,
transcriptPath: path.join(tmpDir, `${sessionId}.jsonl`),
transcriptPath: sqliteTranscript(sessionId),
events: [
{ type: "session", version: 1, id: sessionId },
{ message: { role: "user", content: `title ${i}` } },
@@ -959,7 +964,7 @@ describe("listSessionsFromStore selected model display", () => {
replaceSqliteSessionTranscriptEvents({
agentId: "main",
sessionId,
transcriptPath: path.join(tmpDir, `${sessionId}.jsonl`),
transcriptPath: sqliteTranscript(sessionId),
events: [
{ type: "session", version: 1, id: sessionId },
{ message: { role: "user", content: `title ${i}` } },