11from typing import Union
22
33import pytest
4- from workos .directory_sync import AsyncDirectorySync , DirectorySync
4+
5+ from workos .directory_sync import _prepare_request_params
56
67from tests .types .test_auto_pagination_function import TestAutoPaginationFunction
78from tests .utils .fixtures .mock_directory import (
1314from tests .utils .fixtures .mock_directory_user import MockDirectoryUser
1415from tests .utils .list_resource import list_data_to_dicts , list_response_of
1516from tests .utils .syncify import syncify
17+ from workos .directory_sync import AsyncDirectorySync , DirectorySync
1618
1719
1820def api_directory_to_sdk (directory ):
@@ -145,7 +147,7 @@ def test_list_users_with_directory(
145147 assert request_kwargs ["url" ].endswith ("/directory_users" )
146148 assert request_kwargs ["method" ] == "get"
147149 assert request_kwargs ["params" ] == {
148- "directory_id " : "directory_id" ,
150+ "directory " : "directory_id" ,
149151 "limit" : 10 ,
150152 "order" : "desc" ,
151153 }
@@ -163,7 +165,7 @@ def test_list_users_with_group(
163165 assert request_kwargs ["url" ].endswith ("/directory_users" )
164166 assert request_kwargs ["method" ] == "get"
165167 assert request_kwargs ["params" ] == {
166- "group_id " : "directory_grp_id" ,
168+ "group " : "directory_grp_id" ,
167169 "limit" : 10 ,
168170 "order" : "desc" ,
169171 }
@@ -181,7 +183,7 @@ def test_list_groups_with_directory(
181183 assert request_kwargs ["url" ].endswith ("/directory_groups" )
182184 assert request_kwargs ["method" ] == "get"
183185 assert request_kwargs ["params" ] == {
184- "directory_id " : "directory_id" ,
186+ "directory " : "directory_id" ,
185187 "limit" : 10 ,
186188 "order" : "desc" ,
187189 }
@@ -199,7 +201,7 @@ def test_list_groups_with_user(
199201 assert request_kwargs ["url" ].endswith ("/directory_groups" )
200202 assert request_kwargs ["method" ] == "get"
201203 assert request_kwargs ["params" ] == {
202- "user_id " : "directory_user_id" ,
204+ "user " : "directory_user_id" ,
203205 "limit" : 10 ,
204206 "order" : "desc" ,
205207 }
@@ -371,3 +373,53 @@ def test_directory_user_groups_auto_pagination(
371373 list_function = self .directory_sync .list_groups ,
372374 expected_all_page_data = mock_directory_groups_multiple_data_pages ,
373375 )
376+
377+
378+ class TestPrepareRequestParams :
379+ """Tests for SDK-to-API parameter name translation.
380+
381+ The SDK uses Pythonic parameter names (directory_id, group_id, user_id)
382+ but the WorkOS API expects shorter names (directory, group, user).
383+ The _prepare_request_params function handles this translation.
384+
385+ See: https://github.com/workos/workos-python/issues/511
386+ See: https://github.com/workos/workos-python/issues/519
387+ """
388+
389+ def test_translates_directory_id_to_directory (self ):
390+ params = {"directory_id" : "dir_123" , "limit" : 10 }
391+ result = _prepare_request_params (params )
392+ assert "directory" in result
393+ assert "directory_id" not in result
394+ assert result ["directory" ] == "dir_123"
395+
396+ def test_translates_group_id_to_group (self ):
397+ params = {"group_id" : "grp_123" , "limit" : 10 }
398+ result = _prepare_request_params (params )
399+ assert "group" in result
400+ assert "group_id" not in result
401+ assert result ["group" ] == "grp_123"
402+
403+ def test_translates_user_id_to_user (self ):
404+ params = {"user_id" : "usr_123" , "limit" : 10 }
405+ result = _prepare_request_params (params )
406+ assert "user" in result
407+ assert "user_id" not in result
408+ assert result ["user" ] == "usr_123"
409+
410+ def test_preserves_non_id_params (self ):
411+ params = {
412+ "directory_id" : "dir_123" ,
413+ "limit" : 10 ,
414+ "order" : "desc" ,
415+ "after" : "cursor" ,
416+ }
417+ result = _prepare_request_params (params )
418+ assert result ["limit" ] == 10
419+ assert result ["order" ] == "desc"
420+ assert result ["after" ] == "cursor"
421+
422+ def test_handles_empty_params (self ):
423+ params = {"limit" : 10 , "order" : "desc" }
424+ result = _prepare_request_params (params )
425+ assert result == {"limit" : 10 , "order" : "desc" }
0 commit comments