import { describe, expect, it } from 'vitest'
import { clampLimit, decodeCursor, encodeCursor, InvalidCursorError } from './inbox-cursor.js'

describe('inbox-cursor', () => {
  it('round-trips a keyset', () => {
    const c = encodeCursor({ createdAtMs: 1718800000000, seq: 42 })
    expect(decodeCursor(c)).toEqual({ createdAtMs: 1718800000000, seq: 42 })
  })
  it('throws typed InvalidCursorError on garbage (never a raw throw)', () => {
    expect(() => decodeCursor('@@@not-base64@@@')).toThrow(InvalidCursorError)
    expect(() => decodeCursor(encodeCursor({ createdAtMs: 1, seq: 2 }).slice(0, 3))).toThrow(InvalidCursorError)
  })
  it('clampLimit: undefined/≤0/non-finite → default; huge → max; never throws', () => {
    expect(clampLimit(undefined)).toBe(20)
    expect(clampLimit(0)).toBe(20)
    expect(clampLimit(-5)).toBe(20)
    expect(clampLimit(99999)).toBe(200)
    expect(clampLimit(15)).toBe(15)
  })
})
