import pytest from datetime import date, datetime from decimal import Decimal from models import db, Assessment, ClassGroup, Exercise, GradingElement from services import AssessmentService from utils import ValidationError class TestAssessmentService: def test_create_assessment(self, app): with app.app_context(): class_group = ClassGroup(name="6A", year="2023-2024") db.session.add(class_group) db.session.commit() form_data = { 'title': 'Test Math', 'description': 'Contrôle de mathématiques', 'date': date(2023, 10, 15), 'trimester': 1, 'class_group_id': class_group.id, 'coefficient': 2.0 } assessment = AssessmentService.create_assessment(form_data) assert assessment.id is not None assert assessment.title == 'Test Math' assert assessment.description == 'Contrôle de mathématiques' assert assessment.date == date(2023, 10, 15) assert assessment.class_group_id == class_group.id assert assessment.coefficient == 2.0 def test_create_assessment_minimal_data(self, app): with app.app_context(): class_group = ClassGroup(name="6A", year="2023-2024") db.session.add(class_group) db.session.commit() form_data = { 'title': 'Test Math', 'date': date(2023, 10, 15), 'trimester': 1, 'class_group_id': class_group.id, 'coefficient': 1.0 } assessment = AssessmentService.create_assessment(form_data) assert assessment.id is not None assert assessment.title == 'Test Math' assert assessment.description == '' assert assessment.coefficient == 1.0 def test_update_assessment_basic_info(self, app): with app.app_context(): class_group = ClassGroup(name="6A", year="2023-2024") db.session.add(class_group) db.session.commit() assessment = Assessment( title='Original Title', date=date(2023, 10, 15), trimester=1, class_group_id=class_group.id, coefficient=1.0 ) db.session.add(assessment) db.session.commit() form_data = { 'title': 'Updated Title', 'description': 'Updated description', 'date': date(2023, 10, 20), 'trimester': 2, 'class_group_id': class_group.id, 'coefficient': 2.0 } AssessmentService.update_assessment_basic_info(assessment, form_data) assert assessment.title == 'Updated Title' assert assessment.description == 'Updated description' assert assessment.date == date(2023, 10, 20) assert assessment.coefficient == 2.0 def test_delete_assessment_exercises(self, app): with app.app_context(): class_group = ClassGroup(name="6A", year="2023-2024") db.session.add(class_group) db.session.commit() assessment = Assessment( title='Test Assessment', trimester=1, class_group_id=class_group.id ) db.session.add(assessment) db.session.commit() exercise1 = Exercise(assessment_id=assessment.id, title="Ex 1") exercise2 = Exercise(assessment_id=assessment.id, title="Ex 2") db.session.add_all([exercise1, exercise2]) db.session.commit() initial_count = len(assessment.exercises) assert initial_count == 2 AssessmentService.delete_assessment_exercises(assessment) db.session.commit() # Refresh the assessment to get updated exercises db.session.refresh(assessment) assert len(assessment.exercises) == 0 def test_process_assessment_with_exercises_validation_error(self, app): with app.app_context(): # Test with missing required fields incomplete_data = { 'title': 'Test Assessment' # Missing date, class_group_id, coefficient } with pytest.raises(ValueError): AssessmentService.process_assessment_with_exercises(incomplete_data) def test_process_assessment_validation_required_fields(self, app): with app.app_context(): # Test that all required fields are validated required_fields = ['title', 'date', 'class_group_id', 'coefficient'] for field in required_fields: incomplete_data = { 'title': 'Test', 'date': '2023-10-15', 'class_group_id': 1, 'coefficient': 1.0 } del incomplete_data[field] with pytest.raises(ValueError): AssessmentService.process_assessment_with_exercises(incomplete_data)