Some checks are pending
CI Pipeline / changes (push) Waiting to run
CI Pipeline / core (push) Blocked by required conditions
CI Pipeline / trading-backend (push) Blocked by required conditions
CI Pipeline / trading-data-service (push) Blocked by required conditions
CI Pipeline / trading-frontend (push) Blocked by required conditions
CI Pipeline / erp-core (push) Blocked by required conditions
CI Pipeline / erp-mecanicas (push) Blocked by required conditions
CI Pipeline / gamilit-backend (push) Blocked by required conditions
CI Pipeline / gamilit-frontend (push) Blocked by required conditions
Backend: - Fix email verification and password recovery services - Fix exercise submission and student progress services Frontend: - Update missions, password, and profile API services - Fix ExerciseContentRenderer component Docs & Scripts: - Add SSL/Certbot deployment guide - Add quick deployment guide - Database scripts for testing and validations - Migration and homologation reports - Functions inventory documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
136 lines
4.6 KiB
SQL
136 lines
4.6 KiB
SQL
-- =====================================================
|
|
-- Script de Validación: Estructura de Objectives en Missions
|
|
-- Fecha: 2025-11-26
|
|
-- Propósito: Validar que initialize_user_missions crea objectives como ARRAY
|
|
-- =====================================================
|
|
|
|
\echo '=================================================='
|
|
\echo 'VALIDACIÓN: Estructura de objectives en missions'
|
|
\echo '=================================================='
|
|
\echo ''
|
|
|
|
DO $$
|
|
DECLARE
|
|
v_test_user_id UUID;
|
|
v_objectives JSONB;
|
|
v_objectives_type TEXT;
|
|
v_mission_count INT;
|
|
v_total_missions INT;
|
|
v_test_passed BOOLEAN := true;
|
|
BEGIN
|
|
RAISE NOTICE '1. Buscando usuario de prueba...';
|
|
|
|
-- Buscar un usuario existente
|
|
SELECT id INTO v_test_user_id
|
|
FROM auth_management.profiles
|
|
LIMIT 1;
|
|
|
|
IF v_test_user_id IS NULL THEN
|
|
RAISE EXCEPTION 'No hay usuarios en la base de datos para testing';
|
|
END IF;
|
|
|
|
RAISE NOTICE 'Usuario de prueba: %', v_test_user_id;
|
|
|
|
RAISE NOTICE '2. Limpiando misiones previas...';
|
|
DELETE FROM gamification_system.missions WHERE user_id = v_test_user_id;
|
|
|
|
RAISE NOTICE '3. Ejecutando initialize_user_missions()...';
|
|
PERFORM gamilit.initialize_user_missions(v_test_user_id);
|
|
|
|
RAISE NOTICE '4. Verificando estructura de objectives...';
|
|
|
|
-- Verificar que se crearon 8 misiones
|
|
SELECT COUNT(*) INTO v_total_missions
|
|
FROM gamification_system.missions
|
|
WHERE user_id = v_test_user_id;
|
|
|
|
RAISE NOTICE 'Misiones creadas: %', v_total_missions;
|
|
|
|
IF v_total_missions != 8 THEN
|
|
RAISE NOTICE '❌ ERROR: Se esperaban 8 misiones, se crearon %', v_total_missions;
|
|
v_test_passed := false;
|
|
ELSE
|
|
RAISE NOTICE '✅ OK: Se crearon las 8 misiones esperadas';
|
|
END IF;
|
|
|
|
-- Verificar que TODAS las misiones tienen objectives como ARRAY
|
|
SELECT objectives, jsonb_typeof(objectives)
|
|
INTO v_objectives, v_objectives_type
|
|
FROM gamification_system.missions
|
|
WHERE user_id = v_test_user_id
|
|
LIMIT 1;
|
|
|
|
RAISE NOTICE 'Tipo de objectives: %', v_objectives_type;
|
|
RAISE NOTICE 'Ejemplo de objectives: %', v_objectives;
|
|
|
|
IF v_objectives_type != 'array' THEN
|
|
RAISE NOTICE '❌ ERROR: objectives NO es un array, es: %', v_objectives_type;
|
|
v_test_passed := false;
|
|
ELSE
|
|
RAISE NOTICE '✅ OK: objectives es un ARRAY';
|
|
END IF;
|
|
|
|
RAISE NOTICE '5. Verificando compatibilidad con operador @>...';
|
|
|
|
-- Test: Buscar misiones de tipo complete_exercises
|
|
SELECT COUNT(*) INTO v_mission_count
|
|
FROM gamification_system.missions
|
|
WHERE user_id = v_test_user_id
|
|
AND objectives @> '[{"type": "complete_exercises"}]'::jsonb;
|
|
|
|
RAISE NOTICE 'Misiones con type=complete_exercises encontradas con @>: %', v_mission_count;
|
|
|
|
IF v_mission_count = 0 THEN
|
|
RAISE NOTICE '❌ ERROR: El operador @> NO encuentra misiones';
|
|
v_test_passed := false;
|
|
ELSE
|
|
RAISE NOTICE '✅ OK: El operador @> funciona correctamente';
|
|
END IF;
|
|
|
|
-- Test: Buscar misión de earn_xp
|
|
SELECT COUNT(*) INTO v_mission_count
|
|
FROM gamification_system.missions
|
|
WHERE user_id = v_test_user_id
|
|
AND objectives @> '[{"type": "earn_xp"}]'::jsonb;
|
|
|
|
RAISE NOTICE 'Misiones con type=earn_xp encontradas: %', v_mission_count;
|
|
|
|
IF v_mission_count = 0 THEN
|
|
RAISE NOTICE '❌ ERROR: No se encuentra misión de earn_xp';
|
|
v_test_passed := false;
|
|
END IF;
|
|
|
|
-- Test: Verificar misión weekly_explorer con modules_visited
|
|
SELECT COUNT(*) INTO v_mission_count
|
|
FROM gamification_system.missions
|
|
WHERE user_id = v_test_user_id
|
|
AND template_id = 'weekly_explorer'
|
|
AND objectives @> '[{"type": "explore_modules"}]'::jsonb
|
|
AND objectives::text LIKE '%modules_visited%';
|
|
|
|
RAISE NOTICE 'Misión weekly_explorer con modules_visited: %', v_mission_count;
|
|
|
|
IF v_mission_count = 0 THEN
|
|
RAISE NOTICE '❌ ERROR: weekly_explorer no tiene modules_visited';
|
|
v_test_passed := false;
|
|
ELSE
|
|
RAISE NOTICE '✅ OK: weekly_explorer tiene modules_visited';
|
|
END IF;
|
|
|
|
RAISE NOTICE '6. Limpiando datos de prueba...';
|
|
DELETE FROM gamification_system.missions WHERE user_id = v_test_user_id;
|
|
|
|
RAISE NOTICE '';
|
|
RAISE NOTICE '==================================================';
|
|
IF v_test_passed THEN
|
|
RAISE NOTICE '✅ ✅ ✅ VALIDACIÓN EXITOSA ✅ ✅ ✅';
|
|
RAISE NOTICE 'La función initialize_user_missions está correcta';
|
|
ELSE
|
|
RAISE NOTICE '❌ ❌ ❌ VALIDACIÓN FALLIDA ❌ ❌ ❌';
|
|
RAISE NOTICE 'Hay problemas en la función initialize_user_missions';
|
|
END IF;
|
|
RAISE NOTICE '==================================================';
|
|
|
|
END;
|
|
$$;
|