Files
notytex/tests/test_services.py
2025-08-05 06:13:54 +02:00

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)