140 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			140 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | #!/usr/bin/env python3 | ||
|  | """
 | ||
|  | Script de test pour le scraper de l'agenda du libre | ||
|  | """
 | ||
|  | 
 | ||
|  | import sys | ||
|  | import os | ||
|  | sys.path.append(os.path.dirname(os.path.abspath(__file__))) | ||
|  | 
 | ||
|  | from agendadulibre import AgendaDuLibreScraper, api_oedb | ||
|  | import logging | ||
|  | 
 | ||
|  | # Configuration du logging pour les tests | ||
|  | logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') | ||
|  | 
 | ||
|  | def test_ical_fetch(): | ||
|  |     """Test de récupération du fichier iCal""" | ||
|  |     print("🧪 Test de récupération du fichier iCal...") | ||
|  |      | ||
|  |     scraper = AgendaDuLibreScraper() | ||
|  |     calendar = scraper.fetch_ical_data() | ||
|  |      | ||
|  |     if calendar: | ||
|  |         print("✅ Fichier iCal récupéré avec succès") | ||
|  |          | ||
|  |         # Compter les événements | ||
|  |         event_count = 0 | ||
|  |         for component in calendar.walk(): | ||
|  |             if component.name == "VEVENT": | ||
|  |                 event_count += 1 | ||
|  |          | ||
|  |         print(f"📅 Nombre d'événements trouvés: {event_count}") | ||
|  |         return True | ||
|  |     else: | ||
|  |         print("❌ Échec de la récupération du fichier iCal") | ||
|  |         return False | ||
|  | 
 | ||
|  | def test_event_parsing(): | ||
|  |     """Test de parsing d'un événement""" | ||
|  |     print("🧪 Test de parsing d'événement...") | ||
|  |      | ||
|  |     scraper = AgendaDuLibreScraper() | ||
|  |     calendar = scraper.fetch_ical_data() | ||
|  |      | ||
|  |     if not calendar: | ||
|  |         print("❌ Impossible de récupérer le fichier iCal pour le test") | ||
|  |         return False | ||
|  |      | ||
|  |     # Trouver le premier événement | ||
|  |     for component in calendar.walk(): | ||
|  |         if component.name == "VEVENT": | ||
|  |             parsed_event = scraper.parse_event(component) | ||
|  |             if parsed_event: | ||
|  |                 print("✅ Événement parsé avec succès:") | ||
|  |                 print(f"   ID: {parsed_event['id']}") | ||
|  |                 print(f"   Titre: {parsed_event['event']['properties']['label']}") | ||
|  |                 print(f"   Début: {parsed_event['event']['properties']['start']}") | ||
|  |                 print(f"   Fin: {parsed_event['event']['properties']['stop']}") | ||
|  |                 print(f"   Lieu: {parsed_event['event']['properties']['where']}") | ||
|  |                 return True | ||
|  |             else: | ||
|  |                 print("❌ Échec du parsing de l'événement") | ||
|  |                 return False | ||
|  |      | ||
|  |     print("❌ Aucun événement trouvé pour le test") | ||
|  |     return False | ||
|  | 
 | ||
|  | def test_data_persistence(): | ||
|  |     """Test de persistance des données""" | ||
|  |     print("🧪 Test de persistance des données...") | ||
|  |      | ||
|  |     scraper = AgendaDuLibreScraper() | ||
|  |      | ||
|  |     # Test de sauvegarde | ||
|  |     test_data = { | ||
|  |         "events": { | ||
|  |             "test_event_123": { | ||
|  |                 "status": "saved", | ||
|  |                 "message": "Test event", | ||
|  |                 "last_attempt": "2024-01-01T00:00:00", | ||
|  |                 "event": { | ||
|  |                     "properties": { | ||
|  |                         "label": "Test Event", | ||
|  |                         "what": "culture.geek" | ||
|  |                     } | ||
|  |                 } | ||
|  |             } | ||
|  |         }, | ||
|  |         "last_update": "2024-01-01T00:00:00" | ||
|  |     } | ||
|  |      | ||
|  |     scraper.events_data = test_data | ||
|  |     scraper.save_events_data() | ||
|  |      | ||
|  |     # Test de chargement | ||
|  |     scraper2 = AgendaDuLibreScraper() | ||
|  |     if "test_event_123" in scraper2.events_data["events"]: | ||
|  |         print("✅ Persistance des données fonctionne correctement") | ||
|  |         return True | ||
|  |     else: | ||
|  |         print("❌ Échec de la persistance des données") | ||
|  |         return False | ||
|  | 
 | ||
|  | def main(): | ||
|  |     """Exécute tous les tests""" | ||
|  |     print("🚀 Démarrage des tests du scraper agenda du libre") | ||
|  |     print("=" * 50) | ||
|  |      | ||
|  |     tests = [ | ||
|  |         test_ical_fetch, | ||
|  |         test_event_parsing, | ||
|  |         test_data_persistence | ||
|  |     ] | ||
|  |      | ||
|  |     passed = 0 | ||
|  |     total = len(tests) | ||
|  |      | ||
|  |     for test in tests: | ||
|  |         try: | ||
|  |             if test(): | ||
|  |                 passed += 1 | ||
|  |             print() | ||
|  |         except Exception as e: | ||
|  |             print(f"❌ Erreur lors du test {test.__name__}: {e}") | ||
|  |             print() | ||
|  |      | ||
|  |     print("=" * 50) | ||
|  |     print(f"📊 Résultats: {passed}/{total} tests réussis") | ||
|  |      | ||
|  |     if passed == total: | ||
|  |         print("✅ Tous les tests sont passés!") | ||
|  |         return True | ||
|  |     else: | ||
|  |         print("❌ Certains tests ont échoué") | ||
|  |         return False | ||
|  | 
 | ||
|  | if __name__ == "__main__": | ||
|  |     success = main() | ||
|  |     sys.exit(0 if success else 1) |