Files
pagasis/backend/test_validation_v2.py
T
2025-10-21 22:08:48 -06:00

124 lines
4.5 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Script para probar que la validación de eventos simultáneos funciona correctamente.
"""
import os
import sys
import django
# Configurar Django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mac_attendance.settings')
django.setup()
from attendance.models import Attendance
from events.models import Event
from authentication.models import UserProfile
from django.utils import timezone
from django.core.exceptions import ValidationError
def test_validation():
"""Probar validación de eventos simultáneos"""
print("=" * 80)
print("PROBANDO VALIDACIÓN DE EVENTOS SIMULTÁNEOS")
print("=" * 80)
print()
# Buscar estudiante que tenga asistencia en la conferencia de Matemáticas
event_math = Event.objects.get(id=48)
attendance_math = Attendance.objects.filter(event=event_math).first()
if not attendance_math:
print("✗ No se encontró ninguna asistencia en la conferencia de Matemáticas")
return
student = attendance_math.student
assistant = UserProfile.objects.filter(user_type='assistant').first()
# Buscar eventos simultáneos
event_iiot = Event.objects.get(id=46)
print(f"Estudiante de prueba: {student.account_number} - {student.full_name}")
print()
print(f"Evento donde YA tiene asistencia: {event_math.title}")
print(f" Horario: {event_math.start_time} - {event_math.end_time}")
print(f" ID de asistencia existente: {attendance_math.id}")
print()
print(f"Evento simultáneo (intentaremos crear asistencia aquí): {event_iiot.title}")
print(f" Horario: {event_iiot.start_time} - {event_iiot.end_time}")
print()
print("-" * 80)
print()
# Verificar si los eventos son simultáneos
if event_math.date == event_iiot.date:
if event_math.start_time < event_iiot.end_time and event_math.end_time > event_iiot.start_time:
print("✓ Los eventos son simultáneos")
else:
print("⚠ Los eventos NO son simultáneos")
print(f" Evento 1: {event_math.start_time} - {event_math.end_time}")
print(f" Evento 2: {event_iiot.start_time} - {event_iiot.end_time}")
else:
print("⚠ Los eventos son en fechas diferentes")
print()
# Verificar si ya tiene asistencia en el otro evento
existing_att = Attendance.objects.filter(student=student, event=event_iiot).first()
if existing_att:
print(f"⚠ El estudiante YA tiene asistencia en {event_iiot.title}")
print(f" No se puede probar con este estudiante")
return
# Intentar crear asistencia en evento simultáneo CON skip_validation=True
print("TEST 1: Intentando crear asistencia con skip_validation=True...")
try:
new_attendance = Attendance(
student=student,
event=event_iiot,
timestamp=timezone.now(),
registered_by=assistant,
registration_method='manual',
notes='Prueba de validación',
is_valid=True
)
new_attendance.save(skip_validation=True)
print("✗ ERROR: Se permitió crear asistencia simultánea")
print(" LA VALIDACIÓN FALLÓ - skip_validation no está validando eventos simultáneos")
# Eliminar la asistencia creada
new_attendance.delete()
except ValidationError as e:
print(f"✓ CORRECTO: Se bloqueó la asistencia simultánea incluso con skip_validation=True")
print(f" Mensaje: {e}")
print()
# Intentar crear asistencia en evento simultáneo SIN skip_validation
print("TEST 2: Intentando crear asistencia con skip_validation=False (validación completa)...")
try:
new_attendance = Attendance(
student=student,
event=event_iiot,
timestamp=timezone.now(),
registered_by=assistant,
registration_method='manual',
notes='Prueba de validación',
is_valid=True
)
new_attendance.save(skip_validation=False)
print("✗ ERROR: Se permitió crear asistencia simultánea")
print(" LA VALIDACIÓN FALLÓ - No está validando eventos simultáneos")
# Eliminar la asistencia creada
new_attendance.delete()
except ValidationError as e:
print(f"✓ CORRECTO: Se bloqueó la asistencia simultánea")
print(f" Mensaje: {e}")
print()
print("=" * 80)
print("✓ Prueba completada")
print("=" * 80)
if __name__ == "__main__":
test_validation()