// Tests der Dateinamen in der Ablage (kern/ablage/dateinamen.ts, 5.6.0). import { describe, expect, it } from 'vitest' import { rollenNummern, zielDateiname } from '../src/kern/ablage/dateinamen' describe('zielDateiname', () => { const film = { titel: 'Akira', jahr: 1988, alsSerie: false } it('ein Hauptfilm heißt wie der Film', () => { expect(zielDateiname({ ...film, rolle: 'hauptfilm', nummer: 1, anzahl: 1, original: 'title_t00.mkv' })).toBe('Akira (1988).mkv') }) it('zwei Hauptfilme werden Fassungen', () => { expect(zielDateiname({ ...film, rolle: 'hauptfilm', nummer: 1, anzahl: 2, original: 'title_t00.mkv' })).toBe('Akira (1988) - Fassung 1.mkv') expect(zielDateiname({ ...film, rolle: 'hauptfilm', nummer: 2, anzahl: 2, original: 'title_t01.mkv' })).toBe('Akira (1988) - Fassung 2.mkv') }) it('Extras werden nummeriert', () => { expect(zielDateiname({ ...film, rolle: 'extra', nummer: 3, anzahl: 5, original: 'title_t07.mkv' })).toBe('Akira (1988) - Extra 03.mkv') }) it('die Endung bleibt, was MakeMKV schrieb', () => { expect(zielDateiname({ ...film, rolle: 'hauptfilm', nummer: 1, anzahl: 1, original: 'x.mp4' })).toBe('Akira (1988).mp4') }) it('ohne Jahr ohne Klammer', () => { expect(zielDateiname({ ...film, jahr: null, rolle: 'hauptfilm', nummer: 1, anzahl: 1, original: 'a.mkv' })).toBe('Akira.mkv') }) it('Serie: Folgen behalten den Namen (die Episoden-Zuordnung benennt später), Extras heißen nach der Serie', () => { const serie = { titel: 'Spartacus', jahr: 2010, alsSerie: true } expect(zielDateiname({ ...serie, rolle: 'folge', nummer: 1, anzahl: 4, original: 'title_t02.mkv' })).toBe('title_t02.mkv') expect(zielDateiname({ ...serie, rolle: 'extra', nummer: 1, anzahl: 1, original: 'title_t09.mkv' })).toBe('Spartacus - Extra 01.mkv') }) it('ohne erkannten Titel bleibt der MakeMKV-Name', () => { expect(zielDateiname({ titel: '', jahr: null, alsSerie: false, rolle: 'hauptfilm', nummer: 1, anzahl: 1, original: 'title_t00.mkv' })).toBe('title_t00.mkv') }) }) describe('rollenNummern', () => { it('zählt je Rolle in Reihenfolge und kennt die Gesamtzahl', () => { expect(rollenNummern(['hauptfilm', 'extra', 'extra', 'hauptfilm'])).toEqual([ [1, 2], [1, 2], [2, 2], [2, 2], ]) }) }) // 5.7.0 (Durchsicht F3): nie überschreiben — ein freier Name, wo einer // nötig ist. describe('freierName', () => { it('frei bleibt frei, belegt bekommt (2), (3) …', async () => { const { freierName } = await import('../src/kern/ablage/dateinamen') const belegt = new Set(['E:\\S\\x.mkv', 'E:\\S\\x (2).mkv']) expect(freierName('E:\\S\\y.mkv', (p) => belegt.has(p))).toBe('E:\\S\\y.mkv') expect(freierName('E:\\S\\x.mkv', (p) => belegt.has(p))).toBe('E:\\S\\x (3).mkv') expect(freierName('/a/b/x.mkv', () => true).startsWith('/a/b/x (')).toBe(true) // Ein Punkt im Ordnernamen ist keine Endung. expect(freierName('E:\\Akira (1988)\\ohne-endung', (p) => p === 'E:\\Akira (1988)\\ohne-endung')).toBe('E:\\Akira (1988)\\ohne-endung (2)') }) })