104 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import pytest
 | |
| import json
 | |
| from models import db, Assessment, ClassGroup, Exercise, GradingElement
 | |
| from datetime import date
 | |
| 
 | |
| 
 | |
| class TestAssessmentsRoutes:
 | |
|     def test_assessments_list_empty(self, client):
 | |
|         response = client.get('/assessments/')
 | |
|         assert response.status_code == 200
 | |
|         assert b'assessments' in response.data.lower()
 | |
|     
 | |
|     def test_assessments_list_with_data(self, client, 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 Math",
 | |
|                 description="Contrôle de mathématiques",
 | |
|                 date=date(2023, 10, 15),
 | |
|                 class_group_id=class_group.id
 | |
|             )
 | |
|             db.session.add(assessment)
 | |
|             db.session.commit()
 | |
|         
 | |
|         response = client.get('/assessments/')
 | |
|         assert response.status_code == 200
 | |
|         assert b'Test Math' in response.data
 | |
|     
 | |
|     def test_assessment_detail_exists(self, client, 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 Math",
 | |
|                 description="Contrôle de mathématiques",
 | |
|                 date=date(2023, 10, 15),
 | |
|                 class_group_id=class_group.id
 | |
|             )
 | |
|             db.session.add(assessment)
 | |
|             db.session.commit()
 | |
|             assessment_id = assessment.id
 | |
|         
 | |
|         response = client.get(f'/assessments/{assessment_id}')
 | |
|         assert response.status_code == 200
 | |
|         assert b'Test Math' in response.data
 | |
|     
 | |
|     def test_assessment_detail_not_found(self, client):
 | |
|         response = client.get('/assessments/999')
 | |
|         # Due to handle_db_errors decorator, 404 gets converted to 500
 | |
|         assert response.status_code == 500
 | |
|     
 | |
|     def test_assessment_with_exercises(self, client, 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 Math",
 | |
|                 class_group_id=class_group.id
 | |
|             )
 | |
|             db.session.add(assessment)
 | |
|             db.session.commit()
 | |
|             
 | |
|             exercise = Exercise(
 | |
|                 assessment_id=assessment.id,
 | |
|                 title="Exercice 1",
 | |
|                 order=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()
 | |
|             
 | |
|             assessment_id = assessment.id
 | |
|         
 | |
|         response = client.get(f'/assessments/{assessment_id}')
 | |
|         assert response.status_code == 200
 | |
|         assert b'Test Math' in response.data
 | |
|         assert b'Exercice 1' in response.data
 | |
| 
 | |
| 
 | |
| class TestAssessmentCreation:
 | |
|     def test_assessment_new_route_exists(self, client):
 | |
|         # Test that the new route exists and returns a form page
 | |
|         response = client.get('/assessments/new')
 | |
|         assert response.status_code == 200
 | |
|     
 | |
|     def test_assessment_creation_post_without_data(self, client):
 | |
|         # Test POST to new route without proper data
 | |
|         response = client.post('/assessments/new', data={})
 | |
|         # Should return form with errors or redirect
 | |
|         assert response.status_code in [200, 302, 400] |