@@ -274,6 +274,7 @@ async def test_async_client_methods_and_context_manager(self):
274274 self .assertEqual (response .data ["ok" ], "ASSEMBLY_COMPLETED" )
275275 self .assertEqual (response .data ["assembly_id" ], "abc123" )
276276 self .assertEqual (response .status_code , 200 )
277+ self .assertIs (type (response .headers ), dict )
277278 self .assertEqual (response .headers ["X-Async-Route" ], "get_assembly" )
278279
279280 response = await client .list_assemblies ()
@@ -383,6 +384,18 @@ async def test_async_client_close_reopens_owned_session(self):
383384
384385 await client .close ()
385386
387+ async def test_async_request_owned_sessions_trust_environment (self ):
388+ session = _NeverOwnedSession ()
389+ client = AsyncTransloadit ("key" , "secret" , service = self .server .base_url )
390+
391+ with mock .patch ("aiohttp.ClientSession" , return_value = session ) as session_mock :
392+ ensured_session = await client .request ._ensure_session ()
393+
394+ self .assertIs (ensured_session , session )
395+ session_mock .assert_called_once_with (trust_env = True )
396+
397+ await client .close ()
398+
386399 async def test_async_client_reopens_owned_session_when_session_is_closed (self ):
387400 client = AsyncTransloadit ("key" , "secret" , service = self .server .base_url )
388401
@@ -521,7 +534,7 @@ async def test_async_assembly_wait_returns_plain_text_poll_response(self):
521534 def test_async_signed_smart_cdn_url_matches_sync_and_rejects_bad_types (self ):
522535 async_client = AsyncTransloadit ("test-key" , "test-secret" )
523536 sync_client = Transloadit ("test-key" , "test-secret" )
524- params = {"width" : 100 , "tags" : ["a" , "b" ], "enabled" : True , "skip" : None }
537+ params = {"width" : 100 , "tags" : ["a" , "b" ], "enabled" : True , "flags" : [ True , False ], " skip" : None }
525538
526539 with mock .patch ("time.time" , return_value = 1732550672.867 ):
527540 async_url = async_client .get_signed_smart_cdn_url (
@@ -569,6 +582,9 @@ def test_async_signed_smart_cdn_url_matches_sync_and_rejects_bad_types(self):
569582 self .assertIn ("width=100" , async_url )
570583 self .assertIn ("tags=a" , async_url )
571584 self .assertIn ("tags=b" , async_url )
585+ self .assertIn ("enabled=true" , async_url )
586+ self .assertIn ("flags=true" , async_url )
587+ self .assertIn ("flags=false" , async_url )
572588 self .assertIn ("exp=1732550672867" , explicit_async_url )
573589 self .assertNotIn ("width=" , bare_async_url )
574590 self .assertNotIn ("skip=" , async_url )
@@ -908,7 +924,7 @@ def uploader(self, **kwargs):
908924 post_mock .assert_awaited_once ()
909925 self .assertEqual (calls , [])
910926
911- async def test_async_assembly_resumable_response_without_upload_urls_skips_tus_upload (self ):
927+ async def test_async_assembly_resumable_response_without_upload_urls_raises_before_tus_upload (self ):
912928 calls = []
913929
914930 class _TusClient :
@@ -930,9 +946,9 @@ def uploader(self, **kwargs):
930946
931947 with mock .patch .object (client .request , "post" , new = mock .AsyncMock (return_value = incomplete_response )) as post_mock :
932948 with mock .patch ("transloadit.async_assembly.tus.TusClient" , new = _TusClient ):
933- response = await assembly .create (resumable = True )
949+ with self .assertRaises (RuntimeError ):
950+ await assembly .create (resumable = True )
934951
935- self .assertIs (response , incomplete_response )
936952 post_mock .assert_awaited_once ()
937953 self .assertEqual (calls , [])
938954
@@ -988,7 +1004,12 @@ def uploader(self, **kwargs):
9881004 response = await assembly .create (resumable = True )
9891005
9901006 self .assertEqual (response .data ["ok" ], "ASSEMBLY_COMPLETED" )
991- self .assertEqual (to_thread_mock .await_count , 1 )
1007+ tus_upload_calls = [
1008+ call
1009+ for call in to_thread_mock .await_args_list
1010+ if getattr (call .args [0 ], "__name__" , "" ) == "_do_tus_upload"
1011+ ]
1012+ self .assertEqual (len (tus_upload_calls ), 1 )
9921013
9931014 create_request = next (
9941015 entry for entry in self .server .requests if entry ["path" ] == "/assemblies" and entry ["method" ] == "POST"
@@ -1232,6 +1253,25 @@ async def test_async_request_uses_connect_and_read_timeouts_for_uploads(self):
12321253 self .assertIsNone (timeout .sock_read )
12331254 self .assertEqual (session .calls [0 ][1 ]["data" ]._fields [2 ][1 ]["Content-Type" ], "image/jpeg" )
12341255
1256+ async def test_async_request_payload_preserves_custom_auth_constraints (self ):
1257+ client = AsyncTransloadit ("key" , "secret" , service = self .server .base_url )
1258+
1259+ payload = client .request ._to_payload (
1260+ {
1261+ "auth" : {
1262+ "max_size" : 1024 ,
1263+ "referer" : "https://example.com" ,
1264+ },
1265+ "foo" : "bar" ,
1266+ }
1267+ )
1268+
1269+ params = json .loads (payload ["params" ])
1270+ self .assertEqual (params ["auth" ]["key" ], "key" )
1271+ self .assertIn ("expires" , params ["auth" ])
1272+ self .assertEqual (params ["auth" ]["max_size" ], 1024 )
1273+ self .assertEqual (params ["auth" ]["referer" ], "https://example.com" )
1274+
12351275 async def test_async_request_filters_none_and_lowercases_booleans_in_extra_data (self ):
12361276 session = _RecordingSession ({"ok" : "ASSEMBLY_COMPLETED" })
12371277 client = AsyncTransloadit ("key" , "secret" , service = self .server .base_url , session = session )
0 commit comments