Skip to main content
Glama

French Law MCP Server

by jmtanguy
test_api_legifrance.py8.69 kB
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Tests simples pour l'API Légifrance. Ces tests utilisent l'API sandbox et nécessitent des credentials valides dans .env Pour exécuter les tests: pytest test_api_legifrance.py -v pytest test_api_legifrance.py -v -m integration # Seulement les tests d'intégration pytest test_api_legifrance.py -v -k "test_search" # Seulement les tests de recherche """ import pytest from api_legifrance import LegiFranceAPI # Marquer tous les tests comme tests d'intégration car ils appellent l'API réelle pytestmark = pytest.mark.integration # Fixture pour partager une instance de l'API entre tous les tests @pytest.fixture(scope="module") def api(): """ Fixture qui crée une instance unique de JudiLibreAPI pour tous les tests. L'instance est créée une seule fois au début et réutilisée pour tous les tests. """ return LegiFranceAPI(sandbox=True) def test_init_sandbox(api): """Test l'initialisation du client en mode sandbox""" assert api.client_id is not None, "Le client_id doit être défini" assert api.client_secret is not None, "Le client_secret doit être défini" assert "sandbox" in api.base_url, "L'URL de base doit contenir 'sandbox'" assert api.access_token is None, "Le token doit être None avant authentification" def test_get_access_token(api): """Test l'obtention du token d'accès OAuth""" token = api.get_access_token() assert token is not None, "Le token ne doit pas être None" assert isinstance(token, str), "Le token doit être une chaîne" assert len(token) > 0, "Le token ne doit pas être vide" assert api.access_token == token, "Le token doit être stocké dans l'instance" assert api.token_expires_at is not None, "La date d'expiration doit être définie" def test_token_caching(api): """Test que le token est mis en cache et réutilisé""" token1 = api.get_access_token() token2 = api.get_access_token() assert token1 == token2, "Le même token doit être réutilisé" def test_search_simple(api): """Test une recherche simple dans le Code civil""" results = api.search( query="mariage", fond="CODE_ETAT", code_name="Code civil", page_size=5 ) assert results is not None, "Les résultats ne doivent pas être None" assert len(results) > 0, "La liste de résultats ne doit pas être vide" def test_search_with_filters(api): """Test une recherche avec filtres par valeurs""" results = api.search( query="travail", fond="JORF", type_recherche="UN_DES_MOTS", filtres_valeurs={"NATURE": ["LOI"]}, page_size=3 ) assert results is not None # Vérifier que les résultats ont des données valides if len(results) > 0: for article in results: assert "article_id" in article or "title" in article def test_search_with_date_filters(api): """Test une recherche avec filtres par dates""" results = api.search( query="environnement", fond="JORF", filtres_dates={ "DATE_SIGNATURE": { "start": "2020-01-01", "end": "2023-12-31" } }, page_size=5 ) assert results is not None def test_search_pagination(api): """Test la pagination des résultats""" # Première page results_page1 = api.search( query="contrat", fond="CODE_ETAT", page_number=1, page_size=3 ) # Deuxième page results_page2 = api.search( query="contrat", fond="CODE_ETAT", page_number=2, page_size=3 ) assert results_page1 is not None assert results_page2 is not None # Vérifier que les résultats sont différents if len(results_page1) > 0 and len(results_page2) > 0: id_page1 = results_page1[0]["article_id"] id_page2 = results_page2[0]["article_id"] assert id_page1 != id_page2, "Les résultats des deux pages doivent être différents" def test_search_exact_match(api): """Test la recherche exacte""" results = api.search( query="Code civil", fond="CODE_ETAT", type_recherche="EXACTE", page_size=5 ) assert results is not None def test_search_in_title(api): """Test la recherche dans les titres uniquement""" results = api.search( query="pénal", fond="CODE_ETAT", type_champ="TITLE", page_size=5 ) assert results is not None def test_article_legiarti(api): """Test la récupération d'un article de loi (LEGIARTI)""" # D'abord faire une recherche pour obtenir un ID valide search_results = api.search( query="mariage", fond="CODE_ETAT", code_name="Code civil", page_size=1 ) # Si on a des résultats, essayer de récupérer plus de détails # Note: cet exemple peut nécessiter d'ajuster selon la structure réelle des résultats assert search_results is not None def test_article_legitext(api): """Test la récupération d'un texte légal (LEGITEXT)""" # Utiliser un ID de texte connu (Code civil) # Note: Cet ID peut nécessiter d'être ajusté selon la sandbox try: result = api.article("LEGITEXT000006070721") assert result is not None assert isinstance(result, dict) except Exception as e: # Si l'ID n'est pas valide en sandbox, le test passe quand même assert "Erreur lors de la récupération" in str(e) def test_search_invalid_fond(api): """Test qu'une erreur est levée pour un fond invalide""" with pytest.raises(ValueError, match="Fond invalide"): api.search( query="test", fond="INVALID_FOND" ) def test_search_invalid_type_recherche(api): """Test qu'une erreur est levée pour un type de recherche invalide""" with pytest.raises(ValueError, match="Type de recherche invalide"): api.search( query="test", type_recherche="INVALID_TYPE" ) def test_search_invalid_type_champ(api): """Test qu'une erreur est levée pour un type de champ invalide""" with pytest.raises(ValueError, match="Type de champ invalide"): api.search( query="test", type_champ="INVALID_CHAMP" ) def test_search_no_query(api): """Test qu'une erreur est levée si aucune query n'est fournie""" with pytest.raises(ValueError, match="Le paramètre 'query' doit être fourni"): api.search() def test_search_invalid_operator(api): """Test qu'une erreur est levée pour un opérateur invalide""" with pytest.raises(ValueError, match="L'opérateur doit être"): api.search( query="test", operateur="INVALID" ) def test_search_with_sort(api): """Test la recherche avec tri personnalisé""" results = api.search( query="loi", fond="JORF", sort="SIGNATURE_DATE_DESC", page_size=5 ) assert results is not None def test_search_kali_conventions(api): """Test la recherche dans les conventions collectives""" results = api.search( query="télétravail", fond="KALI", page_size=3 ) assert results is not None def test_search_jurisprudence(api): """Test la recherche dans la jurisprudence""" results = api.search( query="responsabilité", fond="JURI", page_size=3 ) assert results is not None if __name__ == "__main__": # Permet d'exécuter directement le fichier pour des tests rapides print("Exécution des tests...") api_instance = LegiFranceAPI(sandbox=True) print("\nTest 1: Initialisation") test_init_sandbox(api_instance) print("✓ Réussi") print("\nTest 2: Obtention du token") test_get_access_token(api_instance) print("✓ Réussi") print("\nTest 3: Recherche simple") test_search_simple(api_instance) print("✓ Réussi") print("\nTest 4: Recherche avec filtres") test_search_with_filters(api_instance) print("✓ Réussi") print("\n✓ Tous les tests de base sont réussis!") print("\nPour exécuter tous les tests avec pytest:") print(" pytest test_api_legifrance.py -v")

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jmtanguy/DroitFrancaisMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server