- Implemented AlertDialog component with overlay, content, header, footer, title, description, action, and cancel functionalities. - Created Badge component with variant support for different styles. - Developed Checkbox component with custom styling and indicator. - Added Dialog component with trigger, close, overlay, content, header, footer, title, and description. - Introduced Label component for form elements. - Built Select component with trigger, content, group, item, label, separator, and scroll buttons. - Created Sheet component with trigger, close, overlay, content, header, footer, title, and description. - Implemented Table component with header, body, footer, row, head, cell, and caption. - Added Textarea component with custom styling. - Established API service for game management with CRUD operations and metadata search functionalities. - Updated dependencies in package lock files.
65 lines
3.6 KiB
JavaScript
65 lines
3.6 KiB
JavaScript
"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();
|
|
});
|
|
});
|