"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const vitest_1 = require("vitest"); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const datVerifier_1 = require("../../src/services/datVerifier"); const FIXTURE = path_1.default.resolve('tests/fixtures/sample.dat.xml'); (0, vitest_1.describe)('services/datVerifier', () => { (0, vitest_1.it)('parseDat parses simple DAT XML', () => { const xml = fs_1.default.readFileSync(FIXTURE, 'utf8'); const dat = (0, datVerifier_1.parseDat)(xml); (0, vitest_1.expect)(dat).toBeTruthy(); (0, vitest_1.expect)(Array.isArray(dat.games)).toBe(true); (0, vitest_1.expect)(dat.games.length).toBe(2); const g0 = dat.games[0]; (0, vitest_1.expect)(g0.name).toBe('Game Alpha'); (0, vitest_1.expect)(g0.roms.length).toBeGreaterThan(0); (0, vitest_1.expect)(g0.roms[0].name).toBe('alpha1.bin'); (0, vitest_1.expect)(g0.roms[0].crc).toBeDefined(); (0, vitest_1.expect)(g0.roms[0].md5).toBeDefined(); const g1 = dat.games[1]; (0, vitest_1.expect)(g1.name).toBe('Game Beta'); (0, vitest_1.expect)(g1.roms.some((r) => r.name === 'beta2.rom')).toBe(true); }); (0, vitest_1.it)('verifyHashesAgainstDat finds match by CRC', () => { const xml = fs_1.default.readFileSync(FIXTURE, 'utf8'); const dat = (0, datVerifier_1.parseDat)(xml); const match = (0, datVerifier_1.verifyHashesAgainstDat)(dat, { crc: 'DEADBEEF' }); (0, vitest_1.expect)(match).not.toBeNull(); (0, vitest_1.expect)(match?.gameName).toBe('Game Beta'); (0, vitest_1.expect)(match?.romName).toBe('beta1.rom'); (0, vitest_1.expect)(match?.matchedOn).toBe('crc'); }); (0, vitest_1.it)('verifyHashesAgainstDat finds match by MD5, SHA1 and size', () => { const xml = fs_1.default.readFileSync(FIXTURE, 'utf8'); const dat = (0, datVerifier_1.parseDat)(xml); const md5match = (0, datVerifier_1.verifyHashesAgainstDat)(dat, { md5: '11111111111111111111111111111111' }); (0, vitest_1.expect)(md5match).not.toBeNull(); (0, vitest_1.expect)(md5match?.gameName).toBe('Game Alpha'); (0, vitest_1.expect)(md5match?.romName).toBe('alpha1.bin'); (0, vitest_1.expect)(md5match?.matchedOn).toBe('md5'); const sha1match = (0, datVerifier_1.verifyHashesAgainstDat)(dat, { sha1: 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', }); (0, vitest_1.expect)(sha1match).not.toBeNull(); (0, vitest_1.expect)(sha1match?.gameName).toBe('Game Alpha'); (0, vitest_1.expect)(sha1match?.romName).toBe('alpha2.bin'); (0, vitest_1.expect)(sha1match?.matchedOn).toBe('sha1'); const sizematch = (0, datVerifier_1.verifyHashesAgainstDat)(dat, { size: 4000 }); (0, vitest_1.expect)(sizematch).not.toBeNull(); (0, vitest_1.expect)(sizematch?.gameName).toBe('Game Beta'); (0, vitest_1.expect)(sizematch?.romName).toBe('beta2.rom'); (0, vitest_1.expect)(sizematch?.matchedOn).toBe('size'); }); (0, vitest_1.it)('verifyHashesAgainstDat returns null when no match', () => { const xml = fs_1.default.readFileSync(FIXTURE, 'utf8'); const dat = (0, datVerifier_1.parseDat)(xml); const noMatch = (0, datVerifier_1.verifyHashesAgainstDat)(dat, { md5: 'ffffffffffffffffffffffffffffffff' }); (0, vitest_1.expect)(noMatch).toBeNull(); }); });