347 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			347 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import pytest
 | |
| from datetime import datetime, date
 | |
| from models import db, ClassGroup, Student, Assessment, Exercise, GradingElement, Grade
 | |
| 
 | |
| 
 | |
| class TestClassGroup:
 | |
|     def test_create_class_group(self, app):
 | |
|         with app.app_context():
 | |
|             class_group = ClassGroup(name="6A", description="Classe de 6ème A", year="2023-2024")
 | |
|             db.session.add(class_group)
 | |
|             db.session.commit()
 | |
|             
 | |
|             assert class_group.id is not None
 | |
|             assert class_group.name == "6A"
 | |
|             assert class_group.description == "Classe de 6ème A"
 | |
|             assert class_group.year == "2023-2024"
 | |
|     
 | |
|     def test_class_group_repr(self, app):
 | |
|         with app.app_context():
 | |
|             class_group = ClassGroup(name="6A", year="2023-2024")
 | |
|             assert repr(class_group) == "<ClassGroup 6A>"
 | |
|     
 | |
|     def test_class_group_unique_name(self, app):
 | |
|         with app.app_context():
 | |
|             class_group1 = ClassGroup(name="6A", year="2023-2024")
 | |
|             class_group2 = ClassGroup(name="6A", year="2023-2024")
 | |
|             
 | |
|             db.session.add(class_group1)
 | |
|             db.session.commit()
 | |
|             
 | |
|             db.session.add(class_group2)
 | |
|             with pytest.raises(Exception):
 | |
|                 db.session.commit()
 | |
| 
 | |
| 
 | |
| class TestStudent:
 | |
|     def test_create_student(self, app):
 | |
|         with app.app_context():
 | |
|             class_group = ClassGroup(name="6A", year="2023-2024")
 | |
|             db.session.add(class_group)
 | |
|             db.session.commit()
 | |
|             
 | |
|             student = Student(
 | |
|                 first_name="Jean",
 | |
|                 last_name="Dupont",
 | |
|                 email="jean.dupont@example.com",
 | |
|                 class_group_id=class_group.id
 | |
|             )
 | |
|             db.session.add(student)
 | |
|             db.session.commit()
 | |
|             
 | |
|             assert student.id is not None
 | |
|             assert student.first_name == "Jean"
 | |
|             assert student.last_name == "Dupont"
 | |
|             assert student.email == "jean.dupont@example.com"
 | |
|             assert student.class_group_id == class_group.id
 | |
|     
 | |
|     def test_student_full_name_property(self, app):
 | |
|         with app.app_context():
 | |
|             class_group = ClassGroup(name="6A", year="2023-2024")
 | |
|             db.session.add(class_group)
 | |
|             db.session.commit()
 | |
|             
 | |
|             student = Student(
 | |
|                 first_name="Jean",
 | |
|                 last_name="Dupont",
 | |
|                 class_group_id=class_group.id
 | |
|             )
 | |
|             assert student.full_name == "Jean Dupont"
 | |
|     
 | |
|     def test_student_repr(self, app):
 | |
|         with app.app_context():
 | |
|             class_group = ClassGroup(name="6A", year="2023-2024")
 | |
|             db.session.add(class_group)
 | |
|             db.session.commit()
 | |
|             
 | |
|             student = Student(
 | |
|                 first_name="Jean",
 | |
|                 last_name="Dupont",
 | |
|                 class_group_id=class_group.id
 | |
|             )
 | |
|             assert repr(student) == "<Student Jean Dupont>"
 | |
|     
 | |
|     def test_student_unique_email(self, app):
 | |
|         with app.app_context():
 | |
|             class_group = ClassGroup(name="6A", year="2023-2024")
 | |
|             db.session.add(class_group)
 | |
|             db.session.commit()
 | |
|             
 | |
|             student1 = Student(
 | |
|                 first_name="Jean",
 | |
|                 last_name="Dupont",
 | |
|                 email="jean.dupont@example.com",
 | |
|                 class_group_id=class_group.id
 | |
|             )
 | |
|             student2 = Student(
 | |
|                 first_name="Marie",
 | |
|                 last_name="Martin",
 | |
|                 email="jean.dupont@example.com",
 | |
|                 class_group_id=class_group.id
 | |
|             )
 | |
|             
 | |
|             db.session.add(student1)
 | |
|             db.session.commit()
 | |
|             
 | |
|             db.session.add(student2)
 | |
|             with pytest.raises(Exception):
 | |
|                 db.session.commit()
 | |
| 
 | |
| 
 | |
| class TestAssessment:
 | |
|     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()
 | |
|             
 | |
|             assessment = Assessment(
 | |
|                 title="Contrôle de mathématiques",
 | |
|                 description="Contrôle sur les fractions",
 | |
|                 date=date(2023, 10, 15),
 | |
|                 class_group_id=class_group.id,
 | |
|                 coefficient=2.0
 | |
|             )
 | |
|             db.session.add(assessment)
 | |
|             db.session.commit()
 | |
|             
 | |
|             assert assessment.id is not None
 | |
|             assert assessment.title == "Contrôle de mathématiques"
 | |
|             assert assessment.description == "Contrôle sur les fractions"
 | |
|             assert assessment.date == date(2023, 10, 15)
 | |
|             assert assessment.coefficient == 2.0
 | |
|     
 | |
|     def test_assessment_default_coefficient(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="Contrôle",
 | |
|                 class_group_id=class_group.id
 | |
|             )
 | |
|             # Default value is set in the column definition, check after saving
 | |
|             db.session.add(assessment)
 | |
|             db.session.commit()
 | |
|             assert assessment.coefficient == 1.0
 | |
|     
 | |
|     def test_assessment_repr(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="Contrôle de mathématiques",
 | |
|                 class_group_id=class_group.id
 | |
|             )
 | |
|             assert repr(assessment) == "<Assessment Contrôle de mathématiques>"
 | |
| 
 | |
| 
 | |
| class TestExercise:
 | |
|     def test_create_exercise(self, app):
 | |
|         with app.app_context():
 | |
|             class_group = ClassGroup(name="6A", year="2023-2024")
 | |
|             assessment = Assessment(title="Contrôle", class_group_id=1)
 | |
|             
 | |
|             db.session.add(class_group)
 | |
|             db.session.commit()
 | |
|             assessment.class_group_id = class_group.id
 | |
|             db.session.add(assessment)
 | |
|             db.session.commit()
 | |
|             
 | |
|             exercise = Exercise(
 | |
|                 assessment_id=assessment.id,
 | |
|                 title="Exercice 1",
 | |
|                 description="Calculs avec fractions",
 | |
|                 order=1
 | |
|             )
 | |
|             db.session.add(exercise)
 | |
|             db.session.commit()
 | |
|             
 | |
|             assert exercise.id is not None
 | |
|             assert exercise.title == "Exercice 1"
 | |
|             assert exercise.description == "Calculs avec fractions"
 | |
|             assert exercise.order == 1
 | |
|     
 | |
|     def test_exercise_default_order(self, app):
 | |
|         with app.app_context():
 | |
|             class_group = ClassGroup(name="6A", year="2023-2024")
 | |
|             assessment = Assessment(title="Contrôle", class_group_id=1)
 | |
|             
 | |
|             db.session.add(class_group)
 | |
|             db.session.commit()
 | |
|             assessment.class_group_id = class_group.id
 | |
|             db.session.add(assessment)
 | |
|             db.session.commit()
 | |
|             
 | |
|             exercise = Exercise(
 | |
|                 assessment_id=assessment.id,
 | |
|                 title="Exercice 1"
 | |
|             )
 | |
|             # Default value is set in the column definition, check after saving
 | |
|             db.session.add(exercise)
 | |
|             db.session.commit()
 | |
|             assert exercise.order == 1
 | |
|     
 | |
|     def test_exercise_repr(self, app):
 | |
|         with app.app_context():
 | |
|             exercise = Exercise(title="Exercice 1", assessment_id=1)
 | |
|             assert repr(exercise) == "<Exercise Exercice 1>"
 | |
| 
 | |
| 
 | |
| class TestGradingElement:
 | |
|     def test_create_grading_element(self, app):
 | |
|         with app.app_context():
 | |
|             class_group = ClassGroup(name="6A", year="2023-2024")
 | |
|             assessment = Assessment(title="Contrôle", class_group_id=1)
 | |
|             
 | |
|             db.session.add(class_group)
 | |
|             db.session.commit()
 | |
|             assessment.class_group_id = class_group.id
 | |
|             db.session.add(assessment)
 | |
|             db.session.commit()
 | |
|             
 | |
|             exercise = Exercise(assessment_id=assessment.id, title="Exercice 1")
 | |
|             db.session.add(exercise)
 | |
|             db.session.commit()
 | |
|             
 | |
|             grading_element = GradingElement(
 | |
|                 exercise_id=exercise.id,
 | |
|                 label="Question 1",
 | |
|                 description="Calculer 1/2 + 1/3",
 | |
|                 skill="Additionner des fractions",
 | |
|                 max_points=4.0,
 | |
|                 grading_type="points"
 | |
|             )
 | |
|             db.session.add(grading_element)
 | |
|             db.session.commit()
 | |
|             
 | |
|             assert grading_element.id is not None
 | |
|             assert grading_element.label == "Question 1"
 | |
|             assert grading_element.max_points == 4.0
 | |
|             assert grading_element.grading_type == "points"
 | |
|     
 | |
|     def test_grading_element_default_type(self, app):
 | |
|         with app.app_context():
 | |
|             class_group = ClassGroup(name="6A", year="2023-2024")
 | |
|             assessment = Assessment(title="Contrôle", class_group_id=1)
 | |
|             
 | |
|             db.session.add(class_group)
 | |
|             db.session.commit()
 | |
|             assessment.class_group_id = class_group.id
 | |
|             db.session.add(assessment)
 | |
|             db.session.commit()
 | |
|             
 | |
|             exercise = Exercise(assessment_id=assessment.id, title="Exercice 1")
 | |
|             db.session.add(exercise)
 | |
|             db.session.commit()
 | |
|             
 | |
|             grading_element = GradingElement(
 | |
|                 exercise_id=exercise.id,
 | |
|                 label="Question 1",
 | |
|                 max_points=4.0
 | |
|             )
 | |
|             # Default value is set in the column definition, check after saving
 | |
|             db.session.add(grading_element)
 | |
|             db.session.commit()
 | |
|             assert grading_element.grading_type == "points"
 | |
|     
 | |
|     def test_grading_element_repr(self, app):
 | |
|         with app.app_context():
 | |
|             grading_element = GradingElement(
 | |
|                 exercise_id=1,
 | |
|                 label="Question 1",
 | |
|                 max_points=4.0
 | |
|             )
 | |
|             assert repr(grading_element) == "<GradingElement Question 1>"
 | |
| 
 | |
| 
 | |
| class TestGrade:
 | |
|     def test_create_grade(self, app):
 | |
|         with app.app_context():
 | |
|             class_group = ClassGroup(name="6A", year="2023-2024")
 | |
|             db.session.add(class_group)
 | |
|             db.session.commit()
 | |
|             
 | |
|             student = Student(
 | |
|                 first_name="Jean",
 | |
|                 last_name="Dupont",
 | |
|                 class_group_id=class_group.id
 | |
|             )
 | |
|             db.session.add(student)
 | |
|             db.session.commit()
 | |
|             
 | |
|             assessment = Assessment(title="Contrôle", class_group_id=class_group.id)
 | |
|             db.session.add(assessment)
 | |
|             db.session.commit()
 | |
|             
 | |
|             exercise = Exercise(assessment_id=assessment.id, title="Exercice 1")
 | |
|             db.session.add(exercise)
 | |
|             db.session.commit()
 | |
|             
 | |
|             grading_element = GradingElement(
 | |
|                 exercise_id=exercise.id,
 | |
|                 label="Question 1",
 | |
|                 max_points=4.0
 | |
|             )
 | |
|             db.session.add(grading_element)
 | |
|             db.session.commit()
 | |
|             
 | |
|             grade = Grade(
 | |
|                 student_id=student.id,
 | |
|                 grading_element_id=grading_element.id,
 | |
|                 value="3.5",
 | |
|                 comment="Très bien"
 | |
|             )
 | |
|             db.session.add(grade)
 | |
|             db.session.commit()
 | |
|             
 | |
|             assert grade.id is not None
 | |
|             assert grade.value == "3.5"
 | |
|             assert grade.comment == "Très bien"
 | |
|     
 | |
|     def test_grade_repr_with_student(self, app):
 | |
|         with app.app_context():
 | |
|             class_group = ClassGroup(name="6A", year="2023-2024")
 | |
|             db.session.add(class_group)
 | |
|             db.session.commit()
 | |
|             
 | |
|             student = Student(
 | |
|                 first_name="Jean",
 | |
|                 last_name="Dupont",
 | |
|                 class_group_id=class_group.id
 | |
|             )
 | |
|             db.session.add(student)
 | |
|             db.session.commit()
 | |
|             
 | |
|             grade = Grade(
 | |
|                 student_id=student.id,
 | |
|                 grading_element_id=1,
 | |
|                 value="3.5"
 | |
|             )
 | |
|             db.session.add(grade)
 | |
|             db.session.commit()
 | |
|             
 | |
|             assert repr(grade) == "<Grade 3.5 for Jean>" |