]
else:
return []
+
+
+@register()
+def settings_values_check(app_configs, **kwargs):
+ """
+ Validates at least some of the user provided settings
+ """
+
+ def _ocrmypdf_settings_check():
+ """
+ Validates some of the arguments which will be provided to ocrmypdf
+ against the valid options. Use "ocrmypdf --help" to see the valid
+ inputs
+ """
+ msgs = []
+ if settings.OCR_OUTPUT_TYPE not in {
+ "pdfa",
+ "pdf",
+ "pdfa-1",
+ "pdfa-2",
+ "pdfa-3",
+ }:
+ msgs.append(
+ Error(f'OCR output type "{settings.OCR_OUTPUT_TYPE}" is not valid'),
+ )
+
+ if settings.OCR_MODE not in {"force", "skip", "redo_ocr"}:
+ msgs.append(Error(f'OCR output mode "{settings.OCR_MODE}" is not valid'))
+
+ if settings.OCR_CLEAN not in {"clean", "clean_final"}:
+ msgs.append(Error(f'OCR clean mode "{settings.OCR_CLEAN}" is not valid'))
+ return msgs
+
+ def _timezone_validate():
+ """
+ Validates the user provided timezone is a valid timezone
+ """
+ try:
+ import zoneinfo
+ except ImportError: # pragma: nocover
+ import backports.zoneinfo as zoneinfo
+ msgs = []
+ if settings.TIME_ZONE not in zoneinfo.available_timezones():
+ msgs.append(
+ Error(f'Timezone "{settings.TIME_ZONE}" is not a valid timezone'),
+ )
+ return msgs
+
+ return _ocrmypdf_settings_check() + _timezone_validate()
import os
-import shutil
from django.test import override_settings
from django.test import TestCase
from documents.tests.utils import DirectoriesMixin
-from paperless import binaries_check
-from paperless import paths_check
+from paperless.checks import binaries_check
from paperless.checks import debug_mode_check
+from paperless.checks import paths_check
+from paperless.checks import settings_values_check
class TestChecks(DirectoriesMixin, TestCase):
@override_settings(DEBUG=True)
def test_debug_enabled(self):
self.assertEqual(len(debug_mode_check(None)), 1)
+
+
+class TestSettingsChecks(DirectoriesMixin, TestCase):
+ def test_all_valid(self):
+ """
+ GIVEN:
+ - Default settings
+ WHEN:
+ - Settings are validated
+ THEN:
+ - No system check errors reported
+ """
+ msgs = settings_values_check(None)
+ self.assertEqual(len(msgs), 0)
+
+ @override_settings(OCR_OUTPUT_TYPE="notapdf")
+ def test_invalid_output_type(self):
+ """
+ GIVEN:
+ - Default settings
+ - OCR output type is invalid
+ WHEN:
+ - Settings are validated
+ THEN:
+ - system check error reported for OCR output type
+ """
+ msgs = settings_values_check(None)
+ self.assertEqual(len(msgs), 1)
+
+ msg = msgs[0]
+
+ self.assertIn('OCR output type "notapdf"', msg.msg)
+
+ @override_settings(OCR_MODE="makeitso")
+ def test_invalid_ocr_type(self):
+ """
+ GIVEN:
+ - Default settings
+ - OCR type is invalid
+ WHEN:
+ - Settings are validated
+ THEN:
+ - system check error reported for OCR type
+ """
+ msgs = settings_values_check(None)
+ self.assertEqual(len(msgs), 1)
+
+ msg = msgs[0]
+
+ self.assertIn('OCR output mode "makeitso"', msg.msg)
+
+ @override_settings(OCR_CLEAN="cleanme")
+ def test_invalid_ocr_clean(self):
+ """
+ GIVEN:
+ - Default settings
+ - OCR cleaning type is invalid
+ WHEN:
+ - Settings are validated
+ THEN:
+ - system check error reported for OCR cleaning type
+ """
+ msgs = settings_values_check(None)
+ self.assertEqual(len(msgs), 1)
+
+ msg = msgs[0]
+
+ self.assertIn('OCR clean mode "cleanme"', msg.msg)
+
+ @override_settings(TIME_ZONE="TheMoon\\MyCrater")
+ def test_invalid_timezone(self):
+ """
+ GIVEN:
+ - Default settings
+ - Timezone is invalid
+ WHEN:
+ - Settings are validated
+ THEN:
+ - system check error reported for timezone
+ """
+ msgs = settings_values_check(None)
+ self.assertEqual(len(msgs), 1)
+
+ msg = msgs[0]
+
+ self.assertIn('Timezone "TheMoon\\MyCrater"', msg.msg)