import unittest from datetime import datetime, timedelta from app import create_app, db from app.models.user import User from app.models.classroom import Classroom from app.models.building import Building from app.models.subject import Commission from app.schemas.classroom_dto import ClassroomCreateDTO from app.schemas.reservation_dto import ReservationCreateDTO from app.services.classroom_service import ClassroomService from app.services.reservation_service import ReservationService from app.services.user_service import UserService class TestServicesAndDTO(unittest.TestCase): def setUp(self): self.app = create_app() self.app.config['TESTING'] = True self.app.config['WTF_CSRF_ENABLED'] = False self.app_context = self.app.app_context() self.app_context.push() self.classroom_service = ClassroomService() self.reservation_service = ReservationService() self.user_service = UserService() def tearDown(self): db.session.rollback() self.app_context.pop() def test_dto_validation(self): # Valid ClassroomCreateDTO dto = ClassroomCreateDTO(code="Aula Test 101", floor="1", capacity=40, building_name="Edificio Central") self.assertEqual(dto.code, "Aula Test 101") self.assertEqual(dto.capacity, 40) # Invalid Reservation range (end before start) with self.assertRaises(Exception): ReservationCreateDTO( classroom_id=1, commission_id=1, user_id=1, start_time=datetime(2026, 9, 10, 10, 0), end_time=datetime(2026, 9, 10, 9, 0), purpose="Clase Test" ) def test_classroom_service_listing(self): classrooms = self.classroom_service.list_classrooms() self.assertIsInstance(classrooms, list) def test_user_service_profile(self): user = User.query.first() if user: profile = self.user_service.get_profile_data(user) self.assertIn('email', profile) self.assertIn('role', profile) self.assertIn('permissions', profile) if __name__ == '__main__': unittest.main()