import { test } from '@japa/runner'
import { SegmentScanner, scanOverviewText } from '#lib/edge/scan'
import { segmentFromHeader } from '#lib/headers/index'
const priorities = { 'alt.binaries.boneless': 1, 'alt.binaries.test': 2 }
test.group('edge / scanOverviewText and SegmentScanner', () => {
test('reads the fields of overview lines, Xref without its name', ({ assert }) => {
const text =
'101\tShow - "a.mkv" yEnc (1/2)\tposter
\tMon, 05 Oct 2026 10:00:00 +0000\t\t\t700000\t5000\tXref: news.example alt.binaries.test:101\r\n' +
'102\tShow - "a.mkv" yEnc (2/2) 1234\tposter \tMon, 05 Oct 2026 10:00:01 +0000\t\t[\t1234\t10\tXref: news.example alt.binaries.test:102 alt.binaries.boneless:9\r\n'
const lines: string[][] = []
scanOverviewText(text, (...fields) => lines.push(fields.map(String)))
assert.deepEqual(lines, [
['101', 'Show - "a.mkv" yEnc (1/2)', 'poster ]', 'Mon, 05 Oct 2026 10:00:00 +0000', '', '700000', 'news.example alt.binaries.test:101'],
['102', 'Show - "a.mkv" yEnc (2/2) 1234', 'poster ', 'Mon, 05 Oct 2026 10:00:01 +0000', '', '1234', 'news.example alt.binaries.test:102 alt.binaries.boneless:9'],
])
})
test('the owner is the indexed group with the lowest priority in the Xref', ({ assert }) => {
const scanner = new SegmentScanner()
assert.equal(scanner.owner('news.example alt.binaries.test:5 alt.binaries.boneless:9', 'alt.binaries.test', priorities), 'alt.binaries.boneless')
assert.equal(scanner.owner('news.example alt.binaries.test:5 alt.binaries.other:9', 'alt.binaries.test', priorities), 'alt.binaries.test')
assert.equal(scanner.owner('news.example', 'alt.binaries.test', priorities), 'alt.binaries.test')
})
test('segments match segmentFromHeader, and share their file details', ({ assert }) => {
const scanner = new SegmentScanner()
const subject = (n: number) => `[03/10] - "Some.Release.part02.rar" yEnc (${n}/137) 51315352`
const xref = 'news.example alt.binaries.test:7'
const a = scanner.segment(7, subject(12), 'poster ', 'Mon, 05 Oct 2026 10:00:00 +0000', '', '700000', xref, 'alt.binaries.test')!
const b = scanner.segment(8, subject(13), 'poster ', 'Mon, 05 Oct 2026 10:00:00 +0000', '', '700000', xref, 'alt.binaries.test')!
const old = segmentFromHeader({ 'subject': subject(12), 'from': 'poster ', 'date': 'Mon, 05 Oct 2026 10:00:00 +0000', 'message-id': '', ':bytes': '700000', 'xref': xref }, 'alt.binaries.test', 7)!
assert.deepEqual([a.fileKey, a.number, a.totalParts, a.messageId, a.bytes, a.file.name, a.file.groups, a.file.release?.key], [old.fileKey, old.number, old.totalParts, old.messageId, old.bytes, old.name, old.groups, old.release?.key])
assert.strictEqual(a.file, b.file)
assert.equal(b.number, 13)
// Obfuscated, or a counter only before the name: no segment.
assert.isNull(scanner.segment(9, 'Xq8r2KdLm3Zw91PqA7zz', 'p', '', '', '1', xref, 'alt.binaries.test'))
assert.isNull(scanner.segment(9, '(1/2) "x.bin" yEnc', 'p', '', '', '1', xref, 'alt.binaries.test'))
})
})