py_atmo_data_wrapper/tests/test_save_functionality.py
2025-07-14 17:56:57 +02:00

177 lines
No EOL
5.9 KiB
Python

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