Change: treat created as date not datetime (#9793)

This commit is contained in:
shamoon
2025-05-16 07:23:04 -07:00
committed by GitHub
parent ce5d4e9c92
commit 1a6f32534c
18 changed files with 228 additions and 128 deletions

View File

@@ -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(

View File

@@ -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",
)

View File

@@ -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",
)

View File

@@ -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",
)

View File

@@ -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")

View File

@@ -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()

View File

@@ -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),
)

View File

@@ -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")

View File

@@ -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,

View 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())