143 lines
6.4 KiB
Python
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() |