Skip to content

Commit 9149f71

Browse files
refactor
1 parent d66d6ec commit 9149f71

File tree

2 files changed

+57
-13
lines changed

2 files changed

+57
-13
lines changed

src/workos/authorization.py

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ class PermissionListFilters(ListArgs, total=False):
4949

5050
class ResourcesForMembershipListFilters(ListArgs, total=False):
5151
permission_slug: str
52-
parent_resource: ParentResourceIdentifier
5352

5453

5554
ResourcesForMembershipListResource = WorkOSListResource[
@@ -524,12 +523,9 @@ def list_resources_for_membership(
524523
"after": after,
525524
"order": order,
526525
"permission_slug": permission_slug,
527-
"parent_resource": parent_resource,
528526
}
529527

530-
http_params: Dict[str, Any] = {
531-
k: v for k, v in list_params.items() if k != "parent_resource"
532-
}
528+
http_params: Dict[str, Any] = {**list_params}
533529
http_params.update(parent_resource)
534530

535531
response = self._http_client.request(
@@ -542,7 +538,9 @@ def list_resources_for_membership(
542538
Resource, ResourcesForMembershipListFilters, ListMetadata
543539
](
544540
list_method=partial(
545-
self.list_resources_for_membership, organization_membership_id
541+
self.list_resources_for_membership,
542+
organization_membership_id,
543+
parent_resource=parent_resource,
546544
),
547545
list_args=list_params,
548546
**ListPage[Resource](**response).model_dump(),
@@ -905,8 +903,6 @@ async def add_environment_role_permission(
905903

906904
return EnvironmentRole.model_validate(response)
907905

908-
# Resource-Membership Relationships
909-
910906
async def list_resources_for_membership(
911907
self,
912908
organization_membership_id: str,
@@ -924,12 +920,9 @@ async def list_resources_for_membership(
924920
"after": after,
925921
"order": order,
926922
"permission_slug": permission_slug,
927-
"parent_resource": parent_resource,
928923
}
929924

930-
http_params: Dict[str, Any] = {
931-
k: v for k, v in list_params.items() if k != "parent_resource"
932-
}
925+
http_params: Dict[str, Any] = {**list_params}
933926
http_params.update(parent_resource)
934927

935928
response = await self._http_client.request(
@@ -942,7 +935,9 @@ async def list_resources_for_membership(
942935
Resource, ResourcesForMembershipListFilters, ListMetadata
943936
](
944937
list_method=partial(
945-
self.list_resources_for_membership, organization_membership_id
938+
self.list_resources_for_membership,
939+
organization_membership_id,
940+
parent_resource=parent_resource,
946941
),
947942
list_args=list_params,
948943
**ListPage[Resource](**response).model_dump(),

tests/test_authorization_resource_memberships.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ def test_list_resources_for_membership_with_parent_resource_id(
6969
)
7070
)
7171

72+
assert result.object == "list"
7273
assert len(result.data) == 3
7374
assert request_kwargs["method"] == "get"
7475
assert request_kwargs["url"].endswith(
@@ -101,6 +102,54 @@ def test_list_resources_for_membership_with_parent_external_id(
101102
assert request_kwargs["params"]["parent_resource_external_id"] == "folder_abc"
102103
assert "parent_resource_id" not in request_kwargs["params"]
103104

105+
def test_list_resources_for_membership_empty(
106+
self, capture_and_mock_http_client_request
107+
):
108+
empty_response = {
109+
"data": [],
110+
"list_metadata": {"before": None, "after": None},
111+
"object": "list",
112+
}
113+
capture_and_mock_http_client_request(self.http_client, empty_response, 200)
114+
115+
result = syncify(
116+
self.authorization.list_resources_for_membership(
117+
"om_01ABC",
118+
permission_slug="documents:read",
119+
parent_resource=ParentResourceIdentifierById(
120+
parent_resource_id="res_parent_01",
121+
),
122+
)
123+
)
124+
125+
assert result.object == "list"
126+
assert len(result.data) == 0
127+
128+
def test_list_resources_for_membership_passes_pagination_params(
129+
self, mock_resources_list, capture_and_mock_http_client_request
130+
):
131+
request_kwargs = capture_and_mock_http_client_request(
132+
self.http_client, mock_resources_list, 200
133+
)
134+
135+
syncify(
136+
self.authorization.list_resources_for_membership(
137+
"om_01ABC",
138+
permission_slug="documents:read",
139+
parent_resource=ParentResourceIdentifierById(
140+
parent_resource_id="res_parent_01",
141+
),
142+
limit=10,
143+
after="res_cursor123",
144+
order="desc",
145+
)
146+
)
147+
148+
assert request_kwargs["params"]["permission_slug"] == "documents:read"
149+
assert request_kwargs["params"]["limit"] == 10
150+
assert request_kwargs["params"]["after"] == "res_cursor123"
151+
assert request_kwargs["params"]["order"] == "desc"
152+
104153
def test_list_resources_for_membership_auto_pagination(
105154
self,
106155
mock_resources_multiple_pages,

0 commit comments

Comments
 (0)