const { describe, it } = require('node:test'); const assert = require('node:assert/strict'); const { parseVtt } = require('../lib/vtt-parser.js'); describe('parseVtt', () => { it('parses single cue with speaker tag', () => { const vtt = `WEBVTT 00:00:01.000 --> 00:00:04.000 Hallo zusammen. `; const result = parseVtt(vtt); assert.deepEqual(result, [ { speaker: 'Christian Kauer', text: 'Hallo zusammen.', start: '00:00:01.000', end: '00:00:04.000' } ]); }); it('merges consecutive cues from same speaker', () => { const vtt = `WEBVTT 00:00:01.000 --> 00:00:04.000 Wir können das prüfen. 00:00:04.500 --> 00:00:07.000 Lass uns Borgstedt fragen. `; const result = parseVtt(vtt, { mergeConsecutive: true }); assert.equal(result.length, 1); assert.equal(result[0].speaker, 'Frank Herberg'); assert.equal(result[0].text, 'Wir können das prüfen. Lass uns Borgstedt fragen.'); }); it('handles cues without speaker tag', () => { const vtt = `WEBVTT 00:00:01.000 --> 00:00:02.000 [Hintergrundgeräusch] `; const result = parseVtt(vtt); assert.equal(result[0].speaker, null); assert.equal(result[0].text, '[Hintergrundgeräusch]'); }); it('returns empty array for empty vtt', () => { assert.deepEqual(parseVtt('WEBVTT\n\n'), []); }); }); describe('formatTranscript', () => { const { formatTranscript } = require('../lib/vtt-parser.js'); it('formats cues as speaker: text lines', () => { const cues = [ { speaker: 'Christian Kauer', text: 'Hallo.' }, { speaker: 'Frank Herberg', text: 'Hi.' } ]; assert.equal(formatTranscript(cues), 'Christian Kauer: Hallo.\nFrank Herberg: Hi.'); }); it('uses [unknown] for null speaker', () => { const cues = [{ speaker: null, text: '[Lärm]' }]; assert.equal(formatTranscript(cues), '[unknown]: [Lärm]'); }); });