Merge tests
@ -203,36 +203,6 @@ lint.per-file-ignores."docker/wait-for-redis.py" = [
|
|||||||
lint.per-file-ignores."src/documents/migrations/1012_fix_archive_files.py" = [
|
lint.per-file-ignores."src/documents/migrations/1012_fix_archive_files.py" = [
|
||||||
"PTH",
|
"PTH",
|
||||||
] # TODO Enable & remove
|
] # TODO Enable & remove
|
||||||
lint.per-file-ignores."src/documents/tests/test_consumer.py" = [
|
|
||||||
"PTH",
|
|
||||||
] # TODO Enable & remove
|
|
||||||
lint.per-file-ignores."src/documents/tests/test_file_handling.py" = [
|
|
||||||
"PTH",
|
|
||||||
] # TODO Enable & remove
|
|
||||||
lint.per-file-ignores."src/documents/tests/test_management.py" = [
|
|
||||||
"PTH",
|
|
||||||
] # TODO Enable & remove
|
|
||||||
lint.per-file-ignores."src/documents/tests/test_management_consumer.py" = [
|
|
||||||
"PTH",
|
|
||||||
] # TODO Enable & remove
|
|
||||||
lint.per-file-ignores."src/documents/tests/test_management_exporter.py" = [
|
|
||||||
"PTH",
|
|
||||||
] # TODO Enable & remove
|
|
||||||
lint.per-file-ignores."src/documents/tests/test_migration_archive_files.py" = [
|
|
||||||
"PTH",
|
|
||||||
] # TODO Enable & remove
|
|
||||||
lint.per-file-ignores."src/documents/tests/test_migration_document_pages_count.py" = [
|
|
||||||
"PTH",
|
|
||||||
] # TODO Enable & remove
|
|
||||||
lint.per-file-ignores."src/documents/tests/test_migration_mime_type.py" = [
|
|
||||||
"PTH",
|
|
||||||
] # TODO Enable & remove
|
|
||||||
lint.per-file-ignores."src/documents/tests/test_sanity_check.py" = [
|
|
||||||
"PTH",
|
|
||||||
] # TODO Enable & remove
|
|
||||||
lint.per-file-ignores."src/documents/views.py" = [
|
|
||||||
"PTH",
|
|
||||||
] # TODO Enable & remove
|
|
||||||
lint.per-file-ignores."src/paperless/checks.py" = [
|
lint.per-file-ignores."src/paperless/checks.py" = [
|
||||||
"PTH",
|
"PTH",
|
||||||
] # TODO Enable & remove
|
] # TODO Enable & remove
|
||||||
@ -257,6 +227,33 @@ lint.per-file-ignores."src/paperless/settings.py" = [
|
|||||||
lint.per-file-ignores."src/paperless/signals/handlers.py" = [
|
lint.per-file-ignores."src/paperless/signals/handlers.py" = [
|
||||||
"PTH",
|
"PTH",
|
||||||
] # TODO Enable & remove
|
] # TODO Enable & remove
|
||||||
|
lint.per-file-ignores."src/paperless/tests/test_consumer.py" = [
|
||||||
|
"PTH",
|
||||||
|
] # TODO Enable & remove
|
||||||
|
lint.per-file-ignores."src/paperless/tests/test_file_handling.py" = [
|
||||||
|
"PTH",
|
||||||
|
] # TODO Enable & remove
|
||||||
|
lint.per-file-ignores."src/paperless/tests/test_management.py" = [
|
||||||
|
"PTH",
|
||||||
|
] # TODO Enable & remove
|
||||||
|
lint.per-file-ignores."src/paperless/tests/test_management_consumer.py" = [
|
||||||
|
"PTH",
|
||||||
|
] # TODO Enable & remove
|
||||||
|
lint.per-file-ignores."src/paperless/tests/test_management_exporter.py" = [
|
||||||
|
"PTH",
|
||||||
|
] # TODO Enable & remove
|
||||||
|
lint.per-file-ignores."src/paperless/tests/test_migration_archive_files.py" = [
|
||||||
|
"PTH",
|
||||||
|
] # TODO Enable & remove
|
||||||
|
lint.per-file-ignores."src/paperless/tests/test_migration_document_pages_count.py" = [
|
||||||
|
"PTH",
|
||||||
|
] # TODO Enable & remove
|
||||||
|
lint.per-file-ignores."src/paperless/tests/test_migration_mime_type.py" = [
|
||||||
|
"PTH",
|
||||||
|
] # TODO Enable & remove
|
||||||
|
lint.per-file-ignores."src/paperless/tests/test_sanity_check.py" = [
|
||||||
|
"PTH",
|
||||||
|
] # TODO Enable & remove
|
||||||
lint.per-file-ignores."src/paperless/views.py" = [
|
lint.per-file-ignores."src/paperless/views.py" = [
|
||||||
"PTH",
|
"PTH",
|
||||||
] # TODO Enable & remove
|
] # TODO Enable & remove
|
||||||
|
@ -1,91 +0,0 @@
|
|||||||
import textwrap
|
|
||||||
from unittest import mock
|
|
||||||
|
|
||||||
from django.core.checks import Error
|
|
||||||
from django.core.checks import Warning
|
|
||||||
from django.test import TestCase
|
|
||||||
from django.test import override_settings
|
|
||||||
|
|
||||||
from documents.tests.factories import DocumentFactory
|
|
||||||
from paperless.checks import changed_password_check
|
|
||||||
from paperless.checks import filename_format_check
|
|
||||||
from paperless.checks import parser_check
|
|
||||||
from paperless.models import Document
|
|
||||||
|
|
||||||
|
|
||||||
class TestDocumentChecks(TestCase):
|
|
||||||
def test_changed_password_check_empty_db(self):
|
|
||||||
self.assertListEqual(changed_password_check(None), [])
|
|
||||||
|
|
||||||
def test_changed_password_check_no_encryption(self):
|
|
||||||
DocumentFactory.create(storage_type=Document.STORAGE_TYPE_UNENCRYPTED)
|
|
||||||
self.assertListEqual(changed_password_check(None), [])
|
|
||||||
|
|
||||||
def test_encrypted_missing_passphrase(self):
|
|
||||||
DocumentFactory.create(storage_type=Document.STORAGE_TYPE_GPG)
|
|
||||||
msgs = changed_password_check(None)
|
|
||||||
self.assertEqual(len(msgs), 1)
|
|
||||||
msg_text = msgs[0].msg
|
|
||||||
self.assertEqual(
|
|
||||||
msg_text,
|
|
||||||
"The database contains encrypted documents but no password is set.",
|
|
||||||
)
|
|
||||||
|
|
||||||
@override_settings(
|
|
||||||
PASSPHRASE="test",
|
|
||||||
)
|
|
||||||
@mock.patch("paperless.db.GnuPG.decrypted")
|
|
||||||
@mock.patch("documents.models.Document.source_file")
|
|
||||||
def test_encrypted_decrypt_fails(self, mock_decrypted, mock_source_file):
|
|
||||||
mock_decrypted.return_value = None
|
|
||||||
mock_source_file.return_value = b""
|
|
||||||
|
|
||||||
DocumentFactory.create(storage_type=Document.STORAGE_TYPE_GPG)
|
|
||||||
|
|
||||||
msgs = changed_password_check(None)
|
|
||||||
|
|
||||||
self.assertEqual(len(msgs), 1)
|
|
||||||
msg_text = msgs[0].msg
|
|
||||||
self.assertEqual(
|
|
||||||
msg_text,
|
|
||||||
textwrap.dedent(
|
|
||||||
"""
|
|
||||||
The current password doesn't match the password of the
|
|
||||||
existing documents.
|
|
||||||
|
|
||||||
If you intend to change your password, you must first export
|
|
||||||
all of the old documents, start fresh with the new password
|
|
||||||
and then re-import them."
|
|
||||||
""",
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_parser_check(self):
|
|
||||||
self.assertEqual(parser_check(None), [])
|
|
||||||
|
|
||||||
with mock.patch("documents.checks.document_consumer_declaration.send") as m:
|
|
||||||
m.return_value = []
|
|
||||||
|
|
||||||
self.assertEqual(
|
|
||||||
parser_check(None),
|
|
||||||
[
|
|
||||||
Error(
|
|
||||||
"No parsers found. This is a bug. The consumer won't be "
|
|
||||||
"able to consume any documents without parsers.",
|
|
||||||
),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_filename_format_check(self):
|
|
||||||
self.assertEqual(filename_format_check(None), [])
|
|
||||||
|
|
||||||
with override_settings(FILENAME_FORMAT="{created}/{title}"):
|
|
||||||
self.assertEqual(
|
|
||||||
filename_format_check(None),
|
|
||||||
[
|
|
||||||
Warning(
|
|
||||||
"Filename format {created}/{title} is using the old style, please update to use double curly brackets",
|
|
||||||
hint="{{ created }}/{{ title }}",
|
|
||||||
),
|
|
||||||
],
|
|
||||||
)
|
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
@ -5,11 +5,11 @@ from django.contrib.auth.models import User
|
|||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from paperless import index
|
from paperless import index
|
||||||
from paperless.admin import DocumentAdmin
|
from paperless.admin import DocumentAdmin
|
||||||
from paperless.admin import PaperlessUserAdmin
|
from paperless.admin import PaperlessUserAdmin
|
||||||
from paperless.models import Document
|
from paperless.models import Document
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
|
||||||
|
|
||||||
class TestDocumentAdmin(DirectoriesMixin, TestCase):
|
class TestDocumentAdmin(DirectoriesMixin, TestCase):
|
@ -5,9 +5,9 @@ from django.contrib.auth.models import User
|
|||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from paperless.models import ApplicationConfiguration
|
from paperless.models import ApplicationConfiguration
|
||||||
from paperless.models import ColorConvertChoices
|
from paperless.models import ColorConvertChoices
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
|
||||||
|
|
||||||
class TestApiAppConfig(DirectoriesMixin, APITestCase):
|
class TestApiAppConfig(DirectoriesMixin, APITestCase):
|
@ -10,11 +10,11 @@ from django.utils import timezone
|
|||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from documents.tests.utils import SampleDirMixin
|
|
||||||
from paperless.models import Correspondent
|
from paperless.models import Correspondent
|
||||||
from paperless.models import Document
|
from paperless.models import Document
|
||||||
from paperless.models import DocumentType
|
from paperless.models import DocumentType
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
from paperless.tests.utils import SampleDirMixin
|
||||||
|
|
||||||
|
|
||||||
class TestBulkDownload(DirectoriesMixin, SampleDirMixin, APITestCase):
|
class TestBulkDownload(DirectoriesMixin, SampleDirMixin, APITestCase):
|
@ -9,13 +9,13 @@ from guardian.shortcuts import assign_perm
|
|||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from paperless.models import Correspondent
|
from paperless.models import Correspondent
|
||||||
from paperless.models import CustomField
|
from paperless.models import CustomField
|
||||||
from paperless.models import Document
|
from paperless.models import Document
|
||||||
from paperless.models import DocumentType
|
from paperless.models import DocumentType
|
||||||
from paperless.models import StoragePath
|
from paperless.models import StoragePath
|
||||||
from paperless.models import Tag
|
from paperless.models import Tag
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
|
||||||
|
|
||||||
class TestBulkEditAPI(DirectoriesMixin, APITestCase):
|
class TestBulkEditAPI(DirectoriesMixin, APITestCase):
|
@ -7,10 +7,10 @@ from django.contrib.auth.models import User
|
|||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from paperless.models import CustomField
|
from paperless.models import CustomField
|
||||||
from paperless.models import CustomFieldInstance
|
from paperless.models import CustomFieldInstance
|
||||||
from paperless.models import Document
|
from paperless.models import Document
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
|
||||||
|
|
||||||
class TestCustomFieldsAPI(DirectoriesMixin, APITestCase):
|
class TestCustomFieldsAPI(DirectoriesMixin, APITestCase):
|
@ -24,8 +24,6 @@ from guardian.shortcuts import assign_perm
|
|||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from documents.tests.utils import DocumentConsumeDelayMixin
|
|
||||||
from paperless.caching import CACHE_50_MINUTES
|
from paperless.caching import CACHE_50_MINUTES
|
||||||
from paperless.caching import CLASSIFIER_HASH_KEY
|
from paperless.caching import CLASSIFIER_HASH_KEY
|
||||||
from paperless.caching import CLASSIFIER_MODIFIED_KEY
|
from paperless.caching import CLASSIFIER_MODIFIED_KEY
|
||||||
@ -46,6 +44,8 @@ from paperless.models import Workflow
|
|||||||
from paperless.models import WorkflowAction
|
from paperless.models import WorkflowAction
|
||||||
from paperless.models import WorkflowTrigger
|
from paperless.models import WorkflowTrigger
|
||||||
from paperless.signals.handlers import run_workflows
|
from paperless.signals.handlers import run_workflows
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
from paperless.tests.utils import DocumentConsumeDelayMixin
|
||||||
|
|
||||||
|
|
||||||
class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
|
class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
|
@ -7,10 +7,10 @@ from urllib.parse import quote
|
|||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from paperless.models import CustomField
|
from paperless.models import CustomField
|
||||||
from paperless.models import Document
|
from paperless.models import Document
|
||||||
from paperless.serialisers import DocumentSerializer
|
from paperless.serialisers import DocumentSerializer
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
|
||||||
|
|
||||||
class DocumentWrapper:
|
class DocumentWrapper:
|
@ -8,12 +8,12 @@ from django.utils import timezone
|
|||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from paperless.models import Correspondent
|
from paperless.models import Correspondent
|
||||||
from paperless.models import Document
|
from paperless.models import Document
|
||||||
from paperless.models import DocumentType
|
from paperless.models import DocumentType
|
||||||
from paperless.models import StoragePath
|
from paperless.models import StoragePath
|
||||||
from paperless.models import Tag
|
from paperless.models import Tag
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
|
||||||
|
|
||||||
class TestApiObjects(DirectoriesMixin, APITestCase):
|
class TestApiObjects(DirectoriesMixin, APITestCase):
|
@ -13,13 +13,13 @@ from guardian.shortcuts import get_users_with_perms
|
|||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from paperless.models import Correspondent
|
from paperless.models import Correspondent
|
||||||
from paperless.models import Document
|
from paperless.models import Document
|
||||||
from paperless.models import DocumentType
|
from paperless.models import DocumentType
|
||||||
from paperless.models import MatchingModel
|
from paperless.models import MatchingModel
|
||||||
from paperless.models import StoragePath
|
from paperless.models import StoragePath
|
||||||
from paperless.models import Tag
|
from paperless.models import Tag
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
|
||||||
|
|
||||||
class TestApiAuth(DirectoriesMixin, APITestCase):
|
class TestApiAuth(DirectoriesMixin, APITestCase):
|
@ -8,7 +8,7 @@ from rest_framework import status
|
|||||||
from rest_framework.authtoken.models import Token
|
from rest_framework.authtoken.models import Token
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
|
||||||
|
|
||||||
# see allauth.socialaccount.providers.openid.provider.OpenIDProvider
|
# see allauth.socialaccount.providers.openid.provider.OpenIDProvider
|
@ -14,7 +14,6 @@ from rest_framework import status
|
|||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
from whoosh.writing import AsyncWriter
|
from whoosh.writing import AsyncWriter
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from paperless import index
|
from paperless import index
|
||||||
from paperless.bulk_edit import set_permissions
|
from paperless.bulk_edit import set_permissions
|
||||||
from paperless.models import Correspondent
|
from paperless.models import Correspondent
|
||||||
@ -27,6 +26,7 @@ from paperless.models import SavedView
|
|||||||
from paperless.models import StoragePath
|
from paperless.models import StoragePath
|
||||||
from paperless.models import Tag
|
from paperless.models import Tag
|
||||||
from paperless.models import Workflow
|
from paperless.models import Workflow
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
from paperless_mail.models import MailAccount
|
from paperless_mail.models import MailAccount
|
||||||
from paperless_mail.models import MailRule
|
from paperless_mail.models import MailRule
|
||||||
|
|
@ -7,8 +7,8 @@ from django.contrib.auth.models import User
|
|||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from paperless.models import PaperlessTask
|
from paperless.models import PaperlessTask
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
from paperless.views import TasksViewSet
|
from paperless.views import TasksViewSet
|
||||||
|
|
||||||
|
|
@ -6,7 +6,7 @@ from django.test import override_settings
|
|||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
|
||||||
|
|
||||||
class TestApiUiSettings(DirectoriesMixin, APITestCase):
|
class TestApiUiSettings(DirectoriesMixin, APITestCase):
|
@ -5,7 +5,6 @@ from django.contrib.auth.models import User
|
|||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.test import APITestCase
|
from rest_framework.test import APITestCase
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from paperless.data_models import DocumentSource
|
from paperless.data_models import DocumentSource
|
||||||
from paperless.models import Correspondent
|
from paperless.models import Correspondent
|
||||||
from paperless.models import CustomField
|
from paperless.models import CustomField
|
||||||
@ -15,6 +14,7 @@ from paperless.models import Tag
|
|||||||
from paperless.models import Workflow
|
from paperless.models import Workflow
|
||||||
from paperless.models import WorkflowAction
|
from paperless.models import WorkflowAction
|
||||||
from paperless.models import WorkflowTrigger
|
from paperless.models import WorkflowTrigger
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
|
||||||
|
|
||||||
class TestApiWorkflows(DirectoriesMixin, APITestCase):
|
class TestApiWorkflows(DirectoriesMixin, APITestCase):
|
@ -9,11 +9,6 @@ from django.conf import settings
|
|||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from documents.tests.utils import DocumentConsumeDelayMixin
|
|
||||||
from documents.tests.utils import DummyProgressManager
|
|
||||||
from documents.tests.utils import FileSystemAssertsMixin
|
|
||||||
from documents.tests.utils import SampleDirMixin
|
|
||||||
from paperless import tasks
|
from paperless import tasks
|
||||||
from paperless.barcodes import BarcodePlugin
|
from paperless.barcodes import BarcodePlugin
|
||||||
from paperless.data_models import ConsumableDocument
|
from paperless.data_models import ConsumableDocument
|
||||||
@ -22,6 +17,11 @@ from paperless.data_models import DocumentSource
|
|||||||
from paperless.models import Document
|
from paperless.models import Document
|
||||||
from paperless.models import Tag
|
from paperless.models import Tag
|
||||||
from paperless.plugins.base import StopConsumeTaskError
|
from paperless.plugins.base import StopConsumeTaskError
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
from paperless.tests.utils import DocumentConsumeDelayMixin
|
||||||
|
from paperless.tests.utils import DummyProgressManager
|
||||||
|
from paperless.tests.utils import FileSystemAssertsMixin
|
||||||
|
from paperless.tests.utils import SampleDirMixin
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import zxingcpp # noqa: F401
|
import zxingcpp # noqa: F401
|
@ -9,7 +9,6 @@ from guardian.shortcuts import assign_perm
|
|||||||
from guardian.shortcuts import get_groups_with_perms
|
from guardian.shortcuts import get_groups_with_perms
|
||||||
from guardian.shortcuts import get_users_with_perms
|
from guardian.shortcuts import get_users_with_perms
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from paperless import bulk_edit
|
from paperless import bulk_edit
|
||||||
from paperless.models import Correspondent
|
from paperless.models import Correspondent
|
||||||
from paperless.models import CustomField
|
from paperless.models import CustomField
|
||||||
@ -18,6 +17,7 @@ from paperless.models import Document
|
|||||||
from paperless.models import DocumentType
|
from paperless.models import DocumentType
|
||||||
from paperless.models import StoragePath
|
from paperless.models import StoragePath
|
||||||
from paperless.models import Tag
|
from paperless.models import Tag
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
|
||||||
|
|
||||||
class TestBulkEdit(DirectoriesMixin, TestCase):
|
class TestBulkEdit(DirectoriesMixin, TestCase):
|
@ -1,17 +1,103 @@
|
|||||||
import os
|
import os
|
||||||
|
import textwrap
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
|
from django.core.checks import Error
|
||||||
|
from django.core.checks import Warning
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
from documents.tests.factories import DocumentFactory
|
||||||
from documents.tests.utils import FileSystemAssertsMixin
|
|
||||||
from paperless.checks import audit_log_check
|
from paperless.checks import audit_log_check
|
||||||
from paperless.checks import binaries_check
|
from paperless.checks import binaries_check
|
||||||
|
from paperless.checks import changed_password_check
|
||||||
from paperless.checks import debug_mode_check
|
from paperless.checks import debug_mode_check
|
||||||
|
from paperless.checks import filename_format_check
|
||||||
|
from paperless.checks import parser_check
|
||||||
from paperless.checks import paths_check
|
from paperless.checks import paths_check
|
||||||
from paperless.checks import settings_values_check
|
from paperless.checks import settings_values_check
|
||||||
|
from paperless.models import Document
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
from paperless.tests.utils import FileSystemAssertsMixin
|
||||||
|
|
||||||
|
|
||||||
|
class TestDocumentChecks(TestCase):
|
||||||
|
def test_changed_password_check_empty_db(self):
|
||||||
|
self.assertListEqual(changed_password_check(None), [])
|
||||||
|
|
||||||
|
def test_changed_password_check_no_encryption(self):
|
||||||
|
DocumentFactory.create(storage_type=Document.STORAGE_TYPE_UNENCRYPTED)
|
||||||
|
self.assertListEqual(changed_password_check(None), [])
|
||||||
|
|
||||||
|
def test_encrypted_missing_passphrase(self):
|
||||||
|
DocumentFactory.create(storage_type=Document.STORAGE_TYPE_GPG)
|
||||||
|
msgs = changed_password_check(None)
|
||||||
|
self.assertEqual(len(msgs), 1)
|
||||||
|
msg_text = msgs[0].msg
|
||||||
|
self.assertEqual(
|
||||||
|
msg_text,
|
||||||
|
"The database contains encrypted documents but no password is set.",
|
||||||
|
)
|
||||||
|
|
||||||
|
@override_settings(
|
||||||
|
PASSPHRASE="test",
|
||||||
|
)
|
||||||
|
@mock.patch("paperless.db.GnuPG.decrypted")
|
||||||
|
@mock.patch("documents.models.Document.source_file")
|
||||||
|
def test_encrypted_decrypt_fails(self, mock_decrypted, mock_source_file):
|
||||||
|
mock_decrypted.return_value = None
|
||||||
|
mock_source_file.return_value = b""
|
||||||
|
|
||||||
|
DocumentFactory.create(storage_type=Document.STORAGE_TYPE_GPG)
|
||||||
|
|
||||||
|
msgs = changed_password_check(None)
|
||||||
|
|
||||||
|
self.assertEqual(len(msgs), 1)
|
||||||
|
msg_text = msgs[0].msg
|
||||||
|
self.assertEqual(
|
||||||
|
msg_text,
|
||||||
|
textwrap.dedent(
|
||||||
|
"""
|
||||||
|
The current password doesn't match the password of the
|
||||||
|
existing documents.
|
||||||
|
|
||||||
|
If you intend to change your password, you must first export
|
||||||
|
all of the old documents, start fresh with the new password
|
||||||
|
and then re-import them."
|
||||||
|
""",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_parser_check(self):
|
||||||
|
self.assertEqual(parser_check(None), [])
|
||||||
|
|
||||||
|
with mock.patch("documents.checks.document_consumer_declaration.send") as m:
|
||||||
|
m.return_value = []
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
parser_check(None),
|
||||||
|
[
|
||||||
|
Error(
|
||||||
|
"No parsers found. This is a bug. The consumer won't be "
|
||||||
|
"able to consume any documents without parsers.",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_filename_format_check(self):
|
||||||
|
self.assertEqual(filename_format_check(None), [])
|
||||||
|
|
||||||
|
with override_settings(FILENAME_FORMAT="{created}/{title}"):
|
||||||
|
self.assertEqual(
|
||||||
|
filename_format_check(None),
|
||||||
|
[
|
||||||
|
Warning(
|
||||||
|
"Filename format {created}/{title} is using the old style, please update to use double curly brackets",
|
||||||
|
hint="{{ created }}/{{ title }}",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class TestChecks(DirectoriesMixin, TestCase):
|
class TestChecks(DirectoriesMixin, TestCase):
|
||||||
|
@ -8,7 +8,6 @@ from django.conf import settings
|
|||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from paperless.classifier import ClassifierModelCorruptError
|
from paperless.classifier import ClassifierModelCorruptError
|
||||||
from paperless.classifier import DocumentClassifier
|
from paperless.classifier import DocumentClassifier
|
||||||
from paperless.classifier import IncompatibleClassifierVersionError
|
from paperless.classifier import IncompatibleClassifierVersionError
|
||||||
@ -19,6 +18,7 @@ from paperless.models import DocumentType
|
|||||||
from paperless.models import MatchingModel
|
from paperless.models import MatchingModel
|
||||||
from paperless.models import StoragePath
|
from paperless.models import StoragePath
|
||||||
from paperless.models import Tag
|
from paperless.models import Tag
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
|
||||||
|
|
||||||
def dummy_preprocess(content: str):
|
def dummy_preprocess(content: str):
|
@ -17,9 +17,6 @@ from django.test import override_settings
|
|||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from guardian.core import ObjectPermissionChecker
|
from guardian.core import ObjectPermissionChecker
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from documents.tests.utils import FileSystemAssertsMixin
|
|
||||||
from documents.tests.utils import GetConsumerMixin
|
|
||||||
from paperless.consumer import ConsumerError
|
from paperless.consumer import ConsumerError
|
||||||
from paperless.data_models import DocumentMetadataOverrides
|
from paperless.data_models import DocumentMetadataOverrides
|
||||||
from paperless.data_models import DocumentSource
|
from paperless.data_models import DocumentSource
|
||||||
@ -33,6 +30,9 @@ from paperless.parsers import DocumentParser
|
|||||||
from paperless.parsers import ParseError
|
from paperless.parsers import ParseError
|
||||||
from paperless.plugins.helpers import ProgressStatusOptions
|
from paperless.plugins.helpers import ProgressStatusOptions
|
||||||
from paperless.tasks import sanity_check
|
from paperless.tasks import sanity_check
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
from paperless.tests.utils import FileSystemAssertsMixin
|
||||||
|
from paperless.tests.utils import GetConsumerMixin
|
||||||
from paperless_mail.models import MailRule
|
from paperless_mail.models import MailRule
|
||||||
from paperless_mail.parsers import MailDocumentParser
|
from paperless_mail.parsers import MailDocumentParser
|
||||||
|
|
@ -9,15 +9,15 @@ from django.test import override_settings
|
|||||||
from pdfminer.high_level import extract_text
|
from pdfminer.high_level import extract_text
|
||||||
from pikepdf import Pdf
|
from pikepdf import Pdf
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from documents.tests.utils import DummyProgressManager
|
|
||||||
from documents.tests.utils import FileSystemAssertsMixin
|
|
||||||
from paperless import tasks
|
from paperless import tasks
|
||||||
from paperless.consumer import ConsumerError
|
from paperless.consumer import ConsumerError
|
||||||
from paperless.data_models import ConsumableDocument
|
from paperless.data_models import ConsumableDocument
|
||||||
from paperless.data_models import DocumentSource
|
from paperless.data_models import DocumentSource
|
||||||
from paperless.double_sided import STAGING_FILE_NAME
|
from paperless.double_sided import STAGING_FILE_NAME
|
||||||
from paperless.double_sided import TIMEOUT_MINUTES
|
from paperless.double_sided import TIMEOUT_MINUTES
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
from paperless.tests.utils import DummyProgressManager
|
||||||
|
from paperless.tests.utils import FileSystemAssertsMixin
|
||||||
|
|
||||||
|
|
||||||
@override_settings(
|
@override_settings(
|
@ -13,8 +13,6 @@ from django.test import TestCase
|
|||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from documents.tests.utils import FileSystemAssertsMixin
|
|
||||||
from paperless.file_handling import create_source_path_directory
|
from paperless.file_handling import create_source_path_directory
|
||||||
from paperless.file_handling import delete_empty_directories
|
from paperless.file_handling import delete_empty_directories
|
||||||
from paperless.file_handling import generate_filename
|
from paperless.file_handling import generate_filename
|
||||||
@ -25,6 +23,8 @@ from paperless.models import Document
|
|||||||
from paperless.models import DocumentType
|
from paperless.models import DocumentType
|
||||||
from paperless.models import StoragePath
|
from paperless.models import StoragePath
|
||||||
from paperless.tasks import empty_trash
|
from paperless.tasks import empty_trash
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
from paperless.tests.utils import FileSystemAssertsMixin
|
||||||
|
|
||||||
|
|
||||||
class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
@ -2,9 +2,9 @@ from unittest import mock
|
|||||||
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from paperless import index
|
from paperless import index
|
||||||
from paperless.models import Document
|
from paperless.models import Document
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
|
||||||
|
|
||||||
class TestAutoComplete(DirectoriesMixin, TestCase):
|
class TestAutoComplete(DirectoriesMixin, TestCase):
|
@ -13,11 +13,11 @@ from django.core.management import call_command
|
|||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from documents.tests.utils import FileSystemAssertsMixin
|
|
||||||
from paperless.file_handling import generate_filename
|
from paperless.file_handling import generate_filename
|
||||||
from paperless.models import Document
|
from paperless.models import Document
|
||||||
from paperless.tasks import update_document_content_maybe_archive_file
|
from paperless.tasks import update_document_content_maybe_archive_file
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
from paperless.tests.utils import FileSystemAssertsMixin
|
||||||
|
|
||||||
sample_file = os.path.join(os.path.dirname(__file__), "samples", "simple.pdf")
|
sample_file = os.path.join(os.path.dirname(__file__), "samples", "simple.pdf")
|
||||||
|
|
@ -13,11 +13,11 @@ from django.test import TransactionTestCase
|
|||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
|
|
||||||
from documents.management.commands import document_consumer
|
from documents.management.commands import document_consumer
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from documents.tests.utils import DocumentConsumeDelayMixin
|
|
||||||
from paperless.consumer import ConsumerError
|
from paperless.consumer import ConsumerError
|
||||||
from paperless.data_models import ConsumableDocument
|
from paperless.data_models import ConsumableDocument
|
||||||
from paperless.models import Tag
|
from paperless.models import Tag
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
from paperless.tests.utils import DocumentConsumeDelayMixin
|
||||||
|
|
||||||
|
|
||||||
class ConsumerThread(Thread):
|
class ConsumerThread(Thread):
|
@ -26,10 +26,6 @@ from guardian.shortcuts import assign_perm
|
|||||||
|
|
||||||
from documents.management.commands import document_exporter
|
from documents.management.commands import document_exporter
|
||||||
from documents.settings import EXPORTER_FILE_NAME
|
from documents.settings import EXPORTER_FILE_NAME
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from documents.tests.utils import FileSystemAssertsMixin
|
|
||||||
from documents.tests.utils import SampleDirMixin
|
|
||||||
from documents.tests.utils import paperless_environment
|
|
||||||
from paperless.models import Correspondent
|
from paperless.models import Correspondent
|
||||||
from paperless.models import CustomField
|
from paperless.models import CustomField
|
||||||
from paperless.models import CustomFieldInstance
|
from paperless.models import CustomFieldInstance
|
||||||
@ -43,6 +39,10 @@ from paperless.models import Workflow
|
|||||||
from paperless.models import WorkflowAction
|
from paperless.models import WorkflowAction
|
||||||
from paperless.models import WorkflowTrigger
|
from paperless.models import WorkflowTrigger
|
||||||
from paperless.sanity_checker import check_sanity
|
from paperless.sanity_checker import check_sanity
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
from paperless.tests.utils import FileSystemAssertsMixin
|
||||||
|
from paperless.tests.utils import SampleDirMixin
|
||||||
|
from paperless.tests.utils import paperless_environment
|
||||||
from paperless_mail.models import MailAccount
|
from paperless_mail.models import MailAccount
|
||||||
|
|
||||||
|
|
@ -11,10 +11,10 @@ from django.test import TestCase
|
|||||||
from documents.management.commands.document_importer import Command
|
from documents.management.commands.document_importer import Command
|
||||||
from documents.settings import EXPORTER_ARCHIVE_NAME
|
from documents.settings import EXPORTER_ARCHIVE_NAME
|
||||||
from documents.settings import EXPORTER_FILE_NAME
|
from documents.settings import EXPORTER_FILE_NAME
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from documents.tests.utils import FileSystemAssertsMixin
|
|
||||||
from documents.tests.utils import SampleDirMixin
|
|
||||||
from paperless.models import Document
|
from paperless.models import Document
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
from paperless.tests.utils import FileSystemAssertsMixin
|
||||||
|
from paperless.tests.utils import SampleDirMixin
|
||||||
|
|
||||||
|
|
||||||
class TestCommandImport(
|
class TestCommandImport(
|
@ -2,12 +2,12 @@ from django.core.management import call_command
|
|||||||
from django.core.management.base import CommandError
|
from django.core.management.base import CommandError
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from paperless.models import Correspondent
|
from paperless.models import Correspondent
|
||||||
from paperless.models import Document
|
from paperless.models import Document
|
||||||
from paperless.models import DocumentType
|
from paperless.models import DocumentType
|
||||||
from paperless.models import StoragePath
|
from paperless.models import StoragePath
|
||||||
from paperless.models import Tag
|
from paperless.models import Tag
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
|
||||||
|
|
||||||
class TestRetagger(DirectoriesMixin, TestCase):
|
class TestRetagger(DirectoriesMixin, TestCase):
|
@ -6,7 +6,7 @@ from django.contrib.auth.models import User
|
|||||||
from django.core.management import call_command
|
from django.core.management import call_command
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
|
||||||
|
|
||||||
class TestManageSuperUser(DirectoriesMixin, TestCase):
|
class TestManageSuperUser(DirectoriesMixin, TestCase):
|
@ -6,10 +6,10 @@ from django.core.management import call_command
|
|||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
from documents.management.commands.document_thumbnails import _process_document
|
from documents.management.commands.document_thumbnails import _process_document
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from documents.tests.utils import FileSystemAssertsMixin
|
|
||||||
from paperless.models import Document
|
from paperless.models import Document
|
||||||
from paperless.parsers import get_default_thumbnail
|
from paperless.parsers import get_default_thumbnail
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
from paperless.tests.utils import FileSystemAssertsMixin
|
||||||
|
|
||||||
|
|
||||||
class TestMakeThumbnails(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
class TestMakeThumbnails(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
@ -8,10 +8,10 @@ from unittest import mock
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from documents.tests.utils import FileSystemAssertsMixin
|
|
||||||
from documents.tests.utils import TestMigrations
|
|
||||||
from paperless.parsers import ParseError
|
from paperless.parsers import ParseError
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
from paperless.tests.utils import FileSystemAssertsMixin
|
||||||
|
from paperless.tests.utils import TestMigrations
|
||||||
|
|
||||||
STORAGE_TYPE_GPG = "gpg"
|
STORAGE_TYPE_GPG = "gpg"
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
|
||||||
from documents.tests.utils import TestMigrations
|
from paperless.tests.utils import TestMigrations
|
||||||
|
|
||||||
|
|
||||||
class TestMigrateConsumptionTemplate(TestMigrations):
|
class TestMigrateConsumptionTemplate(TestMigrations):
|
@ -1,6 +1,6 @@
|
|||||||
from unittest.mock import ANY
|
from unittest.mock import ANY
|
||||||
|
|
||||||
from documents.tests.utils import TestMigrations
|
from paperless.tests.utils import TestMigrations
|
||||||
|
|
||||||
|
|
||||||
class TestMigrateCustomFieldSelects(TestMigrations):
|
class TestMigrateCustomFieldSelects(TestMigrations):
|
@ -1,6 +1,6 @@
|
|||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
|
||||||
from documents.tests.utils import TestMigrations
|
from paperless.tests.utils import TestMigrations
|
||||||
|
|
||||||
|
|
||||||
class TestMigrateCustomFields(TestMigrations):
|
class TestMigrateCustomFields(TestMigrations):
|
@ -4,8 +4,8 @@ from pathlib import Path
|
|||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
from documents.tests.utils import TestMigrations
|
from paperless.tests.utils import TestMigrations
|
||||||
|
|
||||||
|
|
||||||
def source_path_before(self):
|
def source_path_before(self):
|
@ -8,7 +8,7 @@ from unittest import mock
|
|||||||
|
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
|
|
||||||
from documents.tests.utils import TestMigrations
|
from paperless.tests.utils import TestMigrations
|
||||||
|
|
||||||
# https://github.com/python/cpython/issues/100950
|
# https://github.com/python/cpython/issues/100950
|
||||||
migration_1037_obj = importlib.import_module(
|
migration_1037_obj = importlib.import_module(
|
@ -4,9 +4,9 @@ import shutil
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
|
|
||||||
from documents.tests.utils import DirectoriesMixin
|
|
||||||
from documents.tests.utils import TestMigrations
|
|
||||||
from paperless.parsers import get_default_file_extension
|
from paperless.parsers import get_default_file_extension
|
||||||
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
|
from paperless.tests.utils import TestMigrations
|
||||||
|
|
||||||
STORAGE_TYPE_UNENCRYPTED = "unencrypted"
|
STORAGE_TYPE_UNENCRYPTED = "unencrypted"
|
||||||
STORAGE_TYPE_GPG = "gpg"
|
STORAGE_TYPE_GPG = "gpg"
|
@ -1,5 +1,5 @@
|
|||||||
from documents.tests.utils import DirectoriesMixin
|
from paperless.tests.utils import DirectoriesMixin
|
||||||
from documents.tests.utils import TestMigrations
|
from paperless.tests.utils import TestMigrations
|
||||||
|
|
||||||
|
|
||||||
class TestMigrateNullCharacters(DirectoriesMixin, TestMigrations):
|
class TestMigrateNullCharacters(DirectoriesMixin, TestMigrations):
|