const { test, before, after } = require('node:test'); const assert = require('node:assert/strict'); const fs = require('fs'); const os = require('os'); const path = require('path'); const { findExistingTrack } = require('../lib/metadata'); let ROOT; const touch = (artist, album, file) => { const dir = path.join(ROOT, artist, album); fs.mkdirSync(dir, { recursive: true }); fs.writeFileSync(path.join(dir, file), ''); }; before(() => { ROOT = fs.mkdtempSync(path.join(os.tmpdir(), 'ns-dedup-')); // KH single: normal "01 - " prefix, title contains multiple " - " touch('Geek Music', 'Kingdom Hearts 2 - Dearly Beloved - Main Theme - Single', '01 - Kingdom Hearts 2 - Dearly Beloved - Main Theme.mp3'); // KH album variant: garbage "01-01" artist prefix, no track number touch('Geek Music', 'Kingdom Hearts 2 - Dearly Beloved - Main Theme', '01-01 - Kingdom Hearts 2 - Dearly Beloved - Main Theme.mp3'); // Normal "Artist - Title" file touch('Some Artist', 'Therapy - Single', '01 - Some Artist - Therapy.mp3'); }); after(() => { try { fs.rmSync(ROOT, { recursive: true, force: true }); } catch {} }); test('detects a re-download when the title itself contains " - " (KH bug)', () => { assert.ok(findExistingTrack(ROOT, 'Geek Music', 'Kingdom Hearts 2 - Dearly Beloved - Main Theme')); }); test('detects it even with a garbage "01-01 - " artist prefix', () => { // Both KH files should resolve; at least one must be found → dedup skips the re-download. const hit = findExistingTrack(ROOT, 'Geek Music', 'Kingdom Hearts 2 - Dearly Beloved - Main Theme'); assert.ok(hit && hit.includes('Kingdom Hearts 2 - Dearly Beloved - Main Theme')); }); test('normal "Artist - Title" filename still matches on title alone', () => { assert.ok(findExistingTrack(ROOT, 'Some Artist', 'Therapy')); }); test('no false positive: a different title is not matched', () => { assert.equal(findExistingTrack(ROOT, 'Geek Music', 'Some Unrelated Song'), null); assert.equal(findExistingTrack(ROOT, 'Some Artist', 'Kingdom Hearts 2'), null); }); test('remix stays distinct from the base track (no regression from the version-marker fix)', () => { assert.equal(findExistingTrack(ROOT, 'Some Artist', 'Therapy (Remix)'), null); assert.ok(findExistingTrack(ROOT, 'Some Artist', 'Therapy')); // base still found });