mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-09 09:58:20 -05:00
116 lines
3.8 KiB
Python
116 lines
3.8 KiB
Python
import tempfile
|
|
from pathlib import Path
|
|
|
|
from django.core.management import call_command
|
|
from django.core.management.base import CommandError
|
|
from django.test import TestCase
|
|
|
|
from documents.management.commands.document_importer import Command
|
|
from documents.settings import EXPORTER_ARCHIVE_NAME
|
|
from documents.settings import EXPORTER_FILE_NAME
|
|
|
|
|
|
class TestImporter(TestCase):
|
|
def __init__(self, *args, **kwargs):
|
|
TestCase.__init__(self, *args, **kwargs)
|
|
|
|
def test_check_manifest_exists(self):
|
|
cmd = Command()
|
|
self.assertRaises(
|
|
CommandError,
|
|
cmd._check_manifest_exists,
|
|
Path("/tmp/manifest.json"),
|
|
)
|
|
|
|
def test_check_manifest(self):
|
|
cmd = Command()
|
|
cmd.source = Path("/tmp")
|
|
|
|
cmd.manifest = [{"model": "documents.document"}]
|
|
with self.assertRaises(CommandError) as cm:
|
|
cmd._check_manifest_valid()
|
|
self.assertIn("The manifest file contains a record", str(cm.exception))
|
|
|
|
cmd.manifest = [
|
|
{"model": "documents.document", EXPORTER_FILE_NAME: "noexist.pdf"},
|
|
]
|
|
# self.assertRaises(CommandError, cmd._check_manifest)
|
|
with self.assertRaises(CommandError) as cm:
|
|
cmd._check_manifest_valid()
|
|
self.assertIn(
|
|
'The manifest file refers to "noexist.pdf"',
|
|
str(cm.exception),
|
|
)
|
|
|
|
def test_import_permission_error(self):
|
|
"""
|
|
GIVEN:
|
|
- Original file which cannot be read from
|
|
- Archive file which cannot be read from
|
|
WHEN:
|
|
- Import is attempted
|
|
THEN:
|
|
- CommandError is raised indicating the issue
|
|
"""
|
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
# Create empty files
|
|
original_path = Path(temp_dir) / "original.pdf"
|
|
archive_path = Path(temp_dir) / "archive.pdf"
|
|
original_path.touch()
|
|
archive_path.touch()
|
|
|
|
# No read permissions
|
|
original_path.chmod(0o222)
|
|
|
|
cmd = Command()
|
|
cmd.source = Path(temp_dir)
|
|
cmd.manifest = [
|
|
{
|
|
"model": "documents.document",
|
|
EXPORTER_FILE_NAME: "original.pdf",
|
|
EXPORTER_ARCHIVE_NAME: "archive.pdf",
|
|
},
|
|
]
|
|
with self.assertRaises(CommandError) as cm:
|
|
cmd._check_manifest_valid()
|
|
self.assertInt("Failed to read from original file", str(cm.exception))
|
|
|
|
original_path.chmod(0o444)
|
|
archive_path.chmod(0o222)
|
|
|
|
with self.assertRaises(CommandError) as cm:
|
|
cmd._check_manifest_valid()
|
|
self.assertInt("Failed to read from archive file", str(cm.exception))
|
|
|
|
def test_import_source_not_existing(self):
|
|
"""
|
|
GIVEN:
|
|
- Source given doesn't exist
|
|
WHEN:
|
|
- Import is attempted
|
|
THEN:
|
|
- CommandError is raised indicating the issue
|
|
"""
|
|
with self.assertRaises(CommandError) as cm:
|
|
call_command("document_importer", Path("/tmp/notapath"))
|
|
self.assertInt("That path doesn't exist", str(cm.exception))
|
|
|
|
def test_import_source_not_readable(self):
|
|
"""
|
|
GIVEN:
|
|
- Source given isn't readable
|
|
WHEN:
|
|
- Import is attempted
|
|
THEN:
|
|
- CommandError is raised indicating the issue
|
|
"""
|
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
path = Path(temp_dir)
|
|
path.chmod(0o222)
|
|
with self.assertRaises(CommandError) as cm:
|
|
call_command("document_importer", path)
|
|
self.assertInt(
|
|
"That path doesn't appear to be readable",
|
|
str(cm.exception),
|
|
)
|