25
25
26
26
from django .conf import settings
27
27
from django .contrib .auth import get_user_model
28
+ from django .http import StreamingHttpResponse
28
29
from django .urls import reverse
29
30
30
31
from rest_framework .test import APITestCase
@@ -225,13 +226,43 @@ def test_download_file(self):
225
226
u , _ = get_user_model ().objects .get_or_create (username = "admin" )
226
227
self .assertTrue (self .client .login (username = "admin" , password = "admin" ), "Login failed" )
227
228
229
+ asset = self ._setup_test (u )
230
+
231
+ for path , key in ((None , "one" ), ("one.json" , "one" ), ("two.json" , "two" ), ("subdir/three.json" , "three" )):
232
+ # args = [asset.pk, path] if path else [asset.pk]
233
+ args = {"pk" : asset .pk , "path" : path } if path else {"pk" : asset .pk }
234
+ logger .info (f"*** Testing path '{ path } ' args { args } " )
235
+ url = reverse ("assets-link" , kwargs = args )
236
+ logger .info (f"REVERSE url is { url } " )
237
+ response = self .client .get (url )
238
+ content = self ._get_streaming_content (response )
239
+ rjson = json .loads (content )
240
+ self .assertEqual (response .status_code , 200 )
241
+ self .assertIn (key , rjson , f"Key '{ key } ' not found in path '{ path } ': { rjson } URL { url } " )
242
+ logger .info (f"Test for path '{ path } ' OK" )
243
+
244
+ def test_download_with_attachment (self ):
245
+ u , _ = get_user_model ().objects .get_or_create (username = "admin" )
246
+ self .assertTrue (self .client .login (username = "admin" , password = "admin" ), "Login failed" )
247
+
248
+ for key , el in (("one" , ONE_JSON ), ("two" , TWO_JSON ), ("three" , THREE_JSON )):
249
+ asset = self ._setup_test (u , _file = el )
250
+
251
+ url = reverse ("assets-download" , kwargs = {"pk" : asset .pk })
252
+ logger .info (f"REVERSE url is { url } " )
253
+ response = self .client .get (url )
254
+ self .assertEqual (response .status_code , 200 )
255
+ self .assertTrue (isinstance (response , StreamingHttpResponse ))
256
+ self .assertEqual (response .get ("Content-Disposition" ), f"attachment; filename={ key } .zip" )
257
+
258
+ def _setup_test (self , u , _file = ONE_JSON ):
228
259
asset_handler = asset_handler_registry .get_default_handler ()
229
260
asset = asset_handler .create (
230
261
title = "Test Asset" ,
231
262
description = "Description of test asset" ,
232
263
type = "NeverMind" ,
233
264
owner = u ,
234
- files = [ONE_JSON ],
265
+ files = [_file ],
235
266
clone_files = True ,
236
267
)
237
268
asset .save ()
@@ -245,16 +276,4 @@ def test_download_file(self):
245
276
os .mkdir (sub_dir )
246
277
shutil .copy (TWO_JSON , asset_dir )
247
278
shutil .copy (THREE_JSON , sub_dir )
248
-
249
- for path , key in ((None , "one" ), ("one.json" , "one" ), ("two.json" , "two" ), ("subdir/three.json" , "three" )):
250
- # args = [asset.pk, path] if path else [asset.pk]
251
- args = {"pk" : asset .pk , "path" : path } if path else {"pk" : asset .pk }
252
- logger .info (f"*** Testing path '{ path } ' args { args } " )
253
- url = reverse ("assets-link" , kwargs = args )
254
- logger .info (f"REVERSE url is { url } " )
255
- response = self .client .get (url )
256
- content = self ._get_streaming_content (response )
257
- rjson = json .loads (content )
258
- self .assertEqual (response .status_code , 200 )
259
- self .assertIn (key , rjson , f"Key '{ key } ' not found in path '{ path } ': { rjson } URL { url } " )
260
- logger .info (f"Test for path '{ path } ' OK" )
279
+ return asset
0 commit comments