70 lines
2.5 KiB
Python
70 lines
2.5 KiB
Python
import importlib
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
from fastapi import FastAPI
|
|
|
|
from app import config as config_module
|
|
from app.config import Settings, get_settings
|
|
from app.runtime import logging as logging_module
|
|
from app.runtime import tracing as tracing_module
|
|
|
|
TEST_CONFIG_FILE = Path(__file__).resolve().parents[2] / "config.test.yaml"
|
|
|
|
|
|
def _import_main_module(monkeypatch):
|
|
get_settings.cache_clear()
|
|
monkeypatch.setattr(config_module, "TEST_CONFIG_FILE", str(TEST_CONFIG_FILE))
|
|
sys.modules.pop("app.main", None)
|
|
return importlib.import_module("app.main")
|
|
|
|
|
|
def test_app_import_smoke(monkeypatch) -> None:
|
|
logging_bootstrap_calls: list[None] = []
|
|
tracing_bootstrap_calls: list[tuple[FastAPI, object]] = []
|
|
|
|
def fake_configure_logging() -> None:
|
|
logging_bootstrap_calls.append(None)
|
|
|
|
def fake_configure_tracing(app: FastAPI, observability: object) -> None:
|
|
tracing_bootstrap_calls.append((app, observability))
|
|
|
|
monkeypatch.setattr(logging_module, "configure_logging", fake_configure_logging)
|
|
monkeypatch.setattr(tracing_module, "configure_tracing", fake_configure_tracing)
|
|
main_module = _import_main_module(monkeypatch)
|
|
|
|
assert isinstance(main_module.app, FastAPI)
|
|
assert isinstance(main_module.app.state.settings, Settings)
|
|
assert logging_bootstrap_calls == [None]
|
|
assert tracing_bootstrap_calls == [
|
|
(main_module.app, main_module.app.state.settings.observability)
|
|
]
|
|
get_settings.cache_clear()
|
|
|
|
|
|
def test_app_created_with_provided_settings(monkeypatch) -> None:
|
|
logging_bootstrap_calls: list[None] = []
|
|
tracing_bootstrap_calls: list[tuple[FastAPI, object]] = []
|
|
|
|
def fake_configure_logging() -> None:
|
|
logging_bootstrap_calls.append(None)
|
|
|
|
def fake_configure_tracing(app: FastAPI, observability: object) -> None:
|
|
tracing_bootstrap_calls.append((app, observability))
|
|
|
|
monkeypatch.setattr(logging_module, "configure_logging", fake_configure_logging)
|
|
monkeypatch.setattr(tracing_module, "configure_tracing", fake_configure_tracing)
|
|
main_module = _import_main_module(monkeypatch)
|
|
monkeypatch.setattr(config_module, "TEST_CONFIG_FILE", str(TEST_CONFIG_FILE))
|
|
|
|
settings = Settings()
|
|
instance = main_module.create_app(settings=settings)
|
|
|
|
assert instance.state.settings is settings
|
|
assert logging_bootstrap_calls == [None, None]
|
|
assert tracing_bootstrap_calls == [
|
|
(main_module.app, main_module.app.state.settings.observability),
|
|
(instance, settings.observability),
|
|
]
|
|
get_settings.cache_clear()
|