Files
getagentseal--codeburn/tests/parser-skip-line.test.ts
T
2026-07-13 12:26:02 +08:00

87 lines
3.5 KiB
TypeScript

import { describe, it, expect } from 'vitest'
import { shouldSkipLine } from '../src/parser.js'
const threshold = '2026-04-01T00:00:00.000Z'
function makeLine(type: string, timestamp: string, payloadSize = 0): string {
const payload = payloadSize > 0 ? `,"content":"${'x'.repeat(payloadSize)}"` : ''
return `{"type":"${type}","sessionId":"s1","timestamp":"${timestamp}"${payload}}`
}
function makeLineWithLongCwd(type: string, timestamp: string, cwdLength: number): string {
const cwd = '/projects/' + 'a'.repeat(cwdLength)
return `{"type":"${type}","sessionId":"s1","cwd":"${cwd}","timestamp":"${timestamp}","message":{"role":"user","content":"hi"}}`
}
describe('shouldSkipLine', () => {
it('skips old user lines', () => {
expect(shouldSkipLine(makeLine('user', '2026-03-01T10:00:00Z'), threshold)).toBe(true)
})
it('skips old assistant lines', () => {
expect(shouldSkipLine(makeLine('assistant', '2026-03-15T10:00:00Z'), threshold)).toBe(true)
})
it('does not skip in-range user lines', () => {
expect(shouldSkipLine(makeLine('user', '2026-04-05T10:00:00Z'), threshold)).toBe(false)
})
it('does not skip in-range assistant lines', () => {
expect(shouldSkipLine(makeLine('assistant', '2026-04-10T10:00:00Z'), threshold)).toBe(false)
})
it('never skips attachment lines regardless of timestamp', () => {
expect(shouldSkipLine(makeLine('attachment', '2026-01-01T00:00:00Z'), threshold)).toBe(false)
})
it('never skips system lines regardless of timestamp', () => {
expect(shouldSkipLine(makeLine('system', '2026-01-01T00:00:00Z'), threshold)).toBe(false)
})
it('never skips summary lines regardless of timestamp', () => {
expect(shouldSkipLine(makeLine('summary', '2026-01-01T00:00:00Z'), threshold)).toBe(false)
})
it('does not skip lines with no timestamp field', () => {
expect(shouldSkipLine('{"type":"user","sessionId":"s1"}', threshold)).toBe(false)
})
it('does not skip lines with unparseable timestamp', () => {
expect(shouldSkipLine('{"type":"user","timestamp":"bad"}', threshold)).toBe(false)
})
it('does not skip malformed JSON', () => {
expect(shouldSkipLine('not json at all', threshold)).toBe(false)
})
it('only reads top-level type and timestamp fields', () => {
const line = '{"message":{"type":"assistant","timestamp":"2026-03-01T10:00:00Z"},"type":"user","timestamp":"2026-04-05T10:00:00Z"}'
expect(shouldSkipLine(line, threshold)).toBe(false)
})
it('handles timestamp pushed past 200 chars by long cwd', () => {
const line = makeLineWithLongCwd('user', '2026-03-01T10:00:00Z', 300)
expect(line.indexOf('"timestamp"')).toBeGreaterThan(200)
expect(shouldSkipLine(line, threshold)).toBe(true)
})
it('handles timestamp at the edge of the 2048 head window', () => {
const line = makeLineWithLongCwd('user', '2026-03-01T10:00:00Z', 1900)
expect(line.indexOf('"timestamp"')).toBeGreaterThan(1900)
expect(shouldSkipLine(line, threshold)).toBe(true)
})
it('returns false when timestamp is beyond the head window', () => {
const line = makeLineWithLongCwd('user', '2026-03-01T10:00:00Z', 2100)
expect(line.indexOf('"timestamp"')).toBeGreaterThan(2048)
expect(shouldSkipLine(line, threshold)).toBe(false)
})
it('skips old assistant line with large payload without parsing it', () => {
const line = makeLine('assistant', '2026-02-01T10:00:00Z', 50_000_000)
expect(line.length).toBeGreaterThan(50_000_000)
expect(shouldSkipLine(line, threshold)).toBe(true)
})
})