Files
notytex/tests/test_forms.py

159 lines
6.7 KiB
Python

import pytest
from datetime import date
from forms import AssessmentForm, ClassGroupForm, StudentForm
from models import db, ClassGroup
from repositories import ClassRepository
class TestAssessmentForm:
def test_assessment_form_valid_data(self, app):
with app.app_context():
class_group = ClassGroup(name="6A", year="2023-2024")
db.session.add(class_group)
db.session.commit()
# Create form without CSRF token for testing
with app.test_request_context():
form = AssessmentForm()
form.title.data = 'Test Math'
form.description.data = 'Contrôle de mathématiques'
form.date.data = date(2023, 10, 15)
form.class_group_id.data = class_group.id
form.coefficient.data = 2.0
assert form.title.data == 'Test Math'
assert form.description.data == 'Contrôle de mathématiques'
assert form.date.data == date(2023, 10, 15)
assert form.class_group_id.data == class_group.id
assert form.coefficient.data == 2.0
def test_assessment_form_missing_title(self, app):
with app.app_context():
class_group = ClassGroup(name="6A", year="2023-2024")
db.session.add(class_group)
db.session.commit()
with app.test_request_context():
# Test form data validation by checking field requirements
form = AssessmentForm()
# Title field is required, so it should be marked as required
assert form.title.flags.required
def test_assessment_form_coefficient_field(self, app):
with app.app_context():
with app.test_request_context():
form = AssessmentForm()
# Test that coefficient field exists and has validators
assert hasattr(form, 'coefficient')
assert form.coefficient.flags.required
# Check that NumberRange validator is present
has_number_range = any(v.__class__.__name__ == 'NumberRange' for v in form.coefficient.validators)
assert has_number_range
def test_assessment_form_default_values(self, app):
with app.app_context():
with app.test_request_context():
form = AssessmentForm()
# Test that defaults are callable functions, not values
assert callable(form.date.default)
assert form.coefficient.default == 1.0
def test_assessment_form_class_choices_populated(self, app):
with app.app_context():
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()
with app.test_request_context():
form = AssessmentForm()
class_repo = ClassRepository()
form.populate_class_choices(class_repo)
assert len(form.class_group_id.choices) >= 2
choice_names = [choice[1] for choice in form.class_group_id.choices]
assert "6A" in choice_names
assert "6B" in choice_names
class TestClassGroupForm:
def test_class_group_form_valid_data(self, app):
with app.app_context():
with app.test_request_context():
form = ClassGroupForm()
form.name.data = '6A'
form.description.data = 'Classe de 6ème A'
form.year.data = '2023-2024'
assert form.name.data == '6A'
assert form.description.data == 'Classe de 6ème A'
assert form.year.data == '2023-2024'
def test_class_group_form_name_required(self, app):
with app.app_context():
with app.test_request_context():
form = ClassGroupForm()
# Test that name field is required
assert form.name.flags.required
def test_class_group_form_default_year(self, app):
with app.app_context():
with app.test_request_context():
form = ClassGroupForm()
assert form.year.default == "2024-2025"
class TestStudentForm:
def test_student_form_valid_data(self, app):
with app.app_context():
class_group = ClassGroup(name="6A", year="2023-2024")
db.session.add(class_group)
db.session.commit()
with app.test_request_context():
form = StudentForm()
form.first_name.data = 'Jean'
form.last_name.data = 'Dupont'
form.email.data = 'jean.dupont@example.com'
form.class_group_id.data = class_group.id
assert form.first_name.data == 'Jean'
assert form.last_name.data == 'Dupont'
assert form.email.data == 'jean.dupont@example.com'
assert form.class_group_id.data == class_group.id
def test_student_form_required_fields(self, app):
with app.app_context():
with app.test_request_context():
form = StudentForm()
# Test that required fields are marked as required
assert form.first_name.flags.required
assert form.last_name.flags.required
assert form.class_group_id.flags.required
def test_student_form_email_validator(self, app):
with app.app_context():
with app.test_request_context():
form = StudentForm()
# Test that email field has email validator
has_email_validator = any(v.__class__.__name__ == 'Email' for v in form.email.validators)
assert has_email_validator
# Email field should be optional
assert not form.email.flags.required
def test_student_form_optional_email(self, app):
with app.app_context():
class_group = ClassGroup(name="6A", year="2023-2024")
db.session.add(class_group)
db.session.commit()
with app.test_request_context():
form = StudentForm()
form.first_name.data = 'Jean'
form.last_name.data = 'Dupont'
form.class_group_id.data = class_group.id
# Don't set email - should be valid
assert form.first_name.data == 'Jean'
assert form.last_name.data == 'Dupont'
assert form.email.data is None