Files
notytex/tests/test_special_values_input.py
2025-08-05 21:23:49 +02:00

143 lines
6.4 KiB
Python

#!/usr/bin/env python3
"""
Test pour diagnostiquer le problème de saisie des valeurs spéciales
dans la page de notation.
"""
from app import create_app
from app_config import config_manager
def test_special_values_input():
"""Test des valeurs spéciales dans l'interface de notation."""
app = create_app('development')
with app.app_context():
print("=== DIAGNOSTIC : Problème saisie valeurs spéciales ===\n")
# 1. Vérifier les valeurs spéciales configurées
print("1. Valeurs spéciales configurées:")
scale_values = config_manager.get_competence_scale_values()
special_values = ['.', 'd', 'a']
for value in special_values:
if value in scale_values:
config = scale_values[value]
print(f" '{value}': {config['label']} (couleur: {config['color']})")
else:
print(f" '{value}': NON CONFIGURÉE")
print()
# 2. Tester l'accès à une page de notation
print("2. Test d'accès à la page de notation:")
with app.test_client() as client:
response = client.get('/assessments/1/grading')
print(f" Statut: {response.status_code}")
if response.status_code == 200:
content = response.get_data(as_text=True)
# Vérifier la présence des valeurs spéciales dans le HTML
print(" Vérification des valeurs spéciales dans le HTML:")
for value in special_values:
if value in scale_values:
label = scale_values[value]['label']
if f"value=\"{value}\"" in content:
print(f"'{value}' trouvé dans le HTML")
else:
print(f"'{value}' NON trouvé dans le HTML")
if label in content:
print(f" ✅ Label '{label}' trouvé dans le HTML")
else:
print(f" ❌ Label '{label}' NON trouvé dans le HTML")
else:
print(f" ❌ Erreur d'accès: {response.status_code}")
print()
# 3. Analyser le template pour les valeurs spéciales
print("3. Analyse du template assessment_grading.html:")
try:
with open('templates/assessment_grading.html', 'r', encoding='utf-8') as f:
template_content = f.read()
# Chercher les patterns pour les valeurs spéciales
import re
# Pattern pour les valeurs spéciales hardcodées
hardcoded_pattern = r"for special_value in \['\.', 'd', 'a'\]"
if re.search(hardcoded_pattern, template_content):
print(" ✅ Pattern des valeurs spéciales trouvé")
else:
print(" ❌ Pattern des valeurs spéciales NON trouvé")
# Pattern pour la vérification si la valeur existe dans scale_values
check_pattern = r"if special_value in scale_values"
if re.search(check_pattern, template_content):
print(" ✅ Vérification 'if special_value in scale_values' trouvée")
else:
print(" ❌ Vérification 'if special_value in scale_values' NON trouvée")
# Pattern pour l'affichage des valeurs spéciales
display_pattern = r"config_manager\.get_display_info\(special_value, 'score'\)"
if re.search(display_pattern, template_content):
print(" ✅ Utilisation de get_display_info pour valeurs spéciales trouvée")
else:
print(" ❌ Utilisation de get_display_info pour valeurs spéciales NON trouvée")
except FileNotFoundError:
print(" ❌ Fichier template non trouvé")
print()
# 4. Test de validation côté serveur
print("4. Test de validation côté serveur:")
# Tester validate_grade_value pour valeurs spéciales
test_values = ['.', 'd', 'a', '0', '1', '2', '3', 'invalid']
for value in test_values:
is_valid_score = config_manager.validate_grade_value(value, 'score')
is_valid_notes = config_manager.validate_grade_value(value, 'notes')
print(f" '{value}': score={is_valid_score}, notes={is_valid_notes}")
print()
# 5. Test de soumission simulée avec valeurs spéciales
print("5. Test de soumission avec valeurs spéciales:")
with app.test_client() as client:
# Simuler une soumission avec des valeurs spéciales
form_data = {
'grade_1_1': '.', # Valeur spéciale "pas de réponse"
'grade_1_2': 'd', # Valeur spéciale "dispensé"
'grade_1_3': '2', # Valeur normale
}
response = client.post('/assessments/1/grading/save', data=form_data, follow_redirects=False)
print(f" Soumission avec valeurs spéciales: {response.status_code}")
if response.status_code == 302: # Redirect après succès
print(" ✅ Soumission acceptée (redirection)")
elif response.status_code == 200:
print(" ⚠️ Soumission retournée à la page (possibles erreurs)")
else:
print(f" ❌ Erreur lors de la soumission: {response.status_code}")
print()
# 6. Diagnostic final
print("6. DIAGNOSTIC FINAL:")
# Vérifier si toutes les valeurs spéciales sont bien configurées
missing_special_values = []
for value in special_values:
if value not in scale_values:
missing_special_values.append(value)
if missing_special_values:
print(f" 🚨 PROBLÈME: Valeurs spéciales manquantes: {missing_special_values}")
print(" 📋 SOLUTION: Ajouter ces valeurs via la page config/scale")
else:
print(" ✅ Toutes les valeurs spéciales sont configurées")
print(" 📋 Vérifier si le problème vient du JavaScript ou de la validation")
print("\n=== Fin du diagnostic ===")
if __name__ == '__main__':
test_special_values_input()