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)
|