112 lines
3.2 KiB
TypeScript
112 lines
3.2 KiB
TypeScript
|
|
import { describe, test, expect, beforeEach } from "bun:test"
|
||
|
|
import {
|
||
|
|
storeToolMetadata,
|
||
|
|
consumeToolMetadata,
|
||
|
|
getPendingStoreSize,
|
||
|
|
clearPendingStore,
|
||
|
|
} from "./index"
|
||
|
|
|
||
|
|
describe("tool-metadata-store", () => {
|
||
|
|
beforeEach(() => {
|
||
|
|
clearPendingStore()
|
||
|
|
})
|
||
|
|
|
||
|
|
describe("storeToolMetadata", () => {
|
||
|
|
test("#given metadata with title and metadata, #when stored, #then store size increases", () => {
|
||
|
|
//#given
|
||
|
|
const sessionID = "ses_abc123"
|
||
|
|
const callID = "call_001"
|
||
|
|
const data = {
|
||
|
|
title: "Test Task",
|
||
|
|
metadata: { sessionId: "ses_child", agent: "oracle" },
|
||
|
|
}
|
||
|
|
|
||
|
|
//#when
|
||
|
|
storeToolMetadata(sessionID, callID, data)
|
||
|
|
|
||
|
|
//#then
|
||
|
|
expect(getPendingStoreSize()).toBe(1)
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
describe("consumeToolMetadata", () => {
|
||
|
|
test("#given stored metadata, #when consumed, #then returns the stored data", () => {
|
||
|
|
//#given
|
||
|
|
const sessionID = "ses_abc123"
|
||
|
|
const callID = "call_001"
|
||
|
|
const data = {
|
||
|
|
title: "My Task",
|
||
|
|
metadata: { sessionId: "ses_sub", run_in_background: true },
|
||
|
|
}
|
||
|
|
storeToolMetadata(sessionID, callID, data)
|
||
|
|
|
||
|
|
//#when
|
||
|
|
const result = consumeToolMetadata(sessionID, callID)
|
||
|
|
|
||
|
|
//#then
|
||
|
|
expect(result).toEqual(data)
|
||
|
|
})
|
||
|
|
|
||
|
|
test("#given stored metadata, #when consumed twice, #then second call returns undefined", () => {
|
||
|
|
//#given
|
||
|
|
const sessionID = "ses_abc123"
|
||
|
|
const callID = "call_001"
|
||
|
|
storeToolMetadata(sessionID, callID, { title: "Task" })
|
||
|
|
|
||
|
|
//#when
|
||
|
|
consumeToolMetadata(sessionID, callID)
|
||
|
|
const second = consumeToolMetadata(sessionID, callID)
|
||
|
|
|
||
|
|
//#then
|
||
|
|
expect(second).toBeUndefined()
|
||
|
|
expect(getPendingStoreSize()).toBe(0)
|
||
|
|
})
|
||
|
|
|
||
|
|
test("#given no stored metadata, #when consumed, #then returns undefined", () => {
|
||
|
|
//#given
|
||
|
|
const sessionID = "ses_nonexistent"
|
||
|
|
const callID = "call_999"
|
||
|
|
|
||
|
|
//#when
|
||
|
|
const result = consumeToolMetadata(sessionID, callID)
|
||
|
|
|
||
|
|
//#then
|
||
|
|
expect(result).toBeUndefined()
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
describe("isolation", () => {
|
||
|
|
test("#given multiple entries, #when consuming one, #then others remain", () => {
|
||
|
|
//#given
|
||
|
|
storeToolMetadata("ses_1", "call_a", { title: "Task A" })
|
||
|
|
storeToolMetadata("ses_1", "call_b", { title: "Task B" })
|
||
|
|
storeToolMetadata("ses_2", "call_a", { title: "Task C" })
|
||
|
|
|
||
|
|
//#when
|
||
|
|
const resultA = consumeToolMetadata("ses_1", "call_a")
|
||
|
|
|
||
|
|
//#then
|
||
|
|
expect(resultA?.title).toBe("Task A")
|
||
|
|
expect(getPendingStoreSize()).toBe(2)
|
||
|
|
expect(consumeToolMetadata("ses_1", "call_b")?.title).toBe("Task B")
|
||
|
|
expect(consumeToolMetadata("ses_2", "call_a")?.title).toBe("Task C")
|
||
|
|
expect(getPendingStoreSize()).toBe(0)
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
describe("overwrite", () => {
|
||
|
|
test("#given existing entry, #when stored again with same key, #then overwrites", () => {
|
||
|
|
//#given
|
||
|
|
storeToolMetadata("ses_1", "call_a", { title: "Old" })
|
||
|
|
|
||
|
|
//#when
|
||
|
|
storeToolMetadata("ses_1", "call_a", { title: "New", metadata: { updated: true } })
|
||
|
|
|
||
|
|
//#then
|
||
|
|
const result = consumeToolMetadata("ses_1", "call_a")
|
||
|
|
expect(result?.title).toBe("New")
|
||
|
|
expect(result?.metadata).toEqual({ updated: true })
|
||
|
|
})
|
||
|
|
})
|
||
|
|
})
|