feat: implementacion de dashboards por rol, soporte de clases virtuales concurrentes en importador de sheets y cartelera del dia
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user