Files
admin-edu-space/backend/tests/test_role_dashboard_and_menu.py
T

104 lines
4.6 KiB
Python

import unittest
from app import create_app, db
from app.models.user import User
class TestRoleDashboardAndMenu(unittest.TestCase):
def setUp(self):
self.app = create_app()
self.app.config['TESTING'] = True
self.app.config['WTF_CSRF_ENABLED'] = False
self.client = self.app.test_client()
self.app_context = self.app.app_context()
self.app_context.push()
# Usar usuario administrador para autenticación en sesión de pruebas
self.user = User.query.filter_by(is_active=True).first()
if self.user:
with self.client.session_transaction() as sess:
sess['_user_id'] = str(self.user.id)
sess['_fresh'] = True
def tearDown(self):
self.app_context.pop()
def test_user_role_methods(self):
"""Verifica la normalización y detección de roles en el modelo User"""
u = User(name="Test Teacher", email="prof@test.edu", role="Docente")
self.assertEqual(u.get_institutional_role(), "docente")
self.assertTrue(u.is_docente())
self.assertFalse(u.is_admin())
self.assertFalse(u.is_alumno())
self.assertFalse(u.is_bedelia())
u_bedelia = User(name="Test Bedelia", email="bedelia@test.edu", role="Bedelia")
self.assertEqual(u_bedelia.get_institutional_role(), "bedelia")
self.assertTrue(u_bedelia.is_bedelia())
u_student = User(name="Test Student", email="student@test.edu", role="Alumno")
self.assertEqual(u_student.get_institutional_role(), "alumno")
self.assertTrue(u_student.is_alumno())
u_admin = User(name="Test Admin", email="admin@test.edu", role="ADMIN")
self.assertEqual(u_admin.get_institutional_role(), "admin")
self.assertTrue(u_admin.is_admin())
badge = u_admin.role_badge_display
self.assertIn("badge-admin", badge["class"])
self.assertIn("Administrador", badge["label"])
def test_admin_dashboard_rendered(self):
"""Verifica que el dashboard administrativo renderiza KPIs y accesos de administración"""
res = self.client.get('/?view_as=admin')
self.assertEqual(res.status_code, 200)
html = res.get_data(as_text=True)
self.assertIn('Aulas Totales', html)
self.assertIn('Oferta de Materias', html)
self.assertIn('Usuarios Activos', html)
self.assertIn('Módulos de Gestión & Visualización de Menús', html)
self.assertIn('Espacios & Sedes', html)
self.assertIn('Auditoría & RBAC', html)
def test_bedelia_dashboard_rendered(self):
"""Verifica que el dashboard de bedelía renderiza métricas operativas de campus"""
res = self.client.get('/?view_as=bedelia')
self.assertEqual(res.status_code, 200)
html = res.get_data(as_text=True)
self.assertIn('Aulas Presenciales', html)
self.assertIn('Salas Virtuales', html)
self.assertIn('Acciones Rápidas & Menús Operativos de Bedelía', html)
self.assertIn('Cartelera del Día', html)
self.assertIn('Sincronizar Sheets', html)
def test_docente_dashboard_rendered(self):
"""Verifica que el dashboard del docente renderiza sus clases y accesos directos"""
res = self.client.get('/?view_as=docente')
self.assertEqual(res.status_code, 200)
html = res.get_data(as_text=True)
self.assertIn('Mis Clases Hoy', html)
self.assertIn('Mis Reservas Activas', html)
self.assertIn('Reservar Aula', html)
self.assertIn('Accesos Directos de Docencia & Visualización de Menús', html)
self.assertIn('Mis Clases Programadas para Hoy', html)
def test_alumno_dashboard_rendered(self):
"""Verifica que el dashboard del alumno muestra la brújula diaria y herramientas de cursada"""
res = self.client.get('/?view_as=alumno')
self.assertEqual(res.status_code, 200)
html = res.get_data(as_text=True)
self.assertIn('¿Dónde curso hoy? - Cartelera del Alumno', html)
self.assertIn('Menú del Alumno & Herramientas de Cursada', html)
self.assertIn('Cartelera de Hoy', html)
self.assertIn('Cronograma Semanal', html)
self.assertIn('Aulas Virtuales', html)
def test_audit_logs_view(self):
"""Verifica que la vista de auditoría institucional responde correctamente"""
res = self.client.get('/admin/audit-logs')
self.assertEqual(res.status_code, 200)
html = res.get_data(as_text=True)
self.assertIn('Registro de Auditoría Institucional', html)
self.assertIn('Trazabilidad completa de operaciones', html)
if __name__ == '__main__':
unittest.main()