67 lines
1.8 KiB
TypeScript
67 lines
1.8 KiB
TypeScript
import { beforeEach, describe, expect, it } from "bun:test"
|
|
import { getNewMessages, resetMessageCursor } from "./session-cursor"
|
|
|
|
describe("getNewMessages", () => {
|
|
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
|
|
const messages = [buildMessage("m1", 1), buildMessage("m2", 2)]
|
|
|
|
// #when
|
|
const first = getNewMessages(sessionID, messages)
|
|
const second = getNewMessages(sessionID, messages)
|
|
|
|
// #then
|
|
expect(first).toEqual(messages)
|
|
expect(second).toEqual([])
|
|
})
|
|
|
|
it("returns only new messages after cursor advances", () => {
|
|
// #given
|
|
const messages = [buildMessage("m1", 1), buildMessage("m2", 2)]
|
|
getNewMessages(sessionID, messages)
|
|
const extended = [...messages, buildMessage("m3", 3)]
|
|
|
|
// #when
|
|
const next = getNewMessages(sessionID, extended)
|
|
|
|
// #then
|
|
expect(next).toEqual([extended[2]])
|
|
})
|
|
|
|
it("resets when message history shrinks", () => {
|
|
// #given
|
|
const messages = [buildMessage("m1", 1), buildMessage("m2", 2)]
|
|
getNewMessages(sessionID, messages)
|
|
const shorter = [buildMessage("n1", 1)]
|
|
|
|
// #when
|
|
const next = getNewMessages(sessionID, shorter)
|
|
|
|
// #then
|
|
expect(next).toEqual(shorter)
|
|
})
|
|
|
|
it("returns all messages when last key is missing", () => {
|
|
// #given
|
|
const messages = [buildMessage("m1", 1), buildMessage("m2", 2)]
|
|
getNewMessages(sessionID, messages)
|
|
const replaced = [buildMessage("n1", 1), buildMessage("n2", 2)]
|
|
|
|
// #when
|
|
const next = getNewMessages(sessionID, replaced)
|
|
|
|
// #then
|
|
expect(next).toEqual(replaced)
|
|
})
|
|
})
|