import { describe, expect, it } from 'vitest'
import { clampLimit, decodeCursor } from './cursor.js'
import { runRecordStoreConformance } from './conformance.js'
import { InvalidCursorError } from './errors.js'
import { makeInMemoryRecordStore } from './in-memory.js'

describe('makeInMemoryRecordStore', () => {
  it('conforms', async () => {
    await runRecordStoreConformance(makeInMemoryRecordStore)
  })
})

describe('decodeCursor', () => {
  it('throws InvalidCursorError for garbage input', () => {
    expect(() => decodeCursor('garbage')).toThrow(InvalidCursorError)
  })
})

describe('clampLimit', () => {
  it('defaults non-finite and non-positive values', () => {
    expect(clampLimit(undefined)).toBe(50)
    expect(clampLimit(Number.NaN)).toBe(50)
    expect(clampLimit(0)).toBe(50)
    expect(clampLimit(-3)).toBe(50)
  })

  it('caps huge limits', () => {
    expect(clampLimit(9999)).toBe(200)
  })

  it('passes through sane limits', () => {
    expect(clampLimit(10)).toBe(10)
  })
})
