139 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			139 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)
 | 
