Files
paperless-ngx/src/paperless/tests/settings/test_settings.py
T

129 lines
3.7 KiB
Python

import os
from unittest import TestCase
from unittest import mock
import pytest
from django.core.exceptions import ImproperlyConfigured
from paperless.settings import _get_allauth_trusted_proxy_count
from paperless.settings import _get_search_language_setting
from paperless.settings import _parse_paperless_url
from paperless.settings import default_threads_per_worker
class TestThreadCalculation(TestCase):
def test_workers_threads(self) -> None:
"""
GIVEN:
- Certain CPU counts
WHEN:
- Threads per worker is calculated
THEN:
- Threads per worker less than or equal to CPU count
- At least 1 thread per worker
"""
default_workers = 1
for i in range(1, 64):
with mock.patch(
"paperless.settings.multiprocessing.cpu_count",
) as cpu_count:
cpu_count.return_value = i
default_threads = default_threads_per_worker(default_workers)
self.assertGreaterEqual(default_threads, 1)
self.assertLessEqual(default_workers * default_threads, i)
def test_allauth_trusted_proxy_count_defaults_to_trusted_proxies(
monkeypatch: pytest.MonkeyPatch,
) -> None:
monkeypatch.delenv("PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT", raising=False)
assert _get_allauth_trusted_proxy_count(["proxy-v4", "proxy-v6"]) == 2
def test_allauth_trusted_proxy_count_can_be_overridden(
monkeypatch: pytest.MonkeyPatch,
) -> None:
monkeypatch.setenv("PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT", "1")
assert _get_allauth_trusted_proxy_count(["proxy-v4", "proxy-v6"]) == 1
def test_allauth_trusted_proxy_count_rejects_negative_values(
monkeypatch: pytest.MonkeyPatch,
) -> None:
monkeypatch.setenv("PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT", "-1")
with pytest.raises(ImproperlyConfigured, match="must be zero or greater"):
_get_allauth_trusted_proxy_count([])
@pytest.mark.parametrize(
("env_value", "expected"),
[
("en", "en"),
("de", "de"),
("fr", "fr"),
("swedish", "swedish"),
],
)
def test_get_search_language_setting_explicit_valid(
monkeypatch: pytest.MonkeyPatch,
env_value: str,
expected: str,
) -> None:
"""
GIVEN:
- PAPERLESS_SEARCH_LANGUAGE is set to a valid Tantivy stemmer language
WHEN:
- _get_search_language_setting is called
THEN:
- The explicit value is returned regardless of the OCR language
"""
monkeypatch.setenv("PAPERLESS_SEARCH_LANGUAGE", env_value)
assert _get_search_language_setting("deu") == expected
def test_get_search_language_setting_explicit_invalid(
monkeypatch: pytest.MonkeyPatch,
) -> None:
"""
GIVEN:
- PAPERLESS_SEARCH_LANGUAGE is set to an unsupported language code
WHEN:
- _get_search_language_setting is called
THEN:
- ValueError is raised
"""
monkeypatch.setenv("PAPERLESS_SEARCH_LANGUAGE", "klingon")
with pytest.raises(ValueError, match="klingon"):
_get_search_language_setting("eng")
class TestPaperlessURLSettings(TestCase):
def test_paperless_url(self) -> None:
"""
GIVEN:
- PAPERLESS_URL is set
WHEN:
- The URL is parsed
THEN:
- The URL is returned and present in related settings
"""
with mock.patch.dict(
os.environ,
{
"PAPERLESS_URL": "https://example.com",
},
):
url = _parse_paperless_url()
self.assertEqual("https://example.com", url)
from django.conf import settings
self.assertIn(url, settings.CSRF_TRUSTED_ORIGINS)
self.assertIn(url, settings.CORS_ALLOWED_ORIGINS)