import assert from 'node:assert/strict'; import { test } from 'node:test'; import { defaultSettings, mergeSettings } from '../server/settings.js'; test('Vorgaben: beschleunigen und stummschalten an, Intro, Outro und Musik aus', () => { const settings = defaultSettings(); assert.equal(settings.speedUp, true); assert.equal(settings.muteClips, true); assert.equal(settings.intro.enabled, false); assert.equal(settings.music.volume, 60); }); test('Teiländerungen lassen den Rest stehen', () => { const merged = mergeSettings(defaultSettings(), { music: { volume: 35 } }, 5); assert.equal(merged.music.volume, 35); assert.equal(merged.music.enabled, false); assert.equal(merged.intro.volume, 100); }); test('Voice-over-Lautstärke pro Clip und ausgeschlossene Clips', () => { const merged = mergeSettings(defaultSettings(), { voiceVolumes: { 2: 80 }, excluded: [3, 1, 3] }, 5); assert.deepEqual(merged.voiceVolumes, { 2: 80 }); assert.deepEqual(merged.excluded, [1, 3]); }); test('Ungültige Werte werden abgelehnt', () => { const invalid = [ { music: { volume: 101 } }, { clipVolume: -1 }, { clipVolume: 50.5 }, { speedUp: 'ja' }, { voiceVolumes: { 9: 50 } }, { excluded: [7] }, [], ]; for (const patch of invalid) { assert.throws(() => mergeSettings(defaultSettings(), patch, 5), { status: 400 }); } }); test('Unbekannte Felder werden ignoriert', () => { const merged = mergeSettings(defaultSettings(), { hacker: true, intro: { enabled: true, file: '/etc/passwd' } }, 1); assert.equal(merged.hacker, undefined); assert.equal(merged.intro.file, undefined); assert.equal(merged.intro.enabled, true); });