Browse Source

ref: pass aware datetimes in tests (#65897)

this is currently a warning but will likely be an error in the future

```
.venv/lib/python3.11/site-packages/django/db/models/manager.py:87: in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
.venv/lib/python3.11/site-packages/django/db/models/query.py:1476: in filter
    return self._filter_or_exclude(False, args, kwargs)
.venv/lib/python3.11/site-packages/django/db/models/query.py:1494: in _filter_or_exclude
    clone._filter_or_exclude_inplace(negate, args, kwargs)
.venv/lib/python3.11/site-packages/django/db/models/query.py:1501: in _filter_or_exclude_inplace
    self._query.add_q(Q(*args, **kwargs))
.venv/lib/python3.11/site-packages/django/db/models/sql/query.py:1613: in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
.venv/lib/python3.11/site-packages/django/db/models/sql/query.py:1645: in _add_q
    child_clause, needed_inner = self.build_filter(
.venv/lib/python3.11/site-packages/django/db/models/sql/query.py:1559: in build_filter
    condition = self.build_lookup(lookups, col, value)
.venv/lib/python3.11/site-packages/django/db/models/sql/query.py:1389: in build_lookup
    lookup = lookup_class(lhs, rhs)
.venv/lib/python3.11/site-packages/django/db/models/lookups.py:30: in __init__
    self.rhs = self.get_prep_lookup()
.venv/lib/python3.11/site-packages/django/db/models/lookups.py:88: in get_prep_lookup
    return self.lhs.output_field.get_prep_value(self.rhs)
.venv/lib/python3.11/site-packages/django/db/models/fields/__init__.py:1659: in get_prep_value
    warnings.warn(
E   RuntimeWarning: DateTimeField UserIP.last_seen received a naive datetime (2023-07-01 00:00:00) while time zone support is active.
```

<!-- Describe your PR here. -->
anthony sottile 1 year ago
parent
commit
ee45b9d680

+ 14 - 14
tests/sentry/api/endpoints/release_thresholds/test_release_threshold_status.py

@@ -1,4 +1,4 @@
-from datetime import datetime, timedelta
+from datetime import UTC, datetime, timedelta
 from unittest.mock import patch
 
 from sentry.models.deploy import Deploy
@@ -156,9 +156,9 @@ class ReleaseThresholdStatusTest(APITestCase):
             {p2.slug}-{release1.version}: [threshold]
         }
         """
-        now = str(datetime.now())
-        yesterday = str(datetime.now() - timedelta(hours=24))
-        last_week = str(datetime.now() - timedelta(days=7))
+        now = datetime.now(UTC)
+        yesterday = datetime.now(UTC) - timedelta(hours=24)
+        last_week = datetime.now(UTC) - timedelta(days=7)
         release_old = Release.objects.create(
             version="old_version", organization=self.organization, date_added=last_week
         )
@@ -218,8 +218,8 @@ class ReleaseThresholdStatusTest(APITestCase):
             {p2.slug}-{release1.version}: [threshold]
         }
         """
-        now = str(datetime.now())
-        yesterday = str(datetime.now() - timedelta(hours=24))
+        now = datetime.now(UTC)
+        yesterday = datetime.now(UTC) - timedelta(hours=24)
         response = self.get_success_response(
             self.organization.slug, start=yesterday, end=now, environment=["canary"]
         )
@@ -268,8 +268,8 @@ class ReleaseThresholdStatusTest(APITestCase):
             {p2.slug}-{release1.version}: [threshold]
         }
         """
-        now = str(datetime.now())
-        yesterday = str(datetime.now() - timedelta(hours=24))
+        now = datetime.now(UTC)
+        yesterday = datetime.now(UTC) - timedelta(hours=24)
 
         # Creates a deploy for a particular Release in a particular Environment
         r1_canary_deploy = Deploy.objects.create(
@@ -330,8 +330,8 @@ class ReleaseThresholdStatusTest(APITestCase):
             {p2.slug}-{release1.version}: [threshold]
         }
         """
-        now = str(datetime.now())
-        yesterday = str(datetime.now() - timedelta(hours=24))
+        now = datetime.now(UTC)
+        yesterday = datetime.now(UTC) - timedelta(hours=24)
         response = self.get_success_response(
             self.organization.slug, start=yesterday, end=now, release=[self.release1.version]
         )
@@ -381,8 +381,8 @@ class ReleaseThresholdStatusTest(APITestCase):
             {p2.slug}-{release1.version}: [threshold]
         }
         """
-        now = str(datetime.now())
-        yesterday = str(datetime.now() - timedelta(hours=24))
+        now = datetime.now(UTC)
+        yesterday = datetime.now(UTC) - timedelta(hours=24)
         response = self.get_success_response(
             self.organization.slug, start=yesterday, end=now, projectSlug=[self.project2.slug]
         )
@@ -462,8 +462,8 @@ class ReleaseThresholdStatusTest(APITestCase):
             project=self.project4,
         )
 
-        now = str(datetime.now())
-        yesterday = str(datetime.now() - timedelta(hours=24))
+        now = datetime.now(UTC)
+        yesterday = datetime.now(UTC) - timedelta(hours=24)
 
         mock_is_error_count_healthy.return_value = True, 100
         mock_is_new_issue_count_healthy.return_value = True, 100

+ 13 - 13
tests/sentry/api/endpoints/test_artifact_bundles.py

@@ -1,4 +1,4 @@
-from datetime import datetime, timedelta
+from datetime import UTC, datetime, timedelta
 
 from django.urls import reverse
 
@@ -24,8 +24,8 @@ class ArtifactBundlesEndpointTest(APITestCase):
         artifact_bundle_1 = self.create_artifact_bundle(
             self.organization,
             artifact_count=2,
-            date_uploaded=datetime.now(),
-            date_last_modified=datetime.now(),
+            date_uploaded=datetime.now(UTC),
+            date_last_modified=datetime.now(UTC),
         )
         ProjectArtifactBundle.objects.create(
             organization_id=self.organization.id,
@@ -36,8 +36,8 @@ class ArtifactBundlesEndpointTest(APITestCase):
         artifact_bundle_2 = self.create_artifact_bundle(
             self.organization,
             artifact_count=2,
-            date_uploaded=datetime.now() + timedelta(hours=1),
-            date_last_modified=datetime.now() + timedelta(hours=1),
+            date_uploaded=datetime.now(UTC) + timedelta(hours=1),
+            date_last_modified=datetime.now(UTC) + timedelta(hours=1),
         )
         ProjectArtifactBundle.objects.create(
             organization_id=self.organization.id,
@@ -54,7 +54,7 @@ class ArtifactBundlesEndpointTest(APITestCase):
         artifact_bundle_3 = self.create_artifact_bundle(
             self.organization,
             artifact_count=2,
-            date_uploaded=datetime.now() + timedelta(hours=2),
+            date_uploaded=datetime.now(UTC) + timedelta(hours=2),
             # We also test with the date set to None.
             date_last_modified=None,
         )
@@ -206,8 +206,8 @@ class ArtifactBundlesEndpointTest(APITestCase):
         artifact_bundle = self.create_artifact_bundle(
             self.organization,
             artifact_count=2,
-            date_uploaded=datetime.now(),
-            date_last_modified=datetime.now(),
+            date_uploaded=datetime.now(UTC),
+            date_last_modified=datetime.now(UTC),
         )
         ProjectArtifactBundle.objects.create(
             organization_id=self.organization.id,
@@ -241,8 +241,8 @@ class ArtifactBundlesEndpointTest(APITestCase):
         artifact_bundle = self.create_artifact_bundle(
             self.organization,
             artifact_count=2,
-            date_uploaded=datetime.now(),
-            date_last_modified=datetime.now(),
+            date_uploaded=datetime.now(UTC),
+            date_last_modified=datetime.now(UTC),
         )
         ProjectArtifactBundle.objects.create(
             organization_id=self.organization.id,
@@ -364,7 +364,7 @@ class ArtifactBundlesEndpointTest(APITestCase):
             artifact_bundle = self.create_artifact_bundle(
                 self.organization,
                 artifact_count=2,
-                date_uploaded=datetime.now() + timedelta(hours=index),
+                date_uploaded=datetime.now(UTC) + timedelta(hours=index),
             )
             ProjectArtifactBundle.objects.create(
                 organization_id=self.organization.id,
@@ -393,8 +393,8 @@ class ArtifactBundlesEndpointTest(APITestCase):
             artifact_bundle = self.create_artifact_bundle(
                 self.organization,
                 artifact_count=2,
-                date_uploaded=datetime.now() + timedelta(hours=index),
-                date_last_modified=datetime.now() + timedelta(hours=index),
+                date_uploaded=datetime.now(UTC) + timedelta(hours=index),
+                date_last_modified=datetime.now(UTC) + timedelta(hours=index),
             )
             bundle_ids.append(str(artifact_bundle.bundle_id))
             ProjectArtifactBundle.objects.create(

+ 1 - 1
tests/sentry/api/endpoints/test_group_notes.py

@@ -39,7 +39,7 @@ class GroupNoteTest(APITestCase):
 
     def test_note_merge(self):
         """Test that when 2 (or more) issues with comments are merged, the chronological order of the comments are preserved."""
-        now = datetime.datetime.now()
+        now = datetime.datetime.now(datetime.UTC)
 
         project1 = self.create_project()
         event1 = self.store_event(data={}, project_id=project1.id)

+ 2 - 2
tests/sentry/api/endpoints/test_organization_member_details.py

@@ -210,7 +210,7 @@ class UpdateOrganizationMemberTest(OrganizationMemberTestBase, HybridCloudTestMi
             organization=self.organization,
             email="foo@example.com",
             role="member",
-            token_expires_at="2018-10-20 00:00:00",
+            token_expires_at="2018-10-20 00:00:00+00:00",
         )
 
         self.get_error_response(self.organization.slug, member.id, reinvite=1, status_code=400)
@@ -225,7 +225,7 @@ class UpdateOrganizationMemberTest(OrganizationMemberTestBase, HybridCloudTestMi
             organization=self.organization,
             email="foo@example.com",
             role="member",
-            token_expires_at="2018-10-20 00:00:00",
+            token_expires_at="2018-10-20 00:00:00+00:00",
         )
 
         self.get_success_response(self.organization.slug, member.id, reinvite=1, regenerate=1)

+ 5 - 5
tests/sentry/api/endpoints/test_organization_projects_sent_first_event.py

@@ -1,4 +1,4 @@
-from datetime import datetime
+from datetime import UTC, datetime
 
 from django.urls import reverse
 
@@ -18,7 +18,7 @@ class OrganizationProjectsSentFirstEventEndpointTest(APITestCase):
         )
 
     def test_simple_sent_first_event(self):
-        self.create_project(teams=[self.team], first_event=datetime.now())
+        self.create_project(teams=[self.team], first_event=datetime.now(UTC))
         self.create_member(organization=self.org, user=self.foo, teams=[self.team])
 
         self.login_as(user=self.foo)
@@ -40,7 +40,7 @@ class OrganizationProjectsSentFirstEventEndpointTest(APITestCase):
         assert not response.data["sentFirstEvent"]
 
     def test_first_event_in_org(self):
-        self.create_project(teams=[self.team], first_event=datetime.now())
+        self.create_project(teams=[self.team], first_event=datetime.now(UTC))
         self.create_member(organization=self.org, user=self.foo)
 
         self.login_as(user=self.foo)
@@ -51,7 +51,7 @@ class OrganizationProjectsSentFirstEventEndpointTest(APITestCase):
         assert response.data["sentFirstEvent"]
 
     def test_no_first_event_in_member_projects(self):
-        self.create_project(teams=[self.team], first_event=datetime.now())
+        self.create_project(teams=[self.team], first_event=datetime.now(UTC))
         self.create_member(organization=self.org, user=self.foo)
 
         self.login_as(user=self.foo)
@@ -62,7 +62,7 @@ class OrganizationProjectsSentFirstEventEndpointTest(APITestCase):
         assert not response.data["sentFirstEvent"]
 
     def test_first_event_from_project_ids(self):
-        project = self.create_project(teams=[self.team], first_event=datetime.now())
+        project = self.create_project(teams=[self.team], first_event=datetime.now(UTC))
         self.create_member(organization=self.org, user=self.foo)
 
         self.login_as(user=self.foo)

+ 3 - 3
tests/sentry/api/endpoints/test_organization_recent_searches.py

@@ -1,6 +1,6 @@
 from __future__ import annotations
 
-from datetime import datetime, timedelta
+from datetime import UTC, datetime, timedelta
 from functools import cached_property
 from typing import Any
 
@@ -161,7 +161,7 @@ class RecentSearchesCreateTest(APITestCase):
         self.login_as(self.user)
         search_type = 1
         query = "something"
-        the_date = datetime(2019, 1, 1, 1, 1, 1)
+        the_date = datetime(2019, 1, 1, 1, 1, 1, tzinfo=UTC)
         with freeze_time(the_date):
             response = self.get_response(self.organization.slug, type=search_type, query=query)
             assert response.status_code == 201
@@ -172,7 +172,7 @@ class RecentSearchesCreateTest(APITestCase):
                 query=query,
                 last_seen=the_date,
             ).exists()
-        the_date = datetime(2019, 1, 1, 2, 2, 2)
+        the_date = datetime(2019, 1, 1, 2, 2, 2, tzinfo=UTC)
         with freeze_time(the_date):
             response = self.get_response(self.organization.slug, type=search_type, query=query)
             assert response.status_code == 204, response.content

+ 10 - 8
tests/sentry/api/endpoints/test_organization_release_details.py

@@ -1,5 +1,5 @@
 import unittest
-from datetime import datetime, timedelta, timezone
+from datetime import UTC, datetime, timedelta
 from unittest.mock import patch
 
 from django.urls import reverse
@@ -230,7 +230,7 @@ class ReleaseDetailsTest(APITestCase):
         Test that ensures that in the case we are trying to get prev and next release to a current
         release with exact same date then we fallback to id comparison
         """
-        date_now = datetime.utcnow()
+        date_now = datetime.now(UTC)
         release_1 = Release.objects.create(
             date_added=date_now, organization_id=self.organization.id, version="foobar@1.0.0"
         )
@@ -416,7 +416,7 @@ class ReleaseDetailsTest(APITestCase):
         )
         release_2.add_project(self.project1)
 
-        date_added_from_8d = datetime.utcnow() - timedelta(days=8)
+        date_added_from_8d = datetime.now(UTC) - timedelta(days=8)
         release_3 = Release.objects.create(
             organization_id=self.organization.id,
             version="foobar@3.0.0",
@@ -472,7 +472,7 @@ class ReleaseDetailsTest(APITestCase):
         retrieved correctly in the case when all releases have the same exact datetime and we
         need to fallback to comparison with id
         """
-        date_now = datetime.utcnow()
+        date_now = datetime.now(UTC)
         release_2 = self.create_release(
             project=self.project1, version="foobar@2.0.0", date_added=date_now
         )
@@ -606,7 +606,9 @@ class ReleaseDetailsTest(APITestCase):
         self.create_member(teams=[team1], user=user, organization=org)
         self.login_as(user=user)
         release1 = Release.objects.create(
-            organization_id=org.id, version="1", date_added=datetime(2013, 8, 13, 3, 8, 24, 880386)
+            organization_id=org.id,
+            version="1",
+            date_added=datetime(2013, 8, 13, 3, 8, 24, 880386, tzinfo=UTC),
         )
         release1.add_project(project1)
         url = reverse(
@@ -984,7 +986,7 @@ class UpdateReleaseDetailsTest(APITestCase):
             "sentry-api-0-organization-release-details",
             kwargs={"organization_slug": org.slug, "version": release.version},
         )
-        response = self.client.put(url, data={"dateReleased": datetime.utcnow().isoformat() + "Z"})
+        response = self.client.put(url, data={"dateReleased": datetime.now(UTC).isoformat()})
 
         assert response.status_code == 200, (response.status_code, response.content)
 
@@ -1018,7 +1020,7 @@ class UpdateReleaseDetailsTest(APITestCase):
             "sentry-api-0-organization-release-details",
             kwargs={"organization_slug": org.slug, "version": release.version},
         )
-        response = self.client.put(url, data={"dateReleased": datetime.utcnow().isoformat() + "Z"})
+        response = self.client.put(url, data={"dateReleased": datetime.now(UTC).isoformat()})
 
         assert response.status_code == 200, (response.status_code, response.content)
 
@@ -1267,7 +1269,7 @@ class ReleaseSerializerTest(unittest.TestCase):
         result = serializer.validated_data
         assert result["ref"] == self.ref
         assert result["url"] == self.url
-        assert result["dateReleased"] == datetime(1000, 10, 10, 6, 6, tzinfo=timezone.utc)
+        assert result["dateReleased"] == datetime(1000, 10, 10, 6, 6, tzinfo=UTC)
         assert result["commits"] == self.commits
         assert result["headCommits"] == self.headCommits
         assert result["refs"] == self.refs

+ 6 - 6
tests/sentry/api/endpoints/test_organization_user_reports.py

@@ -1,4 +1,4 @@
-from datetime import datetime, timedelta
+from datetime import UTC, datetime, timedelta
 
 from sentry.feedback.usecases.create_feedback import FeedbackCreationSource
 from sentry.ingest.userreport import save_userreport
@@ -64,7 +64,7 @@ class OrganizationUserReportListTest(APITestCase, SnubaTestCase):
             comments="Hello world",
             group_id=self.group_1.id,
             environment_id=self.env_2.id,
-            date_added=datetime.now() - timedelta(days=7),
+            date_added=datetime.now(UTC) - timedelta(days=7),
         )
 
     def run_test(self, expected, **params):
@@ -88,13 +88,13 @@ class OrganizationUserReportListTest(APITestCase, SnubaTestCase):
     def test_date_filter(self):
         self.run_test(
             [self.report_1],
-            start=(datetime.now() - timedelta(days=1)).isoformat() + "Z",
-            end=datetime.now().isoformat() + "Z",
+            start=(datetime.now(UTC) - timedelta(days=1)).isoformat(),
+            end=datetime.now(UTC).isoformat(),
         )
         self.run_test(
             [self.report_1, self.report_2],
-            start=(datetime.now() - timedelta(days=8)).isoformat() + "Z",
-            end=datetime.now().isoformat() + "Z",
+            start=(datetime.now(UTC) - timedelta(days=8)).isoformat(),
+            end=datetime.now(UTC).isoformat(),
         )
         self.run_test([self.report_1, self.report_2], statsPeriod="14d")
 

+ 2 - 2
tests/sentry/api/endpoints/test_project_release_stats.py

@@ -1,4 +1,4 @@
-from datetime import datetime
+from datetime import UTC, datetime
 
 from django.urls import reverse
 
@@ -20,7 +20,7 @@ class ProjectReleaseStatsTest(APITestCase):
         release = Release.objects.create(
             organization_id=project.organization_id,
             version="1",
-            date_added=datetime(2013, 8, 13, 3, 8, 24, 880386),
+            date_added=datetime(2013, 8, 13, 3, 8, 24, 880386, tzinfo=UTC),
         )
         release.add_project(project)
 

+ 12 - 10
tests/sentry/api/endpoints/test_project_releases.py

@@ -1,4 +1,4 @@
-from datetime import datetime, timedelta, timezone
+from datetime import UTC, datetime, timedelta
 from functools import cached_property
 
 from django.urls import reverse
@@ -36,7 +36,7 @@ class ProjectReleaseListTest(APITestCase):
         release1 = Release.objects.create(
             organization_id=project1.organization_id,
             version="1",
-            date_added=datetime(2013, 8, 13, 3, 8, 24, 880386),
+            date_added=datetime(2013, 8, 13, 3, 8, 24, 880386, tzinfo=UTC),
         )
         release1.add_project(project1)
 
@@ -45,15 +45,15 @@ class ProjectReleaseListTest(APITestCase):
         release2 = Release.objects.create(
             organization_id=project1.organization_id,
             version="2",
-            date_added=datetime(2013, 8, 14, 3, 8, 24, 880386),
+            date_added=datetime(2013, 8, 14, 3, 8, 24, 880386, tzinfo=UTC),
         )
         release2.add_project(project1)
 
         release3 = Release.objects.create(
             organization_id=project1.organization_id,
             version="3",
-            date_added=datetime(2013, 8, 12, 3, 8, 24, 880386),
-            date_released=datetime(2013, 8, 15, 3, 8, 24, 880386),
+            date_added=datetime(2013, 8, 12, 3, 8, 24, 880386, tzinfo=UTC),
+            date_released=datetime(2013, 8, 15, 3, 8, 24, 880386, tzinfo=UTC),
             user_agent="my_agent",
         )
         release3.add_project(project1)
@@ -84,7 +84,7 @@ class ProjectReleaseListTest(APITestCase):
         release = Release.objects.create(
             organization_id=project.organization_id,
             version="foobar",
-            date_added=datetime(2013, 8, 13, 3, 8, 24, 880386),
+            date_added=datetime(2013, 8, 13, 3, 8, 24, 880386, tzinfo=UTC),
         )
         release.add_project(project)
 
@@ -106,7 +106,7 @@ class ProjectReleaseListTest(APITestCase):
         release = Release.objects.create(
             organization_id=project.organization_id,
             version="foo.bar-1.0.0",
-            date_added=datetime(2013, 8, 14, 3, 8, 24, 880386),
+            date_added=datetime(2013, 8, 14, 3, 8, 24, 880386, tzinfo=UTC),
         )
         release.add_project(project)
 
@@ -121,7 +121,7 @@ class ProjectReleaseListEnvironmentsTest(APITestCase):
     def setUp(self):
         self.login_as(user=self.user)
 
-        self.datetime = datetime(2013, 8, 13, 3, 8, 24, tzinfo=timezone.utc)
+        self.datetime = datetime(2013, 8, 13, 3, 8, 24, tzinfo=UTC)
         team = self.create_team()
         project1 = self.create_project(teams=[team], name="foo")
         project2 = self.create_project(teams=[team], name="bar")
@@ -495,7 +495,9 @@ class ProjectReleaseCreateTest(APITestCase):
         team1 = self.create_team(organization=org)
         project1 = self.create_project(teams=[team1], organization=org)
         release1 = Release.objects.create(
-            organization_id=org.id, version="1", date_added=datetime(2013, 8, 13, 3, 8, 24, 880386)
+            organization_id=org.id,
+            version="1",
+            date_added=datetime(2013, 8, 13, 3, 8, 24, 880386, tzinfo=UTC),
         )
         release1.add_project(project1)
 
@@ -734,7 +736,7 @@ class ReleaseSerializerTest(TestCase):
         assert result["owner"].username == self.user.username
         assert result["ref"] == self.ref
         assert result["url"] == self.url
-        assert result["dateReleased"] == datetime(1000, 10, 10, 6, 6, tzinfo=timezone.utc)
+        assert result["dateReleased"] == datetime(1000, 10, 10, 6, 6, tzinfo=UTC)
         assert result["commits"] == self.commits
 
     def test_fields_not_required(self):

Some files were not shown because too many files changed in this diff