104 lines
4.6 KiB
Python
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()
|