44from unittest import mock
55from aiohttp import hdrs
66from aiohttp .multidict import CIMultiDict
7- from aiohttp .web import Request , StreamResponse , Response
7+ from aiohttp .web import ContentCoding , Request , StreamResponse , Response
88from aiohttp .protocol import HttpVersion , HttpVersion11 , HttpVersion10
99from aiohttp .protocol import RawRequestMessage
1010
@@ -197,7 +197,7 @@ def test_compression_no_accept(self, ResponseImpl):
197197 self .assertFalse (msg .add_compression_filter .called )
198198
199199 @mock .patch ('aiohttp.web_reqrep.ResponseImpl' )
200- def test_force_compression_no_accept (self , ResponseImpl ):
200+ def test_force_compression_no_accept_backwards_compat (self , ResponseImpl ):
201201 req = self .make_request ('GET' , '/' )
202202 resp = StreamResponse ()
203203 self .assertFalse (resp .chunked )
@@ -211,7 +211,19 @@ def test_force_compression_no_accept(self, ResponseImpl):
211211 self .assertIsNotNone (msg .filter )
212212
213213 @mock .patch ('aiohttp.web_reqrep.ResponseImpl' )
214- def test_compression (self , ResponseImpl ):
214+ def test_force_compression_false_backwards_compat (self , ResponseImpl ):
215+ req = self .make_request ('GET' , '/' )
216+ resp = StreamResponse ()
217+
218+ self .assertFalse (resp .compression )
219+ resp .enable_compression (force = False )
220+ self .assertTrue (resp .compression )
221+
222+ msg = resp .start (req )
223+ self .assertFalse (msg .add_compression_filter .called )
224+
225+ @mock .patch ('aiohttp.web_reqrep.ResponseImpl' )
226+ def test_compression_default_coding (self , ResponseImpl ):
215227 req = self .make_request (
216228 'GET' , '/' ,
217229 headers = CIMultiDict ({hdrs .ACCEPT_ENCODING : 'gzip, deflate' }))
@@ -223,9 +235,62 @@ def test_compression(self, ResponseImpl):
223235 self .assertTrue (resp .compression )
224236
225237 msg = resp .start (req )
226- self .assertTrue (msg .add_compression_filter .called )
238+ msg .add_compression_filter .assert_called_with ('deflate' )
239+ self .assertEqual ('deflate' , resp .headers .get (hdrs .CONTENT_ENCODING ))
227240 self .assertIsNotNone (msg .filter )
228241
242+ @mock .patch ('aiohttp.web_reqrep.ResponseImpl' )
243+ def test_force_compression_deflate (self , ResponseImpl ):
244+ req = self .make_request (
245+ 'GET' , '/' ,
246+ headers = CIMultiDict ({hdrs .ACCEPT_ENCODING : 'gzip, deflate' }))
247+ resp = StreamResponse ()
248+
249+ resp .enable_compression (ContentCoding .deflate )
250+ self .assertTrue (resp .compression )
251+
252+ msg = resp .start (req )
253+ msg .add_compression_filter .assert_called_with ('deflate' )
254+ self .assertEqual ('deflate' , resp .headers .get (hdrs .CONTENT_ENCODING ))
255+
256+ @mock .patch ('aiohttp.web_reqrep.ResponseImpl' )
257+ def test_force_compression_no_accept_deflate (self , ResponseImpl ):
258+ req = self .make_request ('GET' , '/' )
259+ resp = StreamResponse ()
260+
261+ resp .enable_compression (ContentCoding .deflate )
262+ self .assertTrue (resp .compression )
263+
264+ msg = resp .start (req )
265+ msg .add_compression_filter .assert_called_with ('deflate' )
266+ self .assertEqual ('deflate' , resp .headers .get (hdrs .CONTENT_ENCODING ))
267+
268+ @mock .patch ('aiohttp.web_reqrep.ResponseImpl' )
269+ def test_force_compression_gzip (self , ResponseImpl ):
270+ req = self .make_request (
271+ 'GET' , '/' ,
272+ headers = CIMultiDict ({hdrs .ACCEPT_ENCODING : 'gzip, deflate' }))
273+ resp = StreamResponse ()
274+
275+ resp .enable_compression (ContentCoding .gzip )
276+ self .assertTrue (resp .compression )
277+
278+ msg = resp .start (req )
279+ msg .add_compression_filter .assert_called_with ('gzip' )
280+ self .assertEqual ('gzip' , resp .headers .get (hdrs .CONTENT_ENCODING ))
281+
282+ @mock .patch ('aiohttp.web_reqrep.ResponseImpl' )
283+ def test_force_compression_no_accept_gzip (self , ResponseImpl ):
284+ req = self .make_request ('GET' , '/' )
285+ resp = StreamResponse ()
286+
287+ resp .enable_compression (ContentCoding .gzip )
288+ self .assertTrue (resp .compression )
289+
290+ msg = resp .start (req )
291+ msg .add_compression_filter .assert_called_with ('gzip' )
292+ self .assertEqual ('gzip' , resp .headers .get (hdrs .CONTENT_ENCODING ))
293+
229294 def test_write_non_byteish (self ):
230295 resp = StreamResponse ()
231296 resp .start (self .make_request ('GET' , '/' ))
0 commit comments