177 lines
No EOL
5.9 KiB
Python
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() |