#!/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()