API-KA — plateforme centrale : collecte quotidienne des 8 services KA, historisation append-only et API publique sur www.api-ka.com
Python 60.9%
HTML 21%
TypeScript 7.3%
JavaScript 5.2%
CSS 4.8%
Shell 0.8%
1# ============================================2# Projet : API-KA3# Fichier : tests/conftest.py4# Node : m3u96b5# Author : Simon-Pierre Boucher6# Contact : contact@spboucher.ai7# Date : 2026-08-168# ============================================9"""Fixtures pytest : environnement de test (SQLite temporaire) et base initialisée.1011L'environnement est configuré au chargement du module, AVANT tout import de12``src.*`` par les modules de test, afin que ``get_settings()`` lise les bonnes13valeurs dès le premier appel.14"""1516from __future__ import annotations1718import dataclasses19import os20import tempfile21from pathlib import Path2223_TMP_DIR = tempfile.mkdtemp(prefix="apika-tests-")24os.environ["APP_ENV"] = "test"25os.environ["DATABASE_URL"] = f"sqlite:///{_TMP_DIR}/apika_test.db"26for _svc in ("LOUKA", "IMMOKA", "FOODKA", "AUTOKA", "FABRIKA", "JOBKA"):27 os.environ[f"{_svc}_SOURCE_URL"] = f"https://example.test/{_svc.lower()}"2829import pytest # noqa: E4023031from src.config import get_settings # noqa: E4023233get_settings.cache_clear()3435from src.database import db as db_module # noqa: E4023637db_module.reset_engine()38db_module.init_db()394041@pytest.fixture()42def db_session():43 """Session SQLAlchemy transactionnelle sur la base de test."""44 with db_module.session_scope() as session:45 yield session464748@pytest.fixture(autouse=True)49def no_backup(monkeypatch: pytest.MonkeyPatch):50 """Neutralise les backups disque pendant les tests de collecteurs."""51 monkeypatch.setattr(52 "src.collectors.base_collector.backup_service", lambda *args, **kwargs: None53 )545556@pytest.fixture(scope="session", autouse=True)57def isolated_logs_dir():58 """Redirige les logs (alerts.log, apika.log) vers le tmp de test.5960 ``logs_dir`` est codé en dur sur ``BASE_DIR/logs`` dans ``get_settings()`` :61 sans cette fixture, les collectes échouées simulées par les tests62 (ex. ``test_run_failure_after_retries``) écriraient de fausses alertes63 dans le vrai ``logs/alerts.log`` de production du node.64 """65 test_logs = Path(_TMP_DIR) / "logs"66 test_logs.mkdir(parents=True, exist_ok=True)67 test_settings = dataclasses.replace(get_settings(), logs_dir=test_logs)68 mp = pytest.MonkeyPatch()69 # alert() et get_logger() résolvent get_settings via src.utils.logger.70 mp.setattr("src.utils.logger.get_settings", lambda: test_settings)71 yield test_logs72 mp.undo()73