142 lines
5.3 KiB
Python
142 lines
5.3 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),
|
|
'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) |