107 lines
3.8 KiB
Python
107 lines
3.8 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),
|
|
trimester=1,
|
|
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),
|
|
trimester=1,
|
|
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",
|
|
trimester=1,
|
|
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] |