Skip to content

Commit 57efc8c

Browse files
Add media tests for a CMYK JPEG image (#17786)
1 parent a5e16a4 commit 57efc8c

File tree

4 files changed

+86
-2
lines changed

4 files changed

+86
-2
lines changed

changelog.d/17786.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add a test for downloading and thumbnailing a CMYK JPEG.

tests/media/test_media_storage.py

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060

6161
from tests import unittest
6262
from tests.server import FakeChannel
63-
from tests.test_utils import SMALL_PNG
63+
from tests.test_utils import SMALL_CMYK_JPEG, SMALL_PNG
6464
from tests.unittest import override_config
6565
from tests.utils import default_config
6666

@@ -187,6 +187,68 @@ class TestImage:
187187
# different versions of Pillow.
188188
)
189189

190+
small_cmyk_jpeg = TestImage(
191+
SMALL_CMYK_JPEG,
192+
b"image/jpeg",
193+
b".jpeg",
194+
# These values were sourced simply by seeing at what the tests produced at
195+
# the time of writing. If this changes, the tests will fail.
196+
unhexlify(
197+
b"ffd8ffe000104a46494600010100000100010000ffdb00430006"
198+
b"040506050406060506070706080a100a0a09090a140e0f0c1017"
199+
b"141818171416161a1d251f1a1b231c1616202c20232627292a29"
200+
b"191f2d302d283025282928ffdb0043010707070a080a130a0a13"
201+
b"281a161a28282828282828282828282828282828282828282828"
202+
b"2828282828282828282828282828282828282828282828282828"
203+
b"2828ffc00011080020002003012200021101031101ffc4001f00"
204+
b"0001050101010101010000000000000000010203040506070809"
205+
b"0a0bffc400b5100002010303020403050504040000017d010203"
206+
b"00041105122131410613516107227114328191a1082342b1c115"
207+
b"52d1f02433627282090a161718191a25262728292a3435363738"
208+
b"393a434445464748494a535455565758595a636465666768696a"
209+
b"737475767778797a838485868788898a92939495969798999aa2"
210+
b"a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9ca"
211+
b"d2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7"
212+
b"f8f9faffc4001f01000301010101010101010100000000000001"
213+
b"02030405060708090a0bffc400b5110002010204040304070504"
214+
b"0400010277000102031104052131061241510761711322328108"
215+
b"144291a1b1c109233352f0156272d10a162434e125f11718191a"
216+
b"262728292a35363738393a434445464748494a53545556575859"
217+
b"5a636465666768696a737475767778797a82838485868788898a"
218+
b"92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9"
219+
b"bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8"
220+
b"e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00fa"
221+
b"a68a28a0028a28a0028a28a0028a28a00fffd9"
222+
),
223+
unhexlify(
224+
b"ffd8ffe000104a46494600010100000100010000ffdb00430006"
225+
b"040506050406060506070706080a100a0a09090a140e0f0c1017"
226+
b"141818171416161a1d251f1a1b231c1616202c20232627292a29"
227+
b"191f2d302d283025282928ffdb0043010707070a080a130a0a13"
228+
b"281a161a28282828282828282828282828282828282828282828"
229+
b"2828282828282828282828282828282828282828282828282828"
230+
b"2828ffc00011080001000103012200021101031101ffc4001f00"
231+
b"0001050101010101010000000000000000010203040506070809"
232+
b"0a0bffc400b5100002010303020403050504040000017d010203"
233+
b"00041105122131410613516107227114328191a1082342b1c115"
234+
b"52d1f02433627282090a161718191a25262728292a3435363738"
235+
b"393a434445464748494a535455565758595a636465666768696a"
236+
b"737475767778797a838485868788898a92939495969798999aa2"
237+
b"a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9ca"
238+
b"d2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7"
239+
b"f8f9faffc4001f01000301010101010101010100000000000001"
240+
b"02030405060708090a0bffc400b5110002010204040304070504"
241+
b"0400010277000102031104052131061241510761711322328108"
242+
b"144291a1b1c109233352f0156272d10a162434e125f11718191a"
243+
b"262728292a35363738393a434445464748494a53545556575859"
244+
b"5a636465666768696a737475767778797a82838485868788898a"
245+
b"92939495969798999aa2a3a4a5a6a7a8a9aab2b3b4b5b6b7b8b9"
246+
b"bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8"
247+
b"e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00fa"
248+
b"a68a28a00fffd9"
249+
),
250+
)
251+
190252
small_lossless_webp = TestImage(
191253
unhexlify(
192254
b"524946461a000000574542505650384c0d0000002f0000001007" b"1011118888fe0700"

tests/rest/client/test_media.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
SVG,
6767
TestImage,
6868
empty_file,
69+
small_cmyk_jpeg,
6970
small_lossless_webp,
7071
small_png,
7172
small_png_with_transparency,
@@ -1916,6 +1917,7 @@ def test_file_download(self) -> None:
19161917
test_images = [
19171918
small_png,
19181919
small_png_with_transparency,
1920+
small_cmyk_jpeg,
19191921
small_lossless_webp,
19201922
empty_file,
19211923
SVG,
@@ -2400,7 +2402,7 @@ def _test_thumbnail(
24002402

24012403
if expected_body is not None:
24022404
self.assertEqual(
2403-
channel.result["body"], expected_body, channel.result["body"]
2405+
channel.result["body"], expected_body, channel.result["body"].hex()
24042406
)
24052407
else:
24062408
# ensure that the result is at least some valid image

tests/test_utils/__init__.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
Utilities for running the unit tests
2424
"""
2525

26+
import base64
2627
import json
2728
import sys
2829
import warnings
@@ -138,3 +139,21 @@ def json(cls, *, code: int = 200, payload: JsonSerializable) -> "FakeResponse":
138139
b"0000001f15c4890000000a49444154789c63000100000500010d"
139140
b"0a2db40000000049454e44ae426082"
140141
)
142+
143+
# A small CMYK-encoded JPEG image used in some tests.
144+
#
145+
# Generated with:
146+
# img = PIL.Image.new('CMYK', (1, 1), (0, 0, 0, 0))
147+
# img.save('minimal_cmyk.jpg', 'JPEG')
148+
#
149+
# Resolution: 1x1, MIME type: image/jpeg, Extension: jpeg, Size: 4 KiB
150+
SMALL_CMYK_JPEG = base64.b64decode("""
151+
/9j/7gAOQWRvYmUAZAAAAAAA/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCww
152+
ZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/8
153+
AAFAgAAQABBEMRAE0RAFkRAEsRAP/EAB8AAAEFAQEBAQEBAAAAAAAAAAABA
154+
gMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNR
155+
YQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkN
156+
ERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlp
157+
eYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5
158+
ebn6Onq8fLz9PX29/j5+v/aAA4EQwBNAFkASwAAPwD3+vf69/r3+v/Z
159+
""")

0 commit comments

Comments
 (0)