mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-09-08 10:47:59 +00:00
* Chore(deps): Bump the utilities-minor group across 1 directory with 11 updates Bumps the utilities-minor group with 11 updates in the / directory: | Package | From | To | | --- | --- | --- | | [django-guardian](https://github.com/django-guardian/django-guardian) | `3.3.3` | `3.4.0` | | [django-treenode](https://github.com/fabiocaccamo/django-treenode) | `0.24.0` | `0.25.0` | | [drf-spectacular-sidecar](https://github.com/tfranzel/drf-spectacular-sidecar) | `2026.7.1` | `2026.8.1` | | [imap-tools](https://github.com/ikvk/imap_tools) | `1.14.0` | `1.15.0` | | [ocrmypdf](https://github.com/ocrmypdf/OCRmyPDF) | `17.10.0` | `17.11.0` | | [prek](https://github.com/j178/prek) | `0.4.11` | `0.5.0` | | [faker](https://github.com/joke2k/faker) | `40.36.0` | `40.37.0` | | [pytest-django](https://github.com/pytest-dev/pytest-django) | `4.12.0` | `4.14.0` | | [pytest-rerunfailures](https://github.com/pytest-dev/pytest-rerunfailures) | `16.4` | `16.6` | | [time-machine](https://github.com/adamchainz/time-machine) | `3.2.0` | `3.5.0` | | [types-pygments](https://github.com/python/typeshed) | `2.20.0.20260408` | `2.21.0.20260819` | Updates `django-guardian` from 3.3.3 to 3.4.0 - [Release notes](https://github.com/django-guardian/django-guardian/releases) - [Commits](https://github.com/django-guardian/django-guardian/compare/3.3.3...3.4.0) Updates `django-treenode` from 0.24.0 to 0.25.0 - [Release notes](https://github.com/fabiocaccamo/django-treenode/releases) - [Changelog](https://github.com/fabiocaccamo/django-treenode/blob/main/CHANGELOG.md) - [Commits](https://github.com/fabiocaccamo/django-treenode/compare/0.24.0...0.25.0) Updates `drf-spectacular-sidecar` from 2026.7.1 to 2026.8.1 - [Commits](https://github.com/tfranzel/drf-spectacular-sidecar/compare/2026.7.1...2026.8.1) Updates `imap-tools` from 1.14.0 to 1.15.0 - [Release notes](https://github.com/ikvk/imap_tools/releases) - [Changelog](https://github.com/ikvk/imap_tools/blob/master/docs/release_notes.rst) - [Commits](https://github.com/ikvk/imap_tools/compare/v1.14.0...v1.15.0) Updates `ocrmypdf` from 17.10.0 to 17.11.0 - [Release notes](https://github.com/ocrmypdf/OCRmyPDF/releases) - [Commits](https://github.com/ocrmypdf/OCRmyPDF/compare/v17.10.0...v17.11.0) Updates `prek` from 0.4.11 to 0.5.0 - [Release notes](https://github.com/j178/prek/releases) - [Changelog](https://github.com/j178/prek/blob/master/CHANGELOG.md) - [Commits](https://github.com/j178/prek/compare/v0.4.11...v0.5.0) Updates `faker` from 40.36.0 to 40.37.0 - [Release notes](https://github.com/joke2k/faker/releases) - [Changelog](https://github.com/joke2k/faker/blob/master/CHANGELOG.md) - [Commits](https://github.com/joke2k/faker/compare/v40.36.0...v40.37.0) Updates `pytest-django` from 4.12.0 to 4.14.0 - [Release notes](https://github.com/pytest-dev/pytest-django/releases) - [Changelog](https://github.com/pytest-dev/pytest-django/blob/main/docs/changelog.rst) - [Commits](https://github.com/pytest-dev/pytest-django/compare/v4.12.0...v4.14.0) Updates `pytest-rerunfailures` from 16.4 to 16.6 - [Changelog](https://github.com/pytest-dev/pytest-rerunfailures/blob/master/CHANGES.rst) - [Commits](https://github.com/pytest-dev/pytest-rerunfailures/compare/16.4...16.6) Updates `time-machine` from 3.2.0 to 3.5.0 - [Changelog](https://github.com/adamchainz/time-machine/blob/main/docs/changelog.rst) - [Commits](https://github.com/adamchainz/time-machine/compare/3.2.0...3.5.0) Updates `types-pygments` from 2.20.0.20260408 to 2.21.0.20260819 - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: django-guardian dependency-version: 3.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: utilities-minor - dependency-name: django-treenode dependency-version: 0.25.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: utilities-minor - dependency-name: drf-spectacular-sidecar dependency-version: 2026.8.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: utilities-minor - dependency-name: faker dependency-version: 40.37.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: utilities-minor - dependency-name: imap-tools dependency-version: 1.15.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: utilities-minor - dependency-name: ocrmypdf dependency-version: 17.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: utilities-minor - dependency-name: prek dependency-version: 0.5.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: utilities-minor - dependency-name: pytest-django dependency-version: 4.14.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: utilities-minor - dependency-name: pytest-rerunfailures dependency-version: '16.6' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: utilities-minor - dependency-name: time-machine dependency-version: 3.5.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: utilities-minor - dependency-name: types-pygments dependency-version: 2.21.0.20260819 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: utilities-minor ... Signed-off-by: dependabot[bot] <support@github.com> * Handles pytest-django * Formatting --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
128 lines
4.3 KiB
Python
128 lines
4.3 KiB
Python
from collections.abc import Generator
|
|
|
|
import pytest
|
|
from pytest_django.fixtures import Settings
|
|
|
|
from documents.parsers import get_default_file_extension
|
|
from documents.parsers import get_supported_file_extensions
|
|
from documents.parsers import is_file_ext_supported
|
|
from paperless.parsers.registry import get_parser_registry
|
|
from paperless.parsers.registry import reset_parser_registry
|
|
from paperless.parsers.tesseract import RasterisedDocumentParser
|
|
from paperless.parsers.text import TextDocumentParser
|
|
from paperless.parsers.tika import TikaDocumentParser
|
|
|
|
|
|
@pytest.fixture()
|
|
def _tika_registry(settings: Settings) -> Generator[None, None, None]:
|
|
"""
|
|
Rebuild the parser registry with Tika enabled for the duration of the
|
|
test, then reset on exit so other tests see the default (Tika-disabled)
|
|
registry.
|
|
"""
|
|
settings.TIKA_ENABLED = True
|
|
reset_parser_registry()
|
|
yield
|
|
reset_parser_registry()
|
|
|
|
|
|
@pytest.mark.django_db
|
|
class TestParserAvailability:
|
|
@pytest.mark.parametrize(
|
|
("mime_type", "ext"),
|
|
[
|
|
pytest.param("application/pdf", ".pdf", id="pdf"),
|
|
pytest.param("image/png", ".png", id="png"),
|
|
pytest.param("image/jpeg", ".jpg", id="jpeg"),
|
|
pytest.param("image/tiff", ".tif", id="tiff"),
|
|
pytest.param("image/webp", ".webp", id="webp"),
|
|
],
|
|
)
|
|
def test_tesseract_parser(self, mime_type: str, ext: str) -> None:
|
|
"""
|
|
GIVEN:
|
|
- Various mime types
|
|
WHEN:
|
|
- The parser class is instantiated
|
|
THEN:
|
|
- The Tesseract based parser is returned
|
|
"""
|
|
assert ext in get_supported_file_extensions()
|
|
assert get_default_file_extension(mime_type) == ext
|
|
assert isinstance(
|
|
get_parser_registry().get_parser_for_file(mime_type, "")(),
|
|
RasterisedDocumentParser,
|
|
)
|
|
|
|
@pytest.mark.parametrize(
|
|
("mime_type", "ext"),
|
|
[
|
|
pytest.param("text/plain", ".txt", id="plain"),
|
|
pytest.param("text/csv", ".csv", id="csv"),
|
|
],
|
|
)
|
|
def test_text_parser(self, mime_type: str, ext: str) -> None:
|
|
"""
|
|
GIVEN:
|
|
- Various mime types of a text form
|
|
WHEN:
|
|
- The parser class is instantiated
|
|
THEN:
|
|
- The text based parser is returned
|
|
"""
|
|
assert ext in get_supported_file_extensions()
|
|
assert get_default_file_extension(mime_type) == ext
|
|
assert isinstance(
|
|
get_parser_registry().get_parser_for_file(mime_type, "")(),
|
|
TextDocumentParser,
|
|
)
|
|
|
|
@pytest.mark.usefixtures("_tika_registry")
|
|
@pytest.mark.parametrize(
|
|
("mime_type", "ext"),
|
|
[
|
|
pytest.param(
|
|
"application/vnd.oasis.opendocument.text",
|
|
".odt",
|
|
id="odt",
|
|
),
|
|
pytest.param("text/rtf", ".rtf", id="rtf"),
|
|
pytest.param("application/msword", ".doc", id="doc"),
|
|
pytest.param(
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
".docx",
|
|
id="docx",
|
|
),
|
|
],
|
|
)
|
|
def test_tika_parser(self, mime_type: str, ext: str) -> None:
|
|
"""
|
|
GIVEN:
|
|
- Various mime types of an office document form
|
|
WHEN:
|
|
- The parser class is instantiated
|
|
THEN:
|
|
- The Tika/Gotenberg based parser is returned
|
|
"""
|
|
assert ext in get_supported_file_extensions()
|
|
assert get_default_file_extension(mime_type) == ext
|
|
assert isinstance(
|
|
get_parser_registry().get_parser_for_file(mime_type, "")(),
|
|
TikaDocumentParser,
|
|
)
|
|
|
|
def test_no_parser_for_mime(self) -> None:
|
|
assert get_parser_registry().get_parser_for_file("text/sdgsdf", "") is None
|
|
|
|
def test_default_extension(self) -> None:
|
|
# Test no parser declared still returns an extension
|
|
assert get_default_file_extension("application/zip") == ".zip"
|
|
|
|
# Test invalid mimetype returns no extension
|
|
assert get_default_file_extension("aasdasd/dgfgf") == ""
|
|
|
|
def test_file_extension_support(self) -> None:
|
|
assert is_file_ext_supported(".pdf")
|
|
assert not is_file_ext_supported(".hsdfh")
|
|
assert not is_file_ext_supported("")
|