diff --git a/src/paperless/config.py b/src/paperless/config.py index 418112e03..77fd8ce32 100644 --- a/src/paperless/config.py +++ b/src/paperless/config.py @@ -64,9 +64,14 @@ class OcrConfig(OutputTypeConfig): self.pages = app_config.pages or settings.OCR_PAGES self.language = app_config.language or settings.OCR_LANGUAGE self.mode = app_config.mode or settings.OCR_MODE - self.archive_file_generation = ( - app_config.skip_archive_file or settings.ARCHIVE_FILE_GENERATION - ) + # Task 4 renames the DB field from skip_archive_file to archive_file_generation. + # Until that migration runs, fall back to the old field name. + _db_archive = getattr( + app_config, + "archive_file_generation", + None, + ) or getattr(app_config, "skip_archive_file", None) + self.archive_file_generation = _db_archive or settings.ARCHIVE_FILE_GENERATION self.image_dpi = app_config.image_dpi or settings.OCR_IMAGE_DPI self.clean = app_config.unpaper_clean or settings.OCR_CLEAN self.deskew = ( diff --git a/src/paperless/tests/parsers/conftest.py b/src/paperless/tests/parsers/conftest.py index 8747ac9bd..abe00efce 100644 --- a/src/paperless/tests/parsers/conftest.py +++ b/src/paperless/tests/parsers/conftest.py @@ -708,6 +708,7 @@ def null_app_config(mocker: MockerFixture) -> MagicMock: pages=None, language=None, mode=None, + archive_file_generation=None, skip_archive_file=None, image_dpi=None, unpaper_clean=None, diff --git a/src/paperless/tests/test_ocr_config.py b/src/paperless/tests/test_ocr_config.py new file mode 100644 index 000000000..fe7deffeb --- /dev/null +++ b/src/paperless/tests/test_ocr_config.py @@ -0,0 +1,67 @@ +"""Tests for OcrConfig archive_file_generation field behavior.""" + +from __future__ import annotations + +from typing import TYPE_CHECKING + +import pytest +from django.test import override_settings + +from paperless.config import OcrConfig + +if TYPE_CHECKING: + from unittest.mock import MagicMock + + +@pytest.fixture() +def null_app_config(mocker) -> MagicMock: + """Mock ApplicationConfiguration with all fields None → falls back to Django settings.""" + return mocker.MagicMock( + output_type=None, + pages=None, + language=None, + mode=None, + archive_file_generation=None, + skip_archive_file=None, + image_dpi=None, + unpaper_clean=None, + deskew=None, + rotate_pages=None, + rotate_pages_threshold=None, + max_image_pixels=None, + color_conversion_strategy=None, + user_args=None, + ) + + +@pytest.fixture() +def make_ocr_config(mocker, null_app_config): + mocker.patch( + "paperless.config.BaseConfig._get_config_instance", + return_value=null_app_config, + ) + + def _make(**django_settings_overrides): + with override_settings(**django_settings_overrides): + return OcrConfig() + + return _make + + +class TestOcrConfigArchiveFileGeneration: + def test_auto_from_settings(self, make_ocr_config) -> None: + cfg = make_ocr_config(OCR_MODE="auto", ARCHIVE_FILE_GENERATION="auto") + assert cfg.archive_file_generation == "auto" + + def test_always_from_settings(self, make_ocr_config) -> None: + cfg = make_ocr_config(ARCHIVE_FILE_GENERATION="always") + assert cfg.archive_file_generation == "always" + + def test_never_from_settings(self, make_ocr_config) -> None: + cfg = make_ocr_config(ARCHIVE_FILE_GENERATION="never") + assert cfg.archive_file_generation == "never" + + def test_db_value_overrides_setting(self, make_ocr_config, null_app_config) -> None: + null_app_config.archive_file_generation = "never" + cfg = make_ocr_config(ARCHIVE_FILE_GENERATION="always") + assert cfg.archive_file_generation == "never"