workspace/projects/gamilit/apps/database/test-exercise-resubmission.sh
rckrdmrd ea1879f4ad feat: Initial workspace structure with multi-level Git configuration
- Configure workspace Git repository with comprehensive .gitignore
- Add Odoo as submodule for ERP reference code
- Include documentation: SETUP.md, GIT-STRUCTURE.md
- Add gitignore templates for projects (backend, frontend, database)
- Structure supports independent repos per project/subproject level

Workspace includes:
- core/ - Reusable patterns, modules, orchestration system
- projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.)
- knowledge-base/ - Reference code and patterns (includes Odoo submodule)
- devtools/ - Development tools and templates
- customers/ - Client implementations template

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 10:44:23 -06:00

125 lines
4.3 KiB
Bash
Executable File

#!/bin/bash
# =====================================================
# Script de Testing: Sistema de Reenvío de Ejercicios
# Fecha: 2025-11-24
# Propósito: Validar arquitectura dual attempts/submissions
# =====================================================
set -e
DB_URL="postgresql://gamilit_user:3RZ2uYhCnJBXQqEwPPbZK3NFfk4T4W4Q@localhost:5432/gamilit_platform"
echo "========================================="
echo "🧪 TEST: Sistema de Reenvío de Ejercicios"
echo "========================================="
echo ""
# Test 1: Verificar columna exists
echo "📋 Test 1: Verificar columna requires_manual_grading existe"
echo "---------------------------------------------------------"
PGPASSWORD='3RZ2uYhCnJBXQqEwPPbZK3NFfk4T4W4Q' psql -h localhost -U gamilit_user -d gamilit_platform -c "
SELECT column_name, data_type, column_default
FROM information_schema.columns
WHERE table_schema = 'educational_content'
AND table_name = 'exercises'
AND column_name = 'requires_manual_grading';
"
echo ""
# Test 2: Distribución de ejercicios
echo "📊 Test 2: Distribución de ejercicios por tipo"
echo "---------------------------------------------------------"
PGPASSWORD='3RZ2uYhCnJBXQqEwPPbZK3NFfk4T4W4Q' psql -h localhost -U gamilit_user -d gamilit_platform -c "
SELECT
requires_manual_grading,
COUNT(*) as total,
ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (), 1) as percentage
FROM educational_content.exercises
GROUP BY requires_manual_grading
ORDER BY requires_manual_grading;
"
echo ""
# Test 3: Verificar estudiante de prueba
echo "👤 Test 3: Verificar estudiante de prueba (bbbbbbbb...)"
echo "---------------------------------------------------------"
PGPASSWORD='3RZ2uYhCnJBXQqEwPPbZK3NFfk4T4W4Q' psql -h localhost -U gamilit_user -d gamilit_platform -c "
SELECT
p.id as profile_id,
p.email,
us.level,
us.current_rank,
us.total_xp,
us.ml_coins
FROM auth_management.profiles p
LEFT JOIN gamification_system.user_stats us ON us.user_id = p.id
WHERE p.id = 'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb';
"
echo ""
# Test 4: Ejercicios disponibles para testing
echo "🎯 Test 4: Ejercicios disponibles para testing (Módulo 2 y 3)"
echo "---------------------------------------------------------"
PGPASSWORD='3RZ2uYhCnJBXQqEwPPbZK3NFfk4T4W4Q' psql -h localhost -U gamilit_user -d gamilit_platform -c "
SELECT
e.id,
m.order_index as modulo,
e.order_index as ejercicio,
e.title,
e.exercise_type,
e.requires_manual_grading as manual,
e.xp_reward as xp,
e.ml_coins_reward as coins
FROM educational_content.exercises e
JOIN educational_content.modules m ON m.id = e.module_id
WHERE m.order_index IN (2, 3)
AND e.is_active = true
ORDER BY m.order_index, e.order_index
LIMIT 10;
"
echo ""
# Test 5: Historial de intentos del estudiante
echo "📝 Test 5: Historial de intentos previos del estudiante"
echo "---------------------------------------------------------"
PGPASSWORD='3RZ2uYhCnJBXQqEwPPbZK3NFfk4T4W4Q' psql -h localhost -U gamilit_user -d gamilit_platform -c "
SELECT
e.title as ejercicio,
ea.is_correct,
ea.score,
ea.xp_earned,
ea.ml_coins_earned,
ea.submitted_at
FROM progress_tracking.exercise_attempts ea
JOIN educational_content.exercises e ON e.id = ea.exercise_id
WHERE ea.user_id = 'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb'
ORDER BY ea.submitted_at DESC
LIMIT 10;
"
echo ""
# Test 6: Verificar que no hay registros en exercise_submissions para autocorregibles
echo "🔍 Test 6: Verificar NO hay ejercicios autocorregibles en submissions"
echo "---------------------------------------------------------"
PGPASSWORD='3RZ2uYhCnJBXQqEwPPbZK3NFfk4T4W4Q' psql -h localhost -U gamilit_user -d gamilit_platform -c "
SELECT
COUNT(*) as total_incorrectos,
'Este número debe ser 0' as nota
FROM progress_tracking.exercise_submissions es
JOIN educational_content.exercises e ON e.id = es.exercise_id
WHERE e.requires_manual_grading = false;
"
echo ""
echo "========================================="
echo "✅ Tests de verificación completados"
echo "========================================="
echo ""
echo "📌 PRÓXIMO PASO:"
echo " Usar la aplicación frontend para:"
echo " 1. Completar un ejercicio de Módulo 2 o 3"
echo " 2. Intentar reenviar el mismo ejercicio"
echo " 3. Verificar que se permite el reenvío"
echo " 4. Verificar que XP solo se otorga en primer acierto"
echo ""