mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-08-10 00:18:57 +00:00
Change: treat created as date not datetime (#9793)
This commit is contained in:
@@ -171,6 +171,32 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
|
||||
results = response.data["results"]
|
||||
self.assertEqual(len(results[0]), 0)
|
||||
|
||||
def test_document_update_with_created_date(self):
|
||||
"""
|
||||
GIVEN:
|
||||
- Existing document
|
||||
WHEN:
|
||||
- Document is updated with created_date and not created
|
||||
THEN:
|
||||
- Document created field is updated
|
||||
"""
|
||||
doc = Document.objects.create(
|
||||
title="none",
|
||||
checksum="123",
|
||||
mime_type="application/pdf",
|
||||
created=date(2023, 1, 1),
|
||||
)
|
||||
|
||||
created_date = date(2023, 2, 1)
|
||||
self.client.patch(
|
||||
f"/api/documents/{doc.pk}/",
|
||||
{"created_date": created_date},
|
||||
format="json",
|
||||
)
|
||||
|
||||
doc.refresh_from_db()
|
||||
self.assertEqual(doc.created_date, created_date)
|
||||
|
||||
def test_document_actions(self):
|
||||
_, filename = tempfile.mkstemp(dir=self.dirs.originals_dir)
|
||||
|
||||
@@ -1313,7 +1339,7 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase):
|
||||
|
||||
_, overrides = self.get_last_consume_delay_call_args()
|
||||
|
||||
self.assertEqual(overrides.created, created)
|
||||
self.assertEqual(overrides.created, created.date())
|
||||
|
||||
def test_upload_with_asn(self):
|
||||
self.consume_file_mock.return_value = celery.result.AsyncResult(
|
||||
|
@@ -4,7 +4,6 @@ from unittest import mock
|
||||
|
||||
from django.contrib.auth.models import Permission
|
||||
from django.contrib.auth.models import User
|
||||
from django.utils import timezone
|
||||
from rest_framework import status
|
||||
from rest_framework.test import APITestCase
|
||||
|
||||
@@ -104,13 +103,13 @@ class TestApiObjects(DirectoriesMixin, APITestCase):
|
||||
Document.objects.create(
|
||||
mime_type="application/pdf",
|
||||
correspondent=self.c1,
|
||||
created=timezone.make_aware(datetime.datetime(2022, 1, 1)),
|
||||
created=datetime.date(2022, 1, 1),
|
||||
checksum="123",
|
||||
)
|
||||
Document.objects.create(
|
||||
mime_type="application/pdf",
|
||||
correspondent=self.c1,
|
||||
created=timezone.make_aware(datetime.datetime(2022, 1, 2)),
|
||||
created=datetime.date(2022, 1, 2),
|
||||
checksum="456",
|
||||
)
|
||||
|
||||
|
@@ -474,7 +474,7 @@ class TestApiAuth(DirectoriesMixin, APITestCase):
|
||||
self.client.force_authenticate(user1)
|
||||
|
||||
response = self.client.get(
|
||||
"/api/documents/",
|
||||
"/api/documents/?ordering=-id",
|
||||
format="json",
|
||||
)
|
||||
|
||||
|
@@ -721,7 +721,7 @@ class TestDocumentSearchApi(DirectoriesMixin, APITestCase):
|
||||
d3.tags.add(t2)
|
||||
d4 = Document.objects.create(
|
||||
checksum="4",
|
||||
created=timezone.make_aware(datetime.datetime(2020, 7, 13)),
|
||||
created=datetime.date(2020, 7, 13),
|
||||
content="test",
|
||||
original_filename="doc4.pdf",
|
||||
)
|
||||
|
@@ -1,3 +1,5 @@
|
||||
from datetime import date
|
||||
|
||||
from django.contrib.auth.models import Permission
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.cache import cache
|
||||
@@ -116,6 +118,7 @@ class TestTrashAPI(APITestCase):
|
||||
checksum="checksum",
|
||||
mime_type="application/pdf",
|
||||
owner=self.user,
|
||||
created=date(2023, 1, 1),
|
||||
)
|
||||
document_u1.delete()
|
||||
document_not_owned = Document.objects.create(
|
||||
@@ -123,6 +126,7 @@ class TestTrashAPI(APITestCase):
|
||||
content="content2",
|
||||
checksum="checksum2",
|
||||
mime_type="application/pdf",
|
||||
created=date(2023, 1, 2),
|
||||
)
|
||||
document_not_owned.delete()
|
||||
user2 = User.objects.create_user(username="user2")
|
||||
|
@@ -1,4 +1,5 @@
|
||||
import shutil
|
||||
from datetime import date
|
||||
from pathlib import Path
|
||||
from unittest import mock
|
||||
|
||||
@@ -39,18 +40,24 @@ class TestBulkEdit(DirectoriesMixin, TestCase):
|
||||
self.dt2 = DocumentType.objects.create(name="dt2")
|
||||
self.t1 = Tag.objects.create(name="t1")
|
||||
self.t2 = Tag.objects.create(name="t2")
|
||||
self.doc1 = Document.objects.create(checksum="A", title="A")
|
||||
self.doc1 = Document.objects.create(
|
||||
checksum="A",
|
||||
title="A",
|
||||
created=date(2023, 1, 1),
|
||||
)
|
||||
self.doc2 = Document.objects.create(
|
||||
checksum="B",
|
||||
title="B",
|
||||
correspondent=self.c1,
|
||||
document_type=self.dt1,
|
||||
created=date(2023, 1, 2),
|
||||
)
|
||||
self.doc3 = Document.objects.create(
|
||||
checksum="C",
|
||||
title="C",
|
||||
correspondent=self.c2,
|
||||
document_type=self.dt2,
|
||||
created=date(2023, 1, 3),
|
||||
)
|
||||
self.doc4 = Document.objects.create(checksum="D", title="D")
|
||||
self.doc5 = Document.objects.create(checksum="E", title="E")
|
||||
@@ -529,6 +536,7 @@ class TestPDFActions(DirectoriesMixin, TestCase):
|
||||
filename=sample2,
|
||||
mime_type="application/pdf",
|
||||
page_count=8,
|
||||
created=date(2023, 1, 2),
|
||||
)
|
||||
self.doc2.archive_filename = sample2_archive
|
||||
self.doc2.save()
|
||||
@@ -557,6 +565,7 @@ class TestPDFActions(DirectoriesMixin, TestCase):
|
||||
title="D",
|
||||
filename=img_doc,
|
||||
mime_type="image/jpeg",
|
||||
created=date(2023, 1, 3),
|
||||
)
|
||||
self.img_doc.archive_filename = img_doc_archive
|
||||
self.img_doc.save()
|
||||
|
@@ -3,12 +3,10 @@ import os
|
||||
import shutil
|
||||
import stat
|
||||
import tempfile
|
||||
import zoneinfo
|
||||
from pathlib import Path
|
||||
from unittest import mock
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
from dateutil import tz
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import Group
|
||||
from django.contrib.auth.models import User
|
||||
@@ -247,20 +245,9 @@ class TestConsumer(
|
||||
|
||||
self._assert_first_last_send_progress()
|
||||
|
||||
# Convert UTC time from DB to local time
|
||||
document_date_local = timezone.localtime(document.created)
|
||||
|
||||
self.assertEqual(
|
||||
document_date_local.tzinfo,
|
||||
zoneinfo.ZoneInfo("America/Chicago"),
|
||||
)
|
||||
self.assertEqual(document_date_local.tzinfo, rough_create_date_local.tzinfo)
|
||||
self.assertEqual(document_date_local.year, rough_create_date_local.year)
|
||||
self.assertEqual(document_date_local.month, rough_create_date_local.month)
|
||||
self.assertEqual(document_date_local.day, rough_create_date_local.day)
|
||||
self.assertEqual(document_date_local.hour, rough_create_date_local.hour)
|
||||
self.assertEqual(document_date_local.minute, rough_create_date_local.minute)
|
||||
# Skipping seconds and more precise
|
||||
self.assertEqual(document.created.year, rough_create_date_local.year)
|
||||
self.assertEqual(document.created.month, rough_create_date_local.month)
|
||||
self.assertEqual(document.created.day, rough_create_date_local.day)
|
||||
|
||||
@override_settings(FILENAME_FORMAT=None)
|
||||
def testDeleteMacFiles(self):
|
||||
@@ -931,7 +918,7 @@ class TestConsumerCreatedDate(DirectoriesMixin, GetConsumerMixin, TestCase):
|
||||
|
||||
self.assertEqual(
|
||||
document.created,
|
||||
datetime.datetime(1996, 2, 20, tzinfo=tz.gettz(settings.TIME_ZONE)),
|
||||
datetime.date(1996, 2, 20),
|
||||
)
|
||||
|
||||
@override_settings(FILENAME_DATE_ORDER="YMD")
|
||||
@@ -961,7 +948,7 @@ class TestConsumerCreatedDate(DirectoriesMixin, GetConsumerMixin, TestCase):
|
||||
|
||||
self.assertEqual(
|
||||
document.created,
|
||||
datetime.datetime(2022, 2, 1, tzinfo=tz.gettz(settings.TIME_ZONE)),
|
||||
datetime.date(2022, 2, 1),
|
||||
)
|
||||
|
||||
def test_consume_date_filename_date_use_content(self):
|
||||
@@ -991,7 +978,7 @@ class TestConsumerCreatedDate(DirectoriesMixin, GetConsumerMixin, TestCase):
|
||||
|
||||
self.assertEqual(
|
||||
document.created,
|
||||
datetime.datetime(1996, 2, 20, tzinfo=tz.gettz(settings.TIME_ZONE)),
|
||||
datetime.date(1996, 2, 20),
|
||||
)
|
||||
|
||||
@override_settings(
|
||||
@@ -1023,7 +1010,7 @@ class TestConsumerCreatedDate(DirectoriesMixin, GetConsumerMixin, TestCase):
|
||||
|
||||
self.assertEqual(
|
||||
document.created,
|
||||
datetime.datetime(1997, 2, 20, tzinfo=tz.gettz(settings.TIME_ZONE)),
|
||||
datetime.date(1997, 2, 20),
|
||||
)
|
||||
|
||||
|
||||
|
@@ -1,12 +1,11 @@
|
||||
import shutil
|
||||
import tempfile
|
||||
import zoneinfo
|
||||
from datetime import date
|
||||
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
|
||||
@@ -81,60 +80,15 @@ class TestDocument(TestCase):
|
||||
doc = Document(
|
||||
mime_type="application/pdf",
|
||||
title="test",
|
||||
created=timezone.datetime(2020, 12, 25, tzinfo=zoneinfo.ZoneInfo("UTC")),
|
||||
created=date(2020, 12, 25),
|
||||
)
|
||||
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")),
|
||||
created=date(2020, 12, 25),
|
||||
)
|
||||
self.assertEqual(doc.get_public_filename(), "2020-12-25 test.jpg")
|
||||
|
||||
@@ -142,7 +96,7 @@ class TestDocument(TestCase):
|
||||
doc = Document(
|
||||
mime_type="application/zip",
|
||||
title="test",
|
||||
created=timezone.datetime(2020, 12, 25, tzinfo=zoneinfo.ZoneInfo("UTC")),
|
||||
created=date(2020, 12, 25),
|
||||
)
|
||||
self.assertEqual(doc.get_public_filename(), "2020-12-25 test.zip")
|
||||
|
||||
@@ -150,6 +104,6 @@ class TestDocument(TestCase):
|
||||
doc = Document(
|
||||
mime_type="image/jpegasd",
|
||||
title="test",
|
||||
created=timezone.datetime(2020, 12, 25, tzinfo=zoneinfo.ZoneInfo("UTC")),
|
||||
created=date(2020, 12, 25),
|
||||
)
|
||||
self.assertEqual(doc.get_public_filename(), "2020-12-25 test")
|
||||
|
@@ -333,7 +333,7 @@ class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
|
||||
|
||||
self.assertEqual(generate_filename(doc1), "2020-03-06.pdf")
|
||||
|
||||
doc1.created = timezone.make_aware(datetime.datetime(2020, 11, 16, 1, 1, 1))
|
||||
doc1.created = datetime.date(2020, 11, 16)
|
||||
|
||||
self.assertEqual(generate_filename(doc1), "2020-11-16.pdf")
|
||||
|
||||
@@ -912,7 +912,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
|
||||
def test_date(self):
|
||||
doc = Document.objects.create(
|
||||
title="does not matter",
|
||||
created=timezone.make_aware(datetime.datetime(2020, 5, 21, 7, 36, 51, 153)),
|
||||
created=datetime.date(2020, 5, 21),
|
||||
mime_type="application/pdf",
|
||||
pk=2,
|
||||
checksum="2",
|
||||
@@ -930,7 +930,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
|
||||
"""
|
||||
doc = Document.objects.create(
|
||||
title="does not matter",
|
||||
created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)),
|
||||
created=datetime.date(2020, 6, 25),
|
||||
mime_type="application/pdf",
|
||||
pk=2,
|
||||
checksum="2",
|
||||
@@ -951,7 +951,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
|
||||
"""
|
||||
doc = Document.objects.create(
|
||||
title="does not matter",
|
||||
created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)),
|
||||
created=datetime.date(2020, 6, 25),
|
||||
mime_type="application/pdf",
|
||||
pk=2,
|
||||
checksum="2",
|
||||
@@ -979,7 +979,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
|
||||
)
|
||||
doc = Document.objects.create(
|
||||
title="does not matter",
|
||||
created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)),
|
||||
created=datetime.date(2020, 6, 25),
|
||||
mime_type="application/pdf",
|
||||
pk=2,
|
||||
checksum="2",
|
||||
@@ -1007,7 +1007,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
|
||||
"""
|
||||
doc_a = Document.objects.create(
|
||||
title="does not matter",
|
||||
created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)),
|
||||
created=datetime.date(2020, 6, 25),
|
||||
mime_type="application/pdf",
|
||||
pk=2,
|
||||
checksum="2",
|
||||
@@ -1019,7 +1019,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
|
||||
)
|
||||
doc_b = Document.objects.create(
|
||||
title="does not matter",
|
||||
created=timezone.make_aware(datetime.datetime(2020, 7, 25, 7, 36, 51, 153)),
|
||||
created=datetime.date(2020, 7, 25),
|
||||
mime_type="application/pdf",
|
||||
pk=5,
|
||||
checksum="abcde",
|
||||
@@ -1047,7 +1047,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
|
||||
"""
|
||||
doc_a = Document.objects.create(
|
||||
title="does not matter",
|
||||
created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)),
|
||||
created=datetime.date(2020, 6, 25),
|
||||
mime_type="application/pdf",
|
||||
pk=2,
|
||||
checksum="2",
|
||||
@@ -1055,7 +1055,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
|
||||
)
|
||||
doc_b = Document.objects.create(
|
||||
title="does not matter",
|
||||
created=timezone.make_aware(datetime.datetime(2020, 7, 25, 7, 36, 51, 153)),
|
||||
created=datetime.date(2020, 7, 25),
|
||||
mime_type="application/pdf",
|
||||
pk=5,
|
||||
checksum="abcde",
|
||||
@@ -1074,9 +1074,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
|
||||
def test_short_names_created(self):
|
||||
doc = Document.objects.create(
|
||||
title="The Title",
|
||||
created=timezone.make_aware(
|
||||
datetime.datetime(1989, 12, 21, 7, 36, 51, 153),
|
||||
),
|
||||
created=datetime.date(1989, 12, 2),
|
||||
mime_type="application/pdf",
|
||||
pk=2,
|
||||
checksum="2",
|
||||
@@ -1236,7 +1234,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
|
||||
|
||||
doc_a = Document.objects.create(
|
||||
title="Does Matter",
|
||||
created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)),
|
||||
created=datetime.date(2020, 6, 25),
|
||||
added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)),
|
||||
mime_type="application/pdf",
|
||||
pk=2,
|
||||
@@ -1302,7 +1300,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
|
||||
"""
|
||||
doc_a = Document.objects.create(
|
||||
title="Does Matter",
|
||||
created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)),
|
||||
created=datetime.date(2020, 6, 25),
|
||||
added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)),
|
||||
mime_type="application/pdf",
|
||||
pk=2,
|
||||
@@ -1337,7 +1335,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
|
||||
"""
|
||||
doc_a = Document.objects.create(
|
||||
title="Does Matter",
|
||||
created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)),
|
||||
created=datetime.date(2020, 6, 25),
|
||||
added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)),
|
||||
mime_type="application/pdf",
|
||||
pk=2,
|
||||
@@ -1369,7 +1367,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
|
||||
"""
|
||||
doc_a = Document.objects.create(
|
||||
title="Some Title",
|
||||
created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)),
|
||||
created=datetime.date(2020, 6, 25),
|
||||
added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)),
|
||||
mime_type="application/pdf",
|
||||
pk=2,
|
||||
@@ -1474,7 +1472,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
|
||||
"""
|
||||
doc_a = Document.objects.create(
|
||||
title="Some Title",
|
||||
created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)),
|
||||
created=datetime.date(2020, 6, 25),
|
||||
added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)),
|
||||
mime_type="application/pdf",
|
||||
pk=2,
|
||||
@@ -1529,7 +1527,7 @@ class TestFilenameGeneration(DirectoriesMixin, TestCase):
|
||||
"""
|
||||
doc = Document.objects.create(
|
||||
title="Some Title! With @ Special # Characters",
|
||||
created=timezone.make_aware(datetime.datetime(2020, 6, 25, 7, 36, 51, 153)),
|
||||
created=datetime.date(2020, 6, 25),
|
||||
added=timezone.make_aware(datetime.datetime(2024, 10, 1, 7, 36, 51, 153)),
|
||||
mime_type="application/pdf",
|
||||
pk=2,
|
||||
|
36
src/documents/tests/test_migration_created.py
Normal file
36
src/documents/tests/test_migration_created.py
Normal file
@@ -0,0 +1,36 @@
|
||||
from datetime import datetime
|
||||
from datetime import timedelta
|
||||
|
||||
from documents.tests.utils import DirectoriesMixin
|
||||
from documents.tests.utils import TestMigrations
|
||||
|
||||
|
||||
class TestMigrateDocumentCreated(DirectoriesMixin, TestMigrations):
|
||||
migrate_from = "1066_alter_workflowtrigger_schedule_offset_days"
|
||||
migrate_to = "1067_alter_document_created"
|
||||
|
||||
def setUpBeforeMigration(self, apps):
|
||||
# create 600 documents
|
||||
for i in range(600):
|
||||
Document = apps.get_model("documents", "Document")
|
||||
Document.objects.create(
|
||||
title=f"test{i}",
|
||||
mime_type="application/pdf",
|
||||
filename=f"file{i}.pdf",
|
||||
created=datetime(
|
||||
2023,
|
||||
10,
|
||||
1,
|
||||
12,
|
||||
0,
|
||||
0,
|
||||
)
|
||||
+ timedelta(days=i),
|
||||
checksum=i,
|
||||
)
|
||||
|
||||
def testDocumentCreatedMigrated(self):
|
||||
Document = self.apps.get_model("documents", "Document")
|
||||
|
||||
doc = Document.objects.get(id=1)
|
||||
self.assertEqual(doc.created, datetime(2023, 10, 1, 12, 0, 0).date())
|
Reference in New Issue
Block a user