paperless-ngx/src/documents/tests/test_tasks.py

153 lines
5.4 KiB
Python
Raw Normal View History

import os
2020-12-29 21:01:18 +01:00
from unittest import mock
2020-11-30 22:04:25 +01:00
from django.conf import settings
from django.test import TestCase
2020-12-01 15:26:15 +01:00
from django.utils import timezone
2020-11-30 22:04:25 +01:00
from documents import tasks
from documents.models import Correspondent
from documents.models import Document
from documents.models import DocumentType
from documents.models import Tag
from documents.sanity_checker import SanityCheckFailedException
from documents.sanity_checker import SanityCheckMessages
2022-09-15 19:58:14 -07:00
from documents.tests.test_classifier import dummy_preprocess
2020-11-30 22:04:25 +01:00
from documents.tests.utils import DirectoriesMixin
from documents.tests.utils import FileSystemAssertsMixin
2020-11-30 22:04:25 +01:00
class TestIndexReindex(DirectoriesMixin, TestCase):
2020-11-30 22:04:25 +01:00
def test_index_reindex(self):
2022-02-27 15:26:41 +01:00
Document.objects.create(
title="test",
content="my document",
checksum="wow",
added=timezone.now(),
created=timezone.now(),
modified=timezone.now(),
)
2020-11-30 22:04:25 +01:00
tasks.index_reindex()
def test_index_optimize(self):
2022-02-27 15:26:41 +01:00
Document.objects.create(
title="test",
content="my document",
checksum="wow",
added=timezone.now(),
created=timezone.now(),
modified=timezone.now(),
)
2020-11-30 22:04:25 +01:00
tasks.index_optimize()
class TestClassifier(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
@mock.patch("documents.tasks.load_classifier")
def test_train_classifier_no_auto_matching(self, load_classifier):
tasks.train_classifier()
load_classifier.assert_not_called()
@mock.patch("documents.tasks.load_classifier")
def test_train_classifier_with_auto_tag(self, load_classifier):
load_classifier.return_value = None
Tag.objects.create(matching_algorithm=Tag.MATCH_AUTO, name="test")
tasks.train_classifier()
load_classifier.assert_called_once()
self.assertIsNotFile(settings.MODEL_FILE)
@mock.patch("documents.tasks.load_classifier")
def test_train_classifier_with_auto_type(self, load_classifier):
load_classifier.return_value = None
DocumentType.objects.create(matching_algorithm=Tag.MATCH_AUTO, name="test")
tasks.train_classifier()
load_classifier.assert_called_once()
self.assertIsNotFile(settings.MODEL_FILE)
@mock.patch("documents.tasks.load_classifier")
def test_train_classifier_with_auto_correspondent(self, load_classifier):
load_classifier.return_value = None
Correspondent.objects.create(matching_algorithm=Tag.MATCH_AUTO, name="test")
tasks.train_classifier()
load_classifier.assert_called_once()
self.assertIsNotFile(settings.MODEL_FILE)
2020-11-30 22:04:25 +01:00
def test_train_classifier(self):
c = Correspondent.objects.create(matching_algorithm=Tag.MATCH_AUTO, name="test")
doc = Document.objects.create(correspondent=c, content="test", title="test")
self.assertIsNotFile(settings.MODEL_FILE)
2022-09-15 19:58:14 -07:00
with mock.patch(
"documents.classifier.DocumentClassifier.preprocess_content",
) as pre_proc_mock:
pre_proc_mock.side_effect = dummy_preprocess
tasks.train_classifier()
self.assertIsFile(settings.MODEL_FILE)
2022-09-15 19:58:14 -07:00
mtime = os.stat(settings.MODEL_FILE).st_mtime
tasks.train_classifier()
self.assertIsFile(settings.MODEL_FILE)
2022-09-15 19:58:14 -07:00
mtime2 = os.stat(settings.MODEL_FILE).st_mtime
self.assertEqual(mtime, mtime2)
doc.content = "test2"
doc.save()
tasks.train_classifier()
self.assertIsFile(settings.MODEL_FILE)
2022-09-15 19:58:14 -07:00
mtime3 = os.stat(settings.MODEL_FILE).st_mtime
self.assertNotEqual(mtime2, mtime3)
2020-12-29 21:01:18 +01:00
class TestSanityCheck(DirectoriesMixin, TestCase):
2020-12-29 21:01:18 +01:00
@mock.patch("documents.tasks.sanity_checker.check_sanity")
def test_sanity_check_success(self, m):
m.return_value = SanityCheckMessages()
self.assertEqual(tasks.sanity_check(), "No issues detected.")
2020-12-29 21:01:18 +01:00
m.assert_called_once()
@mock.patch("documents.tasks.sanity_checker.check_sanity")
def test_sanity_check_error(self, m):
messages = SanityCheckMessages()
messages.error(None, "Some error")
m.return_value = messages
self.assertRaises(SanityCheckFailedException, tasks.sanity_check)
m.assert_called_once()
@mock.patch("documents.tasks.sanity_checker.check_sanity")
def test_sanity_check_warning(self, m):
messages = SanityCheckMessages()
messages.warning(None, "Some warning")
m.return_value = messages
2022-02-27 15:26:41 +01:00
self.assertEqual(
tasks.sanity_check(),
"Sanity check exited with warnings. See log.",
2022-02-27 15:26:41 +01:00
)
m.assert_called_once()
@mock.patch("documents.tasks.sanity_checker.check_sanity")
def test_sanity_check_info(self, m):
messages = SanityCheckMessages()
messages.info(None, "Some info")
m.return_value = messages
2022-02-27 15:26:41 +01:00
self.assertEqual(
tasks.sanity_check(),
"Sanity check exited with infos. See log.",
2022-02-27 15:26:41 +01:00
)
2020-12-29 21:01:18 +01:00
m.assert_called_once()
class TestBulkUpdate(DirectoriesMixin, TestCase):
2021-01-30 15:44:23 +01:00
def test_bulk_update_documents(self):
2022-02-27 15:26:41 +01:00
doc1 = Document.objects.create(
title="test",
content="my document",
checksum="wow",
added=timezone.now(),
created=timezone.now(),
modified=timezone.now(),
)
2020-12-29 21:01:18 +01:00
tasks.bulk_update_documents([doc1.pk])