import contextlib from collections.abc import Iterator from typing import Any from unittest import mock from fansifter_common.testing.factories import FactoryService from resonance_engine.adapters.db import Model, db from resonance_engine.config import settings _factory = FactoryService() _factory.scan("tests.unit.factories") def build_model[T](model: type[T], **kwargs: Any) -> T: return _factory.build(model, **kwargs) def create_model[T: Model](model: type[T], **kwargs: Any) -> T: return _factory.create(db.session, model, **kwargs) def create_model_batch[T: Model]( model: type[T], *, size: int, **kwargs: Any ) -> list[T]: return _factory.create_batch(db.session, model, size=size, **kwargs) @contextlib.contextmanager def override_settings(**kwargs: Any) -> Iterator[None]: new_settings = settings.model_copy(update=kwargs) with mock.patch("resonance_engine.config.settings.__wrapped__", new_settings): yield