277 lines
9.9 KiB
Python
277 lines
9.9 KiB
Python
import pytest
|
|
from datetime import date
|
|
from models import db, Assessment, ClassGroup, Exercise, GradingElement
|
|
from repositories.assessment_repository import AssessmentRepository
|
|
|
|
|
|
class TestAssessmentRepository:
|
|
"""Tests pour le repository Assessment."""
|
|
|
|
def test_find_by_id(self, app):
|
|
"""Test de recherche par ID."""
|
|
with app.app_context():
|
|
repo = AssessmentRepository()
|
|
|
|
# Créer des données de test
|
|
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,
|
|
date=date(2023, 10, 15)
|
|
)
|
|
db.session.add(assessment)
|
|
db.session.commit()
|
|
|
|
# Test
|
|
found = repo.find_by_id(assessment.id)
|
|
assert found is not None
|
|
assert found.title == "Test Assessment"
|
|
assert found.id == assessment.id
|
|
|
|
def test_find_all(self, app):
|
|
"""Test de recherche de tous les éléments."""
|
|
with app.app_context():
|
|
repo = AssessmentRepository()
|
|
|
|
# Créer des données de test
|
|
class_group = ClassGroup(name="6A", year="2023-2024")
|
|
db.session.add(class_group)
|
|
db.session.commit()
|
|
|
|
assessment1 = Assessment(
|
|
title="Assessment 1",
|
|
trimester=1,
|
|
class_group_id=class_group.id,
|
|
date=date(2023, 10, 15)
|
|
)
|
|
assessment2 = Assessment(
|
|
title="Assessment 2",
|
|
trimester=2,
|
|
class_group_id=class_group.id,
|
|
date=date(2023, 12, 15)
|
|
)
|
|
db.session.add_all([assessment1, assessment2])
|
|
db.session.commit()
|
|
|
|
# Test
|
|
all_assessments = repo.find_all()
|
|
assert len(all_assessments) >= 2
|
|
titles = [a.title for a in all_assessments]
|
|
assert "Assessment 1" in titles
|
|
assert "Assessment 2" in titles
|
|
|
|
def test_find_by_filters_trimester(self, app):
|
|
"""Test de recherche par trimestre."""
|
|
with app.app_context():
|
|
repo = AssessmentRepository()
|
|
|
|
# Créer des données de test
|
|
class_group = ClassGroup(name="6A", year="2023-2024")
|
|
db.session.add(class_group)
|
|
db.session.commit()
|
|
|
|
assessment1 = Assessment(
|
|
title="Assessment T1",
|
|
trimester=1,
|
|
class_group_id=class_group.id,
|
|
date=date(2023, 10, 15)
|
|
)
|
|
assessment2 = Assessment(
|
|
title="Assessment T2",
|
|
trimester=2,
|
|
class_group_id=class_group.id,
|
|
date=date(2023, 12, 15)
|
|
)
|
|
db.session.add_all([assessment1, assessment2])
|
|
db.session.commit()
|
|
|
|
# Test
|
|
t1_assessments = repo.find_by_filters(trimester=1)
|
|
assert len(t1_assessments) >= 1
|
|
assert all(a.trimester == 1 for a in t1_assessments)
|
|
|
|
t2_assessments = repo.find_by_filters(trimester=2)
|
|
assert len(t2_assessments) >= 1
|
|
assert all(a.trimester == 2 for a in t2_assessments)
|
|
|
|
def test_find_by_filters_class_id(self, app):
|
|
"""Test de recherche par classe."""
|
|
with app.app_context():
|
|
repo = AssessmentRepository()
|
|
|
|
# Créer des données de test
|
|
class_group1 = ClassGroup(name="6A", year="2023-2024")
|
|
class_group2 = ClassGroup(name="6B", year="2023-2024")
|
|
db.session.add_all([class_group1, class_group2])
|
|
db.session.commit()
|
|
|
|
assessment1 = Assessment(
|
|
title="Assessment 6A",
|
|
trimester=1,
|
|
class_group_id=class_group1.id,
|
|
date=date(2023, 10, 15)
|
|
)
|
|
assessment2 = Assessment(
|
|
title="Assessment 6B",
|
|
trimester=1,
|
|
class_group_id=class_group2.id,
|
|
date=date(2023, 10, 15)
|
|
)
|
|
db.session.add_all([assessment1, assessment2])
|
|
db.session.commit()
|
|
|
|
# Test
|
|
class1_assessments = repo.find_by_filters(class_id=class_group1.id)
|
|
assert len(class1_assessments) >= 1
|
|
assert all(a.class_group_id == class_group1.id for a in class1_assessments)
|
|
|
|
class2_assessments = repo.find_by_filters(class_id=class_group2.id)
|
|
assert len(class2_assessments) >= 1
|
|
assert all(a.class_group_id == class_group2.id for a in class2_assessments)
|
|
|
|
def test_find_with_full_details(self, app):
|
|
"""Test de recherche avec tous les détails."""
|
|
with app.app_context():
|
|
repo = AssessmentRepository()
|
|
|
|
# Créer des données de test
|
|
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,
|
|
date=date(2023, 10, 15)
|
|
)
|
|
db.session.add(assessment)
|
|
db.session.commit()
|
|
|
|
exercise = Exercise(
|
|
title="Exercise 1",
|
|
assessment_id=assessment.id
|
|
)
|
|
db.session.add(exercise)
|
|
db.session.commit()
|
|
|
|
grading_element = GradingElement(
|
|
label="Question 1",
|
|
max_points=5.0,
|
|
exercise_id=exercise.id
|
|
)
|
|
db.session.add(grading_element)
|
|
db.session.commit()
|
|
|
|
# Test
|
|
found = repo.find_with_full_details(assessment.id)
|
|
assert found is not None
|
|
assert found.title == "Test Assessment"
|
|
assert found.class_group is not None
|
|
assert found.class_group.name == "6A"
|
|
assert len(found.exercises) >= 1
|
|
assert found.exercises[0].title == "Exercise 1"
|
|
assert len(found.exercises[0].grading_elements) >= 1
|
|
assert found.exercises[0].grading_elements[0].label == "Question 1"
|
|
|
|
def test_find_recent(self, app):
|
|
"""Test de recherche des évaluations récentes."""
|
|
with app.app_context():
|
|
repo = AssessmentRepository()
|
|
|
|
# Créer des données de test
|
|
class_group = ClassGroup(name="6A", year="2023-2024")
|
|
db.session.add(class_group)
|
|
db.session.commit()
|
|
|
|
# Créer plusieurs assessments avec dates différentes
|
|
assessments = []
|
|
for i in range(7):
|
|
assessment = Assessment(
|
|
title=f"Assessment {i}",
|
|
trimester=1,
|
|
class_group_id=class_group.id,
|
|
date=date(2023, 10, i + 1)
|
|
)
|
|
assessments.append(assessment)
|
|
|
|
db.session.add_all(assessments)
|
|
db.session.commit()
|
|
|
|
# Test
|
|
recent = repo.find_recent(limit=5)
|
|
assert len(recent) == 5
|
|
|
|
# Vérifier que c'est trié par date décroissante
|
|
dates = [a.date for a in recent]
|
|
assert dates == sorted(dates, reverse=True)
|
|
|
|
def test_save_and_commit(self, app):
|
|
"""Test de sauvegarde."""
|
|
with app.app_context():
|
|
repo = AssessmentRepository()
|
|
|
|
# Créer des données de test
|
|
class_group = ClassGroup(name="6A", year="2023-2024")
|
|
db.session.add(class_group)
|
|
db.session.commit()
|
|
|
|
# Créer un assessment
|
|
assessment = Assessment(
|
|
title="New Assessment",
|
|
trimester=1,
|
|
class_group_id=class_group.id,
|
|
date=date(2023, 10, 15)
|
|
)
|
|
|
|
# Test save
|
|
saved = repo.save(assessment)
|
|
assert saved is assessment
|
|
|
|
# L'objet est dans la session mais pas encore committé
|
|
assert assessment.id is None # Pas d'ID tant qu'on n'a pas flush/commit
|
|
|
|
# Commit
|
|
repo.commit()
|
|
|
|
# Maintenant en base avec un ID
|
|
assert assessment.id is not None
|
|
found = Assessment.query.filter_by(title="New Assessment").first()
|
|
assert found is not None
|
|
assert found.title == "New Assessment"
|
|
|
|
def test_delete(self, app):
|
|
"""Test de suppression."""
|
|
with app.app_context():
|
|
repo = AssessmentRepository()
|
|
|
|
# Créer des données de test
|
|
class_group = ClassGroup(name="6A", year="2023-2024")
|
|
db.session.add(class_group)
|
|
db.session.commit()
|
|
|
|
assessment = Assessment(
|
|
title="To Delete",
|
|
trimester=1,
|
|
class_group_id=class_group.id,
|
|
date=date(2023, 10, 15)
|
|
)
|
|
db.session.add(assessment)
|
|
db.session.commit()
|
|
assessment_id = assessment.id
|
|
|
|
# Vérifier qu'il existe
|
|
found = repo.find_by_id(assessment_id)
|
|
assert found is not None
|
|
|
|
# Supprimer
|
|
repo.delete(assessment)
|
|
repo.commit()
|
|
|
|
# Vérifier qu'il n'existe plus
|
|
found = repo.find_by_id(assessment_id)
|
|
assert found is None |