From 63f0515912a646326eb971f3b22731c7dce7d806 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B4natas=20Santos?= Date: Thu, 17 Aug 2023 11:25:42 -0300 Subject: [PATCH] Fix --- tests/test_organizations.py | 4 +- tests/test_users.py | 125 ++++++++++++++++++++++++++++++++++++ workos/organizations.py | 2 +- workos/users.py | 16 ++--- 4 files changed, 136 insertions(+), 11 deletions(-) diff --git a/tests/test_organizations.py b/tests/test_organizations.py index 8902e800..d8820093 100644 --- a/tests/test_organizations.py +++ b/tests/test_organizations.py @@ -107,7 +107,7 @@ def mock_organizations_with_limit_v2(self): "after": None, "order": None, }, - "method": Organizations.list_organizations, + "method": Organizations.list_organizations_v2, }, } return self.organizations.construct_from_response(dict_response) @@ -150,7 +150,7 @@ def mock_organizations_with_default_limit_v2(self): "order": None, "default_limit": True, }, - "method": Organizations.list_organizations, + "method": Organizations.list_organizations_v2, }, } return self.organizations.construct_from_response(dict_response) diff --git a/tests/test_users.py b/tests/test_users.py index 1c342e1a..93e099c3 100644 --- a/tests/test_users.py +++ b/tests/test_users.py @@ -13,6 +13,93 @@ def setup(self, set_api_key, set_client_id): def mock_user(self): return MockUser("user_01H7ZGXFP5C6BBQY6Z7277ZCT0").to_dict() + @pytest.fixture + def mock_users(self): + user_list = [MockUser(id=str(i)).to_dict() for i in range(5000)] + + dict_response = { + "data": user_list, + "list_metadata": {"before": None, "after": None}, + "metadata": { + "params": { + "type": None, + "organization": None, + "email": None, + "limit": None, + "before": None, + "after": None, + "order": None, + "default_limit": True, + }, + "method": Users.list_users, + }, + } + return self.users.construct_from_response(dict_response) + + @pytest.fixture + def mock_users_with_limit(self): + user_list = [MockUser(id=str(i)).to_dict() for i in range(4)] + dict_response = { + "data": user_list, + "list_metadata": {"before": None, "after": None}, + "metadata": { + "params": { + "type": None, + "organization": None, + "email": None, + "limit": 4, + "before": None, + "after": None, + "order": None, + }, + "method": Users.list_users, + }, + } + return self.users.construct_from_response(dict_response) + + @pytest.fixture + def mock_users_with_default_limit(self): + user_list = [MockUser(id=str(i)).to_dict() for i in range(10)] + + dict_response = { + "data": user_list, + "list_metadata": {"before": None, "after": "user_id_xxx"}, + "metadata": { + "params": { + "type": None, + "organization": None, + "email": None, + "limit": None, + "before": None, + "after": None, + "order": None, + "default_limit": True, + }, + "method": Users.list_users, + }, + } + return self.users.construct_from_response(dict_response) + + @pytest.fixture + def mock_users_pagination_response(self): + user_list = [MockUser(id=str(i)).to_dict() for i in range(4990)] + + return { + "data": user_list, + "list_metadata": {"before": None, "after": None}, + "metadata": { + "params": { + "domains": None, + "limit": None, + "before": None, + "after": None, + "order": None, + "default_limit": True, + }, + "method": Users.list_users, + }, + } + def test_create_user(self, mock_user, mock_request_method): mock_request_method("post", mock_user, 201) @@ -34,3 +121,41 @@ def test_get_user(self, mock_user, capture_and_mock_request): assert url[0].endswith("users/user_01H7ZGXFP5C6BBQY6Z7277ZCT0") assert user["id"] == "user_01H7ZGXFP5C6BBQY6Z7277ZCT0" + + def test_list_users_auto_pagination( + self, + mock_users_with_default_limit, + mock_users_pagination_response, + mock_users, + mock_request_method, + ): + mock_request_method("get", mock_users_pagination_response, 200) + users = mock_users_with_default_limit + all_users = users.auto_paging_iter() + assert len(*list(all_users)) == len(mock_users["data"]) + + def test_list_users_honors_limit( + self, + mock_users_with_limit, + mock_users_pagination_response, + mock_request_method, + ): + mock_request_method("get", mock_users_pagination_response, 200) + users = mock_users_with_limit + all_users = users.auto_paging_iter() + dict_response = users.to_dict() + assert len(*list(all_users)) == len(dict_response["data"]) + + def test_list_users_returns_metadata( + self, + mock_users, + mock_request_method, + ): + mock_request_method("get", mock_users, 200) + users = self.users.list_users( + domains=["planet-express.com"] + ) + dict_users = users.to_dict() + assert dict_users["metadata"]["params"]["domains"] == [ + "planet-express.com" + ] \ No newline at end of file diff --git a/workos/organizations.py b/workos/organizations.py index 105e5e3d..66351907 100644 --- a/workos/organizations.py +++ b/workos/organizations.py @@ -141,7 +141,7 @@ def list_organizations_v2( token=workos.api_key, ) - dict_response = response.to_dict() + dict_response = response dict_response["metadata"] = { "params": params, diff --git a/workos/users.py b/workos/users.py index d056b4e1..d617611f 100644 --- a/workos/users.py +++ b/workos/users.py @@ -101,6 +101,8 @@ def list_users(self, dict: Users response from WorkOS. """ + default_limit = None + if limit is None: limit = RESPONSE_LIMIT default_limit = True @@ -136,17 +138,15 @@ def list_users(self, token=workos.api_key, ) - dict_response = response.to_dict() - - dict_response["metadata"] = { + response["metadata"] = { "params": params, - "method": Organizations.list_organizations_v2, + "method": Users.list_users, } if "default_limit" in locals(): - if "metadata" in dict_response and "params" in dict_response["metadata"]: - dict_response["metadata"]["params"]["default_limit"] = default_limit + if "metadata" in response and "params" in response["metadata"]: + response["metadata"]["params"]["default_limit"] = default_limit else: - dict_response["metadata"] = {"params": {"default_limit": default_limit}} + response["metadata"] = {"params": {"default_limit": default_limit}} - return self.construct_from_response(dict_response) + return self.construct_from_response(response)