SPB Git forge

spb/api-ka

Public

API-KA — plateforme centrale : collecte quotidienne des 8 services KA, historisation append-only et API publique sur www.api-ka.com

48commits 1branches 0releases
5.9 MBsize
maindefault branch
19 days agolast push
Python 60.9% HTML 21% TypeScript 7.3% JavaScript 5.2% CSS 4.8% Shell 0.8%
2.4 KB · 73 lines python
Raw Blame History
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