// Die drei Funde aus dem ersten Commander-Test (30.08.2026, abends) — // jeder als Test festgehalten, mit den LIVE gemessenen Fixtures. import { describe, expect, it } from 'vitest' import { urteilAusAusgabe } from '../src/kern/werkzeuge/schluessel' import { presetEmpfehlung, DEFAULT_HB_PRESET } from '../src/gemeinsam/preset-empfehlung' import { presetFuer } from '../src/kern/komprimieren/presets' describe('Fund 1 — „Key korrekt, aber als ungültig angezeigt"', () => { // Die ECHTE makemkvcon-Ausgabe vom Commander-PC (30.08.2026): Der // aktuelle Forum-Key ist in Ordnung, MakeMKV 1.18.4 ist ZU ALT für ihn // — es meldet 5020 UND 5021 zusammen. const ECHTE_AUSGABE = [ 'MSG:1005,0,1,"MakeMKV v1.18.4 win(x64-release) gestartet","%1 gestartet","MakeMKV v1.18.4 win(x64-release)"', 'MSG:5020,516,0,"Der hinterlegte Aktivierungsschlüssel ist ungültig. …","…"', 'MSG:5021,131332,1,"Diese Programmversion ist zu alt. Bitte laden Sie die aktuelle Version von http://www.makemkv.com/ herunter.","…","http://www.makemkv.com/"', ].join('\n') it('5021 schlägt 5020: Die Ursache ist die Version, nicht der Schlüssel', () => { const urteil = urteilAusAusgabe(ECHTE_AUSGABE) expect(urteil.ok).toBe(false) expect(urteil.code).toBe(5021) expect(urteil.grund).toContain('zu alt') expect(urteil.version).toBe('1.18.4') }) it('ohne Key-Meldungen ist alles gut — und die Version kommt trotzdem mit', () => { const urteil = urteilAusAusgabe( 'MSG:1005,0,1,"MakeMKV v1.18.4 win(x64-release) gestartet","x"\nMSG:5010,0,0,"Das Öffnen der Disk schlug fehl","x"', ) expect(urteil.ok).toBe(true) expect(urteil.version).toBe('1.18.4') }) it('5020 allein bleibt „Schlüssel wird nicht angenommen"', () => { const urteil = urteilAusAusgabe('MSG:5020,516,0,"…","…"') expect(urteil.code).toBe(5020) }) }) describe('Fund 2 — „Komprimieren auf der CPU statt der GPU"', () => { // Die ECHTE Hardware-Preset-Liste des Commander-HandBrake (30.08.2026) // plus die gemessenen Backends der RX 9070 XT. const PRESETS = [ 'Very Fast 1080p30', 'H.265 MKV 1080p30', 'AV1 QSV 2160p 4K', 'AV1 VCN 2160p 4K', 'H.265 NVENC 2160p 4K', 'H.265 NVENC 1080p', 'H.265 QSV 2160p 4K', 'H.265 QSV 1080p', 'H.265 VCN 2160p 4K', 'H.265 VCN 1080p', ] const BACKENDS = ['cpu-x264', 'cpu-x265', 'cpu-av1', 'vce', 'vce-av1'] it('empfiehlt auf dem Commander-PC VCN, nicht CPU', () => { expect(presetEmpfehlung('bluray', BACKENDS, PRESETS)).toBe('H.265 VCN 1080p') expect(presetEmpfehlung('dvd', BACKENDS, PRESETS)).toBe('H.265 VCN 1080p') expect(presetEmpfehlung('uhd', BACKENDS, PRESETS)).toBe('H.265 VCN 2160p 4K') }) it('NVIDIA-Maschine bekäme NVENC, Intel QSV, reine CPU den Default', () => { expect(presetEmpfehlung('bluray', ['cpu-x265', 'nvenc'], PRESETS)).toBe('H.265 NVENC 1080p') expect(presetEmpfehlung('bluray', ['cpu-x265', 'qsv'], PRESETS)).toBe('H.265 QSV 1080p') expect(presetEmpfehlung('bluray', ['cpu-x264', 'cpu-x265'], PRESETS)).toBe(DEFAULT_HB_PRESET) }) it('empfohlen wird NUR, was die gemessene Liste hergibt', () => { // vce da, aber keine VCN-Presets in der Liste → CPU-Default statt // eines geratenen Namens (die „Invalid preset"-Falle). expect(presetEmpfehlung('bluray', ['vce'], ['Very Fast 1080p30'])).toBe(DEFAULT_HB_PRESET) }) it('die Kette bleibt: eigene Wahl schlägt die Empfehlung', () => { expect(presetFuer('bluray', { transcodePresetBluray: 'Fast 480p30' }, 'H.265 VCN 1080p')).toBe('Fast 480p30') expect(presetFuer('bluray', {}, 'H.265 VCN 1080p')).toBe('H.265 VCN 1080p') expect(presetFuer('bluray', {}, '')).toBe(DEFAULT_HB_PRESET) }) })