#!/usr/bin/env python3 """ Tests pour la fonctionnalité de sauvegarde """ from atmo_data_wrapper import AtmoDataClient import os import json import csv from pathlib import Path def test_save_functionality(): """Test complet de la fonctionnalité de sauvegarde""" print("=== Tests de la fonctionnalité de sauvegarde ===\n") client = AtmoDataClient() # Données de test test_data = { "type": "FeatureCollection", "features": [ { "type": "Feature", "geometry": { "type": "Point", "coordinates": [2.3522, 48.8566] }, "properties": { "nom": "Test Paris", "valeur": 42.5, "date": "2024-07-07" } } ] } test_dir = "test_files" # Test 1: Validation du format print("1. Test de validation du format...") try: client._validate_save_format("json") print("✅ Format JSON valide") except Exception as e: print(f"❌ Erreur format JSON: {e}") try: client._validate_save_format("xml") print("❌ Format XML invalide accepté") except ValueError as e: print(f"✅ Format XML correctement rejeté: {e}") # Test 2: Sauvegarde JSON print("\n2. Test sauvegarde JSON...") try: json_file = client.save_to_file(test_data, f"{test_dir}/test", "json") if os.path.exists(json_file): # Vérifier que le fichier est du JSON valide with open(json_file, 'r') as f: loaded_data = json.load(f) print("✅ Fichier JSON créé et valide") else: print("❌ Fichier JSON non créé") except Exception as e: print(f"❌ Erreur JSON: {e}") # Test 3: Sauvegarde CSV print("\n3. Test sauvegarde CSV...") try: csv_file = client.save_to_file(test_data, f"{test_dir}/test", "csv") if os.path.exists(csv_file): # Vérifier le contenu CSV with open(csv_file, 'r') as f: reader = csv.reader(f) rows = list(reader) if len(rows) >= 2: # Header + au moins une ligne print("✅ Fichier CSV créé avec en-tête et données") else: print("❌ Fichier CSV incomplet") else: print("❌ Fichier CSV non créé") except Exception as e: print(f"❌ Erreur CSV: {e}") # Test 4: Sauvegarde GeoJSON print("\n4. Test sauvegarde GeoJSON...") try: geojson_file = client.save_to_file(test_data, f"{test_dir}/test", "geojson") if os.path.exists(geojson_file): # Vérifier que c'est du GeoJSON valide with open(geojson_file, 'r') as f: loaded_data = json.load(f) if loaded_data.get('type') == 'FeatureCollection': print("✅ Fichier GeoJSON créé et valide") else: print("❌ Fichier GeoJSON invalide") else: print("❌ Fichier GeoJSON non créé") except Exception as e: print(f"❌ Erreur GeoJSON: {e}") # Test 5: Création de répertoires print("\n5. Test création de répertoires...") try: nested_file = client.save_to_file(test_data, f"{test_dir}/nested/deep/test", "json") if os.path.exists(nested_file): print("✅ Répertoires imbriqués créés automatiquement") else: print("❌ Répertoires imbriqués non créés") except Exception as e: print(f"❌ Erreur création répertoires: {e}") # Test 6: Extension automatique print("\n6. Test ajout automatique d'extension...") try: auto_ext_file = client.save_to_file(test_data, f"{test_dir}/sans_extension", "json") if auto_ext_file.endswith('.json'): print("✅ Extension .json ajoutée automatiquement") else: print("❌ Extension non ajoutée") except Exception as e: print(f"❌ Erreur extension automatique: {e}") # Test 7: Données sans géométrie print("\n7. Test données sans géométrie...") data_no_geom = { "type": "FeatureCollection", "features": [ { "type": "Feature", "geometry": None, "properties": { "nom": "Test sans géométrie", "valeur": 123 } } ] } try: no_geom_file = client.save_to_file(data_no_geom, f"{test_dir}/no_geom", "csv") if os.path.exists(no_geom_file): with open(no_geom_file, 'r') as f: content = f.read() if 'nom,valeur' in content and 'Test sans géométrie,123' in content: print("✅ CSV sans géométrie créé correctement") else: print("❌ CSV sans géométrie incorrect") else: print("❌ Fichier sans géométrie non créé") except Exception as e: print(f"❌ Erreur données sans géométrie: {e}") # Test 8: Données invalides pour GeoJSON print("\n8. Test données invalides pour GeoJSON...") invalid_geojson = {"data": "not a geojson"} try: client.save_to_file(invalid_geojson, f"{test_dir}/invalid", "geojson") print("❌ Données invalides acceptées pour GeoJSON") except ValueError as e: print(f"✅ Données invalides correctement rejetées: {e}") # Nettoyage print("\n9. Nettoyage des fichiers de test...") try: import shutil if os.path.exists(test_dir): shutil.rmtree(test_dir) print("✅ Fichiers de test supprimés") except Exception as e: print(f"❌ Erreur nettoyage: {e}") print("\n=== Tests terminés ===") if __name__ == "__main__": test_save_functionality()