137 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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),
 | |
|                 '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),
 | |
|                 '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),
 | |
|                 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),
 | |
|                 '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',
 | |
|                 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) |