"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fs_1 = __importDefault(require("fs")); const os_1 = __importDefault(require("os")); const path_1 = __importDefault(require("path")); const child_process_1 = require("child_process"); const vitest_1 = require("vitest"); // Import PrismaClient dynamically after running `prisma generate` // to allow the test setup to run `prisma generate`/`prisma migrate` first. // Nota: Estos tests siguen TDD. Al principio deben FALLAR hasta que se creen migraciones. (0, vitest_1.describe)('Prisma / Game model', () => { const tmpDir = os_1.default.tmpdir(); const dbFile = path_1.default.join(tmpDir, `quasar-test-${Date.now()}-${Math.random().toString(36).slice(2)}.db`); const databaseUrl = `file:${dbFile}`; let prisma; (0, vitest_1.beforeAll)(async () => { // Asegurarse de que la DB de prueba no exista antes de empezar try { fs_1.default.unlinkSync(dbFile); } catch (e) { /* ignore */ } // Apuntar Prisma a la DB temporal process.env.DATABASE_URL = databaseUrl; // Ejecutar migraciones contra la DB de prueba // Esto fallará si no hay migraciones: esperado en la fase TDD inicial (0, child_process_1.execSync)('yarn prisma migrate deploy --schema=./prisma/schema.prisma', { stdio: 'inherit', cwd: path_1.default.resolve(__dirname, '..', '..'), }); // Intentar requerir el cliente generado; si no existe, intentar generarlo (fallback) let GeneratedPrismaClient; try { // eslint-disable-next-line @typescript-eslint/no-var-requires GeneratedPrismaClient = require('@prisma/client').PrismaClient; } catch (e) { try { (0, child_process_1.execSync)('yarn prisma generate --schema=./prisma/schema.prisma', { stdio: 'inherit', cwd: path_1.default.resolve(__dirname, '..', '..'), }); // eslint-disable-next-line @typescript-eslint/no-var-requires GeneratedPrismaClient = require('@prisma/client').PrismaClient; } catch (err) { // Si generation falla (por ejemplo PnP), reintentar require para mostrar mejor error // eslint-disable-next-line @typescript-eslint/no-var-requires GeneratedPrismaClient = require('@prisma/client').PrismaClient; } } prisma = new GeneratedPrismaClient(); await prisma.$connect(); }); (0, vitest_1.afterAll)(async () => { if (prisma) { await prisma.$disconnect(); } try { fs_1.default.unlinkSync(dbFile); } catch (e) { /* ignore */ } }); (0, vitest_1.it)('can create a Game and read title/slug', async () => { const created = await prisma.game.create({ data: { title: 'Test Game', slug: 'test-game' } }); const found = await prisma.game.findUnique({ where: { id: created.id } }); (0, vitest_1.expect)(found).toBeTruthy(); (0, vitest_1.expect)(found?.title).toBe('Test Game'); (0, vitest_1.expect)(found?.slug).toBe('test-game'); }); (0, vitest_1.it)('enforces unique slug constraint', async () => { const slug = `unique-${Date.now()}`; await prisma.game.create({ data: { title: 'G1', slug } }); let threw = false; try { await prisma.game.create({ data: { title: 'G2', slug } }); } catch (err) { threw = true; } (0, vitest_1.expect)(threw).toBe(true); }); });