"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const vitest_1 = require("vitest"); const app_1 = require("../../src/app"); const prisma_1 = require("../../src/plugins/prisma"); (0, vitest_1.describe)('ROMs API', () => { let app; (0, vitest_1.beforeEach)(async () => { app = (0, app_1.buildApp)(); await app.ready(); // Limpiar base de datos antes de cada test (eliminar ROMs primero por foreign key) await prisma_1.prisma.romFile.deleteMany(); await prisma_1.prisma.gamePlatform.deleteMany(); await prisma_1.prisma.purchase.deleteMany(); await prisma_1.prisma.artwork.deleteMany(); await prisma_1.prisma.priceHistory.deleteMany(); await prisma_1.prisma.game.deleteMany(); }); (0, vitest_1.afterEach)(async () => { await app.close(); }); (0, vitest_1.describe)('GET /api/roms', () => { (0, vitest_1.it)('debería devolver una lista vacía cuando no hay ROMs', async () => { const res = await app.inject({ method: 'GET', url: '/api/roms', }); (0, vitest_1.expect)(res.statusCode).toBe(200); (0, vitest_1.expect)(res.json()).toEqual([]); }); (0, vitest_1.it)('debería devolver una lista de ROMs con sus propiedades', async () => { // Crear un ROM de prueba const rom = await prisma_1.prisma.romFile.create({ data: { path: '/roms/games/', filename: 'game.zip', checksum: 'abc123def456', size: 1024, format: 'zip', }, }); const res = await app.inject({ method: 'GET', url: '/api/roms', }); (0, vitest_1.expect)(res.statusCode).toBe(200); const body = res.json(); (0, vitest_1.expect)(Array.isArray(body)).toBe(true); (0, vitest_1.expect)(body.length).toBe(1); (0, vitest_1.expect)(body[0].id).toBe(rom.id); (0, vitest_1.expect)(body[0].filename).toBe('game.zip'); }); (0, vitest_1.it)('debería incluir información del juego asociado', async () => { const game = await prisma_1.prisma.game.create({ data: { title: 'Test Game', slug: 'test-game', }, }); const rom = await prisma_1.prisma.romFile.create({ data: { path: '/roms/', filename: 'test-with-game.zip', checksum: 'checksum-game-123', size: 2048, format: 'zip', gameId: game.id, }, }); const res = await app.inject({ method: 'GET', url: '/api/roms', }); (0, vitest_1.expect)(res.statusCode).toBe(200); const body = res.json(); // Buscar el ROM que creamos por checksum const createdRom = body.find((r) => r.checksum === 'checksum-game-123'); (0, vitest_1.expect)(createdRom).toBeDefined(); (0, vitest_1.expect)(createdRom.game).toBeDefined(); (0, vitest_1.expect)(createdRom.game.title).toBe('Test Game'); }); }); (0, vitest_1.describe)('GET /api/roms/:id', () => { (0, vitest_1.it)('debería retornar un ROM existente', async () => { const rom = await prisma_1.prisma.romFile.create({ data: { path: '/roms/', filename: 'game1.zip', checksum: 'checksum1', size: 1024, format: 'zip', }, }); const res = await app.inject({ method: 'GET', url: `/api/roms/${rom.id}`, }); (0, vitest_1.expect)(res.statusCode).toBe(200); const body = res.json(); (0, vitest_1.expect)(body.id).toBe(rom.id); (0, vitest_1.expect)(body.filename).toBe('game1.zip'); }); (0, vitest_1.it)('debería retornar 404 si el ROM no existe', async () => { const res = await app.inject({ method: 'GET', url: '/api/roms/non-existing-id', }); (0, vitest_1.expect)(res.statusCode).toBe(404); (0, vitest_1.expect)(res.json()).toHaveProperty('error'); }); (0, vitest_1.it)('debería incluir el juego asociado al ROM', async () => { const game = await prisma_1.prisma.game.create({ data: { title: 'Zelda', slug: 'zelda', }, }); const rom = await prisma_1.prisma.romFile.create({ data: { path: '/roms/', filename: 'zelda.zip', checksum: 'checksum2', size: 2048, format: 'zip', gameId: game.id, }, }); const res = await app.inject({ method: 'GET', url: `/api/roms/${rom.id}`, }); (0, vitest_1.expect)(res.statusCode).toBe(200); const body = res.json(); (0, vitest_1.expect)(body.game).toBeDefined(); (0, vitest_1.expect)(body.game.title).toBe('Zelda'); }); }); (0, vitest_1.describe)('PUT /api/roms/:id/game', () => { (0, vitest_1.it)('debería vincular un juego a un ROM existente', async () => { const game = await prisma_1.prisma.game.create({ data: { title: 'Mario', slug: 'mario', }, }); const rom = await prisma_1.prisma.romFile.create({ data: { path: '/roms/', filename: 'mario.zip', checksum: 'checksum3', size: 512, format: 'zip', }, }); const res = await app.inject({ method: 'PUT', url: `/api/roms/${rom.id}/game`, payload: { gameId: game.id, }, }); (0, vitest_1.expect)(res.statusCode).toBe(200); const body = res.json(); (0, vitest_1.expect)(body.gameId).toBe(game.id); (0, vitest_1.expect)(body.game.title).toBe('Mario'); }); (0, vitest_1.it)('debería devolver 400 si el gameId es inválido', async () => { const rom = await prisma_1.prisma.romFile.create({ data: { path: '/roms/', filename: 'game.zip', checksum: 'checksum4', size: 1024, format: 'zip', }, }); const res = await app.inject({ method: 'PUT', url: `/api/roms/${rom.id}/game`, payload: { gameId: 'invalid-game-id', }, }); (0, vitest_1.expect)(res.statusCode).toBe(400); }); (0, vitest_1.it)('debería devolver 404 si el ROM no existe', async () => { const game = await prisma_1.prisma.game.create({ data: { title: 'Test', slug: 'test', }, }); const res = await app.inject({ method: 'PUT', url: '/api/roms/non-existing-id/game', payload: { gameId: game.id, }, }); (0, vitest_1.expect)(res.statusCode).toBe(404); }); (0, vitest_1.it)('debería devolver 400 si falta gameId', async () => { const rom = await prisma_1.prisma.romFile.create({ data: { path: '/roms/', filename: 'game.zip', checksum: 'checksum5', size: 1024, format: 'zip', }, }); const res = await app.inject({ method: 'PUT', url: `/api/roms/${rom.id}/game`, payload: {}, }); (0, vitest_1.expect)(res.statusCode).toBe(400); }); }); (0, vitest_1.describe)('DELETE /api/roms/:id', () => { (0, vitest_1.it)('debería eliminar un ROM existente', async () => { const rom = await prisma_1.prisma.romFile.create({ data: { path: '/roms/', filename: 'delete-me.zip', checksum: 'checksum6', size: 1024, format: 'zip', }, }); const res = await app.inject({ method: 'DELETE', url: `/api/roms/${rom.id}`, }); (0, vitest_1.expect)(res.statusCode).toBe(204); // Verificar que el ROM fue eliminado const deletedRom = await prisma_1.prisma.romFile.findUnique({ where: { id: rom.id }, }); (0, vitest_1.expect)(deletedRom).toBeNull(); }); (0, vitest_1.it)('debería devolver 404 si el ROM no existe', async () => { const res = await app.inject({ method: 'DELETE', url: '/api/roms/non-existing-id', }); (0, vitest_1.expect)(res.statusCode).toBe(404); }); }); }); /** * Metadatos: * Autor: GitHub Copilot * Última actualización: 2026-02-11 */