mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-02 13:45:10 -05:00
126 lines
4.0 KiB
Python
126 lines
4.0 KiB
Python
import shutil
|
|
import tempfile
|
|
import zoneinfo
|
|
from pathlib import Path
|
|
from unittest import mock
|
|
|
|
from django.test import TestCase
|
|
from django.test import override_settings
|
|
from django.utils import timezone
|
|
|
|
from documents.models import Correspondent
|
|
from documents.models import Document
|
|
|
|
|
|
class TestDocument(TestCase):
|
|
def setUp(self) -> None:
|
|
self.originals_dir = tempfile.mkdtemp()
|
|
self.thumb_dir = tempfile.mkdtemp()
|
|
|
|
override_settings(
|
|
ORIGINALS_DIR=self.originals_dir,
|
|
THUMBNAIL_DIR=self.thumb_dir,
|
|
).enable()
|
|
|
|
def tearDown(self) -> None:
|
|
shutil.rmtree(self.originals_dir)
|
|
shutil.rmtree(self.thumb_dir)
|
|
|
|
def test_file_deletion(self):
|
|
document = Document.objects.create(
|
|
correspondent=Correspondent.objects.create(name="Test0"),
|
|
title="Title",
|
|
content="content",
|
|
checksum="checksum",
|
|
mime_type="application/pdf",
|
|
)
|
|
|
|
file_path = document.source_path
|
|
thumb_path = document.thumbnail_path
|
|
|
|
Path(file_path).touch()
|
|
Path(thumb_path).touch()
|
|
|
|
with mock.patch("documents.signals.handlers.os.unlink") as mock_unlink:
|
|
document.delete()
|
|
mock_unlink.assert_any_call(file_path)
|
|
mock_unlink.assert_any_call(thumb_path)
|
|
self.assertEqual(mock_unlink.call_count, 2)
|
|
|
|
def test_file_name(self):
|
|
doc = Document(
|
|
mime_type="application/pdf",
|
|
title="test",
|
|
created=timezone.datetime(2020, 12, 25, tzinfo=zoneinfo.ZoneInfo("UTC")),
|
|
)
|
|
self.assertEqual(doc.get_public_filename(), "2020-12-25 test.pdf")
|
|
|
|
@override_settings(
|
|
TIME_ZONE="Europe/Berlin",
|
|
)
|
|
def test_file_name_with_timezone(self):
|
|
# See https://docs.djangoproject.com/en/4.0/ref/utils/#django.utils.timezone.now
|
|
# The default for created is an aware datetime in UTC
|
|
# This does that, just manually, with a fixed date
|
|
local_create_date = timezone.datetime(
|
|
2020,
|
|
12,
|
|
25,
|
|
tzinfo=zoneinfo.ZoneInfo("Europe/Berlin"),
|
|
)
|
|
|
|
utc_create_date = local_create_date.astimezone(zoneinfo.ZoneInfo("UTC"))
|
|
|
|
doc = Document(
|
|
mime_type="application/pdf",
|
|
title="test",
|
|
created=utc_create_date,
|
|
)
|
|
|
|
# Ensure the create date would cause an off by 1 if not properly created above
|
|
self.assertEqual(utc_create_date.date().day, 24)
|
|
self.assertEqual(doc.get_public_filename(), "2020-12-25 test.pdf")
|
|
|
|
local_create_date = timezone.datetime(
|
|
2020,
|
|
1,
|
|
1,
|
|
tzinfo=zoneinfo.ZoneInfo("Europe/Berlin"),
|
|
)
|
|
|
|
utc_create_date = local_create_date.astimezone(zoneinfo.ZoneInfo("UTC"))
|
|
|
|
doc = Document(
|
|
mime_type="application/pdf",
|
|
title="test",
|
|
created=utc_create_date,
|
|
)
|
|
|
|
# Ensure the create date would cause an off by 1 in the year if not properly created above
|
|
self.assertEqual(utc_create_date.date().year, 2019)
|
|
self.assertEqual(doc.get_public_filename(), "2020-01-01 test.pdf")
|
|
|
|
def test_file_name_jpg(self):
|
|
doc = Document(
|
|
mime_type="image/jpeg",
|
|
title="test",
|
|
created=timezone.datetime(2020, 12, 25, tzinfo=zoneinfo.ZoneInfo("UTC")),
|
|
)
|
|
self.assertEqual(doc.get_public_filename(), "2020-12-25 test.jpg")
|
|
|
|
def test_file_name_unknown(self):
|
|
doc = Document(
|
|
mime_type="application/zip",
|
|
title="test",
|
|
created=timezone.datetime(2020, 12, 25, tzinfo=zoneinfo.ZoneInfo("UTC")),
|
|
)
|
|
self.assertEqual(doc.get_public_filename(), "2020-12-25 test.zip")
|
|
|
|
def test_file_name_invalid_type(self):
|
|
doc = Document(
|
|
mime_type="image/jpegasd",
|
|
title="test",
|
|
created=timezone.datetime(2020, 12, 25, tzinfo=zoneinfo.ZoneInfo("UTC")),
|
|
)
|
|
self.assertEqual(doc.get_public_filename(), "2020-12-25 test")
|