Skip to content

Commit f7a9713

Browse files
committed
fix tests
1 parent 25db450 commit f7a9713

File tree

1 file changed

+36
-48
lines changed

1 file changed

+36
-48
lines changed

tests/sentry/preprod/api/endpoints/test_preprod_artifact_image.py

Lines changed: 36 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
from io import BytesIO
1+
from unittest.mock import MagicMock, patch
22

33
from django.urls import reverse
44

5-
from sentry.objectstore import get_preprod_session
65
from sentry.testutils.cases import APITestCase
7-
from sentry.testutils.skips import requires_objectstore
86

97

108
class ProjectPreprodArtifactImageTest(APITestCase):
@@ -26,12 +24,22 @@ def _get_url(self, image_id=None):
2624
args=[self.org.slug, self.project.slug, image_id],
2725
)
2826

29-
@requires_objectstore
30-
def test_successful_image_retrieval_png(self):
31-
png_data = b"\x89PNG\r\n\x1a\n" + b"fake png content" * 100
27+
def _create_mock_session(self, image_data, content_type):
28+
"""Create a mock object store session that returns the given data and content type."""
29+
mock_result = MagicMock()
30+
mock_result.payload.read.return_value = image_data
31+
mock_result.metadata.content_type = content_type
32+
33+
mock_session = MagicMock()
34+
mock_session.get.return_value = mock_result
35+
36+
return mock_session
3237

33-
client = get_preprod_session(self.org.id, self.project.id)
34-
client.put(BytesIO(png_data), key=f"{self.org.id}/{self.project.id}/test-image-123")
38+
@patch("sentry.preprod.api.endpoints.project_preprod_artifact_image.get_preprod_session")
39+
def test_successful_image_retrieval_png(self, mock_get_session):
40+
png_data = b"\x89PNG\r\n\x1a\n" + b"fake png content" * 100
41+
mock_session = self._create_mock_session(png_data, "image/png")
42+
mock_get_session.return_value = mock_session
3543

3644
url = self._get_url()
3745
response = self.client.get(
@@ -41,13 +49,14 @@ def test_successful_image_retrieval_png(self):
4149
assert response.status_code == 200
4250
assert response.content == png_data
4351
assert response["Content-Type"] == "image/png"
52+
mock_get_session.assert_called_once_with(self.org.id, self.project.id)
53+
mock_session.get.assert_called_once_with(f"{self.org.id}/{self.project.id}/{self.image_id}")
4454

45-
@requires_objectstore
46-
def test_successful_image_retrieval_jpeg(self):
55+
@patch("sentry.preprod.api.endpoints.project_preprod_artifact_image.get_preprod_session")
56+
def test_successful_image_retrieval_jpeg(self, mock_get_session):
4757
jpeg_data = b"\xff\xd8\xff" + b"fake jpeg content" * 100
48-
49-
client = get_preprod_session(self.org.id, self.project.id)
50-
client.put(BytesIO(jpeg_data), key=f"{self.org.id}/{self.project.id}/test-image-123")
58+
mock_session = self._create_mock_session(jpeg_data, "image/jpeg")
59+
mock_get_session.return_value = mock_session
5160

5261
url = self._get_url()
5362
response = self.client.get(
@@ -57,13 +66,14 @@ def test_successful_image_retrieval_jpeg(self):
5766
assert response.status_code == 200
5867
assert response.content == jpeg_data
5968
assert response["Content-Type"] == "image/jpeg"
69+
mock_get_session.assert_called_once_with(self.org.id, self.project.id)
70+
mock_session.get.assert_called_once_with(f"{self.org.id}/{self.project.id}/{self.image_id}")
6071

61-
@requires_objectstore
62-
def test_successful_image_retrieval_webp(self):
72+
@patch("sentry.preprod.api.endpoints.project_preprod_artifact_image.get_preprod_session")
73+
def test_successful_image_retrieval_webp(self, mock_get_session):
6374
webp_data = b"RIFF" + b"1234" + b"WEBP" + b"fake webp content" * 100
64-
65-
client = get_preprod_session(self.org.id, self.project.id)
66-
client.put(BytesIO(webp_data), key=f"{self.org.id}/{self.project.id}/test-image-123")
75+
mock_session = self._create_mock_session(webp_data, "image/webp")
76+
mock_get_session.return_value = mock_session
6777

6878
url = self._get_url()
6979
response = self.client.get(
@@ -73,38 +83,14 @@ def test_successful_image_retrieval_webp(self):
7383
assert response.status_code == 200
7484
assert response.content == webp_data
7585
assert response["Content-Type"] == "image/webp"
86+
mock_get_session.assert_called_once_with(self.org.id, self.project.id)
87+
mock_session.get.assert_called_once_with(f"{self.org.id}/{self.project.id}/{self.image_id}")
7688

77-
def test_successful_image_retrieval_heic(self):
78-
heic_data = b"RIFF" + b"ftypheic" + b"fake heic content" * 100
79-
80-
client = get_preprod_session(self.org.id, self.project.id)
81-
client.put(BytesIO(heic_data), key=f"{self.org.id}/{self.project.id}/test-image-123")
82-
83-
url = self._get_url()
84-
response = self.client.get(
85-
url, format="json", HTTP_AUTHORIZATION=f"Bearer {self.api_token.token}"
86-
)
87-
88-
assert response.status_code == 200
89-
assert response.content == heic_data
90-
assert response["Content-Type"] == "image/heic"
91-
92-
@requires_objectstore
93-
def test_image_not_found(self):
94-
url = self._get_url()
95-
response = self.client.get(
96-
url, format="json", HTTP_AUTHORIZATION=f"Bearer {self.api_token.token}"
97-
)
98-
99-
assert response.status_code == 404
100-
assert response.content == b'{"error":"Not found"}'
101-
102-
@requires_objectstore
103-
def test_unknown_image_format(self):
89+
@patch("sentry.preprod.api.endpoints.project_preprod_artifact_image.get_preprod_session")
90+
def test_unknown_image_format(self, mock_get_session):
10491
unknown_data = b"unknown binary data" * 50
105-
106-
client = get_preprod_session(self.org.id, self.project.id)
107-
client.put(BytesIO(unknown_data), key=f"{self.org.id}/{self.project.id}/test-image-123")
92+
mock_session = self._create_mock_session(unknown_data, "application/octet-stream")
93+
mock_get_session.return_value = mock_session
10894

10995
url = self._get_url()
11096
response = self.client.get(
@@ -114,6 +100,8 @@ def test_unknown_image_format(self):
114100
assert response.status_code == 200
115101
assert response.content == unknown_data
116102
assert response["Content-Type"] == "application/octet-stream"
103+
mock_get_session.assert_called_once_with(self.org.id, self.project.id)
104+
mock_session.get.assert_called_once_with(f"{self.org.id}/{self.project.id}/{self.image_id}")
117105

118106
def test_endpoint_requires_project_access(self):
119107
other_user = self.create_user()

0 commit comments

Comments
 (0)