From 3dd34beabc9f21ff5eab93ddc0bf68473ed03454 Mon Sep 17 00:00:00 2001 From: TalLevAmi Date: Sun, 27 Sep 2026 06:53:17 +0000 Subject: [PATCH] Fix the path of `provisioning.user_in_user_groups` `user_in_user_groups(user_id)` sent `GET /user_groups/{user_id}`. That endpoint gets one user group by its group ID, so the call sent a user ID as a group ID. It returned a 404 or the wrong object, not the groups of the user. Call `GET /users/{user_id}/groups`, as the Provisioning API spec (`getGroupsForUser`) and the method docstring say. Add a mocked test that checks the method and the path. Co-Authored-By: Claude Opus 5.5 --- cloudinary/provisioning/account.py | 2 +- test/test_provisioning_api.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/cloudinary/provisioning/account.py b/cloudinary/provisioning/account.py index 9b970d2..33cbc86 100644 --- a/cloudinary/provisioning/account.py +++ b/cloudinary/provisioning/account.py @@ -464,7 +464,7 @@ def user_in_user_groups(user_id, **options): :return: List of groups user is in :rtype: dict """ - uri = [USER_GROUPS_SUB_PATH, user_id] + uri = [USERS_SUB_PATH, user_id, "groups"] return _call_account_api("get", uri, {}, **options) diff --git a/test/test_provisioning_api.py b/test/test_provisioning_api.py index e5f1e7a..5b012ba 100644 --- a/test/test_provisioning_api.py +++ b/test/test_provisioning_api.py @@ -267,6 +267,22 @@ def test_delete_access_key(self): self.assertEqual("ok", named_key_del_res["message"]) +class UserInUserGroupsTest(unittest.TestCase): + """ + Verifies the request shape against a mocked transport, so no account credentials are needed. + """ + + def test_user_in_user_groups(self): + with patch(URLLIB3_REQUEST) as mocker: + mocker.return_value = api_response_mock() + cloudinary.provisioning.user_in_user_groups("user_id", account_id="account_id", + provisioning_api_key="key", + provisioning_api_secret="secret") + + self.assertEqual("GET", get_method(mocker)) + self.assertTrue(get_uri(mocker).endswith("/provisioning/accounts/account_id/users/user_id/groups")) + + class CreateAgentAccountTest(unittest.TestCase): """ The create agent account endpoint is public, unauthenticated and rate limited per IP,