diff --git a/src/paperless/tests/parsers/conftest.py b/src/paperless/tests/parsers/conftest.py index 843ffdb88..0ae8c3865 100644 --- a/src/paperless/tests/parsers/conftest.py +++ b/src/paperless/tests/parsers/conftest.py @@ -114,7 +114,26 @@ def remote_parser() -> Generator[RemoteDocumentParser, None, None]: @pytest.fixture() -def azure_settings(settings: SettingsWrapper) -> SettingsWrapper: +def empty_remote_ocr_app_config(mocker: MockerFixture) -> MagicMock: + # empty app config without accessing db + app_config = mocker.MagicMock( + remote_ocr_engine=None, + remote_ocr_api_key=None, + remote_ocr_endpoint=None, + remote_ocr_mode=None, + ) + mocker.patch( + "paperless.config.BaseConfig._get_config_instance", + return_value=app_config, + ) + return app_config + + +@pytest.fixture() +def azure_settings( + settings: SettingsWrapper, + empty_remote_ocr_app_config: MagicMock, +) -> SettingsWrapper: """Configure Django settings for a valid Azure AI OCR engine. Sets ``REMOTE_OCR_ENGINE``, ``REMOTE_OCR_API_KEY``, and @@ -133,7 +152,10 @@ def azure_settings(settings: SettingsWrapper) -> SettingsWrapper: @pytest.fixture() -def no_engine_settings(settings: SettingsWrapper) -> SettingsWrapper: +def no_engine_settings( + settings: SettingsWrapper, + empty_remote_ocr_app_config: MagicMock, +) -> SettingsWrapper: """Configure Django settings with no remote engine configured. Returns diff --git a/src/paperless/tests/parsers/test_remote_parser.py b/src/paperless/tests/parsers/test_remote_parser.py index 278219c36..e55bc5de7 100644 --- a/src/paperless/tests/parsers/test_remote_parser.py +++ b/src/paperless/tests/parsers/test_remote_parser.py @@ -34,10 +34,6 @@ if TYPE_CHECKING: from pytest_mock import MockerFixture -# Remote ocr config from ApplicationConfiguration needs DB access -pytestmark = pytest.mark.django_db - - # --------------------------------------------------------------------------- # Module-local fixtures # --------------------------------------------------------------------------- @@ -203,21 +199,21 @@ class TestRemoteParserScore: def test_score_returns_none_when_api_key_missing( self, - settings: SettingsWrapper, + no_engine_settings: SettingsWrapper, ) -> None: - settings.REMOTE_OCR_ENGINE = "azureai" - settings.REMOTE_OCR_API_KEY = None - settings.REMOTE_OCR_ENDPOINT = "https://test.cognitiveservices.azure.com" + no_engine_settings.REMOTE_OCR_ENGINE = "azureai" + no_engine_settings.REMOTE_OCR_ENDPOINT = ( + "https://test.cognitiveservices.azure.com" + ) result = RemoteDocumentParser.score("application/pdf", "doc.pdf") assert result is None def test_score_returns_none_when_endpoint_missing( self, - settings: SettingsWrapper, + no_engine_settings: SettingsWrapper, ) -> None: - settings.REMOTE_OCR_ENGINE = "azureai" - settings.REMOTE_OCR_API_KEY = "key" - settings.REMOTE_OCR_ENDPOINT = None + no_engine_settings.REMOTE_OCR_ENGINE = "azureai" + no_engine_settings.REMOTE_OCR_API_KEY = "key" result = RemoteDocumentParser.score("application/pdf", "doc.pdf") assert result is None @@ -232,9 +228,15 @@ class TestRemoteParserScore: score = RemoteDocumentParser.score("application/pdf", "doc.pdf") assert score is not None and score > 10 - @pytest.mark.usefixtures("no_engine_settings") - def test_score_uses_app_config_when_env_unset(self) -> None: + @pytest.mark.django_db + def test_score_uses_app_config_when_env_unset( + self, + settings: SettingsWrapper, + ) -> None: """The app config alone is enough to activate the parser.""" + settings.REMOTE_OCR_ENGINE = None + settings.REMOTE_OCR_API_KEY = None + settings.REMOTE_OCR_ENDPOINT = None config = ApplicationConfiguration.objects.first() assert config is not None config.remote_ocr_engine = "azureai"