Files
oh-my-opencode/src/shared/session-cursor.test.ts
T

67 lines
1.8 KiB
TypeScript
Raw Normal View History

2026-01-14 19:42:27 -05:00
import { beforeEach, describe, expect, it } from "bun:test"
import { consumeNewMessages, resetMessageCursor } from "./session-cursor"
2026-01-14 19:42:27 -05:00
describe("consumeNewMessages", () => {
2026-01-14 19:42:27 -05:00
const sessionID = "session-123"
const buildMessage = (id: string, created: number) => ({
info: { id, time: { created } },
})
beforeEach(() => {
resetMessageCursor(sessionID)
})
it("returns all messages on first read and none on repeat", () => {
// given
2026-01-14 19:42:27 -05:00
const messages = [buildMessage("m1", 1), buildMessage("m2", 2)]
// when
const first = consumeNewMessages(sessionID, messages)
const second = consumeNewMessages(sessionID, messages)
2026-01-14 19:42:27 -05:00
// then
2026-01-14 19:42:27 -05:00
expect(first).toEqual(messages)
expect(second).toEqual([])
})
it("returns only new messages after cursor advances", () => {
// given
2026-01-14 19:42:27 -05:00
const messages = [buildMessage("m1", 1), buildMessage("m2", 2)]
consumeNewMessages(sessionID, messages)
2026-01-14 19:42:27 -05:00
const extended = [...messages, buildMessage("m3", 3)]
// when
const next = consumeNewMessages(sessionID, extended)
2026-01-14 19:42:27 -05:00
// then
2026-01-14 19:42:27 -05:00
expect(next).toEqual([extended[2]])
})
it("resets when message history shrinks", () => {
// given
2026-01-14 19:42:27 -05:00
const messages = [buildMessage("m1", 1), buildMessage("m2", 2)]
consumeNewMessages(sessionID, messages)
2026-01-14 19:42:27 -05:00
const shorter = [buildMessage("n1", 1)]
// when
const next = consumeNewMessages(sessionID, shorter)
2026-01-14 19:42:27 -05:00
// then
2026-01-14 19:42:27 -05:00
expect(next).toEqual(shorter)
})
2026-01-14 19:58:56 -05:00
it("returns all messages when last key is missing", () => {
// given
2026-01-14 19:58:56 -05:00
const messages = [buildMessage("m1", 1), buildMessage("m2", 2)]
consumeNewMessages(sessionID, messages)
2026-01-14 19:58:56 -05:00
const replaced = [buildMessage("n1", 1), buildMessage("n2", 2)]
// when
const next = consumeNewMessages(sessionID, replaced)
2026-01-14 19:58:56 -05:00
// then
2026-01-14 19:58:56 -05:00
expect(next).toEqual(replaced)
})
2026-01-14 19:42:27 -05:00
})