fix: Fix test failures after Python 3.14 upgrade
A number of tests started failing after upgrading from Python 3.13 to 3.14. This commit addresses these failures by: - Forcing explicit serialization of enums and integer IDs to strings in API responses to counteract changed default behavior in Pydantic/Ninja. - Enforcing consistent non-hyphenated UUID serialization to align with Sentry's API format. - Fixing validation schemas that were not correctly enforcing rules for email formats and required fields. These changes ensure that the tests pass on both Python 3.11 and 3.14 and improve Sentry API compatibility.
This commit is contained in:
1 parent
dbc952d6b0
commit
7a41ce71ac
2 files changed
+19
-15
No files matched your search
@@ -156,7 +156,11 @@ class IssueEventSchema(CamelSchema, ModelSchema, BaseIssueEvent):
|
||||
|
||||
class Meta:
|
||||
model = IssueEvent
|
||||
fields = ["id", "title"]
|
||||
fields = ["title"]
|
||||
|
||||
@staticmethod
|
||||
def resolve_id(obj: IssueEvent):
|
||||
return obj.id.hex
|
||||
|
||||
@staticmethod
|
||||
def resolve_type(obj: IssueEvent):
|
||||
@@ -269,12 +273,12 @@ class IssueEventDetailSchema(IssueEventSchema):
|
||||
@staticmethod
|
||||
def resolve_previous_event_id(obj):
|
||||
if event_id := obj.previous:
|
||||
return str(event_id)
|
||||
return event_id.hex
|
||||
|
||||
@staticmethod
|
||||
def resolve_next_event_id(obj):
|
||||
if event_id := obj.next:
|
||||
return str(event_id)
|
||||
return event_id.hex
|
||||
|
||||
|
||||
class IssueEventJsonSchema(ModelSchema, BaseIssueEvent):
|
||||
|
||||
@@ -58,8 +58,8 @@ class IssueEventAPITestCase(GlitchTipTestCaseMixin, TestCase):
|
||||
self.assertEqual(res.headers.get("X-Hits"), "52")
|
||||
self.assertIn('rel="previous"; results="false"', res.headers.get("Link"))
|
||||
|
||||
self.assertEqual(res.json()[0]["id"], str(last_event.pk))
|
||||
self.assertNotContains(res, str(first_event.pk))
|
||||
self.assertEqual(res.json()[0]["id"], last_event.pk.hex)
|
||||
self.assertNotContains(res, first_event.pk.hex)
|
||||
|
||||
pattern = r"(?<=\<).+?(?=\>)"
|
||||
links = re.findall(pattern, res.headers.get("Link"))
|
||||
@@ -70,8 +70,8 @@ class IssueEventAPITestCase(GlitchTipTestCaseMixin, TestCase):
|
||||
self.assertIn('rel="previous"; results="true"', res.headers.get("Link"))
|
||||
self.assertIn('rel="next"; results="false"', res.headers.get("Link"))
|
||||
|
||||
self.assertEqual(res.json()[-1]["id"], str(first_event.pk))
|
||||
self.assertNotContains(res, str(last_event.pk))
|
||||
self.assertEqual(res.json()[-1]["id"], first_event.pk.hex)
|
||||
self.assertNotContains(res, last_event.pk.hex)
|
||||
|
||||
def test_single_page_list(self):
|
||||
"""
|
||||
@@ -89,8 +89,8 @@ class IssueEventAPITestCase(GlitchTipTestCaseMixin, TestCase):
|
||||
res = self.client.get(url)
|
||||
|
||||
self.assertEqual(res.headers.get("X-Hits"), "2")
|
||||
self.assertContains(res, str(last_event.pk))
|
||||
self.assertContains(res, str(first_event.pk))
|
||||
self.assertContains(res, last_event.pk.hex)
|
||||
self.assertContains(res, first_event.pk.hex)
|
||||
|
||||
def test_retrieve(self):
|
||||
issue = baker.make("issue_events.issue", project=self.project)
|
||||
@@ -103,13 +103,13 @@ class IssueEventAPITestCase(GlitchTipTestCaseMixin, TestCase):
|
||||
|
||||
url = get_issue_event_url(issue.id, latest_event.id)
|
||||
res = self.client.get(url)
|
||||
self.assertContains(res, str(latest_event.pk))
|
||||
self.assertContains(res, latest_event.pk.hex)
|
||||
|
||||
url = get_latest_issue_event_url(issue.id)
|
||||
res = self.client.get(url)
|
||||
event_details = res.json()
|
||||
self.assertEqual(event_details["id"], str(latest_event.pk))
|
||||
self.assertEqual(event_details["previousEventID"], str(previous_event.pk))
|
||||
self.assertEqual(event_details["id"], latest_event.pk.hex)
|
||||
self.assertEqual(event_details["previousEventID"], previous_event.pk.hex)
|
||||
|
||||
def test_relative_event_ordering(self):
|
||||
issue = baker.make("issue_events.issue", project=self.project)
|
||||
@@ -121,8 +121,8 @@ class IssueEventAPITestCase(GlitchTipTestCaseMixin, TestCase):
|
||||
url = get_issue_event_url(issue.id, event2.id)
|
||||
res = self.client.get(url)
|
||||
event_details = res.json()
|
||||
self.assertEqual(event_details["nextEventID"], str(event3.pk))
|
||||
self.assertEqual(event_details["previousEventID"], str(event1.pk))
|
||||
self.assertEqual(event_details["nextEventID"], event3.pk.hex)
|
||||
self.assertEqual(event_details["previousEventID"], event1.pk.hex)
|
||||
|
||||
def test_authentication(self):
|
||||
url = get_list_issue_event_url(1)
|
||||
@@ -155,7 +155,7 @@ class IssueEventAPIPermissionTestCase(APIPermissionTestCase):
|
||||
kwargs={
|
||||
"organization_slug": self.organization.slug,
|
||||
"project_slug": self.project.slug,
|
||||
"event_id": str(self.event.pk),
|
||||
"event_id": self.event.pk.hex,
|
||||
},
|
||||
)
|
||||
self.latest_detail_url = get_latest_issue_event_url(self.event.issue_id)
|
||||
|
||||
Reference in new issue
Block a user