Skip to content

Commit 46245bd

Browse files
authored
[MPT-14088] Added Accounts accounts by id users by id groups endpoints (#90)
Added Accounts accounts by id users by id groups endpoints https://softwareone.atlassian.net/browse/MPT-14088
2 parents 1795747 + aa8a221 commit 46245bd

File tree

4 files changed

+155
-5
lines changed

4 files changed

+155
-5
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from mpt_api_client.http import AsyncService, Service
2+
from mpt_api_client.http.mixins import (
3+
AsyncCreateMixin,
4+
AsyncDeleteMixin,
5+
AsyncUpdateMixin,
6+
CreateMixin,
7+
DeleteMixin,
8+
UpdateMixin,
9+
)
10+
from mpt_api_client.models import Model
11+
12+
13+
class AccountsUserGroup(Model):
14+
"""Account User Group Model."""
15+
16+
17+
class AccountsUserGroupsServiceConfig:
18+
"""Account User Groups Service Configuration."""
19+
20+
_endpoint = "/public/v1/accounts/{account_id}/users/{user_id}/groups"
21+
_model_class = AccountsUserGroup
22+
_collection_key = "data"
23+
24+
25+
class AccountsUserGroupsService(
26+
UpdateMixin[AccountsUserGroup],
27+
DeleteMixin,
28+
CreateMixin[AccountsUserGroup],
29+
Service[AccountsUserGroup],
30+
AccountsUserGroupsServiceConfig,
31+
):
32+
"""Account User Groups Service."""
33+
34+
35+
class AsyncAccountsUserGroupsService(
36+
AsyncUpdateMixin[AccountsUserGroup],
37+
AsyncDeleteMixin,
38+
AsyncCreateMixin[AccountsUserGroup],
39+
AsyncService[AccountsUserGroup],
40+
AccountsUserGroupsServiceConfig,
41+
):
42+
"""Asynchronous Account User Groups Service."""

mpt_api_client/resources/accounts/accounts_users.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
UpdateMixin,
99
)
1010
from mpt_api_client.models import Model
11+
from mpt_api_client.resources.accounts.accounts_user_groups import (
12+
AccountsUserGroupsService,
13+
AsyncAccountsUserGroupsService,
14+
)
1115
from mpt_api_client.resources.accounts.mixins import (
1216
AsyncInvitableMixin,
1317
InvitableMixin,
@@ -21,7 +25,7 @@ class AccountsUser(Model):
2125
class AccountsUsersServiceConfig:
2226
"""Account Users Service Configuration."""
2327

24-
_endpoint = "/public/v1/accounts/accounts/{account_id}/users"
28+
_endpoint = "/public/v1/accounts/{account_id}/users"
2529
_model_class = AccountsUser
2630
_collection_key = "data"
2731

@@ -36,6 +40,16 @@ class AccountsUsersService(
3640
):
3741
"""Account Users Service."""
3842

43+
def groups(self, user_id: str) -> AccountsUserGroupsService:
44+
"""Return account user groups service."""
45+
return AccountsUserGroupsService(
46+
http_client=self.http_client,
47+
endpoint_params={
48+
"account_id": self.endpoint_params["account_id"],
49+
"user_id": user_id,
50+
},
51+
)
52+
3953

4054
class AsyncAccountsUsersService(
4155
AsyncUpdateMixin[AccountsUser],
@@ -46,3 +60,13 @@ class AsyncAccountsUsersService(
4660
AccountsUsersServiceConfig,
4761
):
4862
"""Asynchronous Account Users Service."""
63+
64+
def groups(self, user_id: str) -> AsyncAccountsUserGroupsService:
65+
"""Return account user groups service."""
66+
return AsyncAccountsUserGroupsService(
67+
http_client=self.http_client,
68+
endpoint_params={
69+
"account_id": self.endpoint_params["account_id"],
70+
"user_id": user_id,
71+
},
72+
)
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import pytest
2+
3+
from mpt_api_client.resources.accounts.accounts_user_groups import (
4+
AccountsUserGroupsService,
5+
AsyncAccountsUserGroupsService,
6+
)
7+
8+
9+
@pytest.fixture
10+
def accounts_user_groups_service(http_client):
11+
return AccountsUserGroupsService(
12+
http_client=http_client,
13+
endpoint_params={"account_id": "ACC-0000-0001", "user_id": "USR-0000-0001"},
14+
)
15+
16+
17+
@pytest.fixture
18+
def async_accounts_user_groups_service(async_http_client):
19+
return AsyncAccountsUserGroupsService(
20+
http_client=async_http_client,
21+
endpoint_params={"account_id": "ACC-0000-0001", "user_id": "USR-0000-0001"},
22+
)
23+
24+
25+
def test_endpoint(accounts_user_groups_service):
26+
assert (
27+
accounts_user_groups_service.endpoint
28+
== "/public/v1/accounts/ACC-0000-0001/users/USR-0000-0001/groups"
29+
)
30+
31+
32+
def test_async_endpoint(async_accounts_user_groups_service):
33+
assert (
34+
async_accounts_user_groups_service.endpoint
35+
== "/public/v1/accounts/ACC-0000-0001/users/USR-0000-0001/groups"
36+
)
37+
38+
39+
@pytest.mark.parametrize(
40+
"method",
41+
["create", "update", "delete"],
42+
)
43+
def test_mixins_present(accounts_user_groups_service, method):
44+
assert hasattr(accounts_user_groups_service, method)
45+
46+
47+
@pytest.mark.parametrize(
48+
"method",
49+
["create", "update", "delete"],
50+
)
51+
def test_async_mixins_present(async_accounts_user_groups_service, method):
52+
assert hasattr(async_accounts_user_groups_service, method)

tests/resources/accounts/test_accounts_users.py

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import pytest
22

3+
from mpt_api_client.resources.accounts.accounts_user_groups import (
4+
AccountsUserGroupsService,
5+
AsyncAccountsUserGroupsService,
6+
)
37
from mpt_api_client.resources.accounts.accounts_users import (
48
AccountsUsersService,
59
AsyncAccountsUsersService,
@@ -21,13 +25,11 @@ def async_accounts_users_service(async_http_client):
2125

2226

2327
def test_endpoint(accounts_users_service):
24-
assert accounts_users_service.endpoint == "/public/v1/accounts/accounts/ACC-0000-0001/users"
28+
assert accounts_users_service.endpoint == "/public/v1/accounts/ACC-0000-0001/users"
2529

2630

2731
def test_async_endpoint(async_accounts_users_service):
28-
assert (
29-
async_accounts_users_service.endpoint == "/public/v1/accounts/accounts/ACC-0000-0001/users"
30-
)
32+
assert async_accounts_users_service.endpoint == "/public/v1/accounts/ACC-0000-0001/users"
3133

3234

3335
@pytest.mark.parametrize(
@@ -44,3 +46,33 @@ def test_methods_present(accounts_users_service, method):
4446
)
4547
def test_async_methods_present(async_accounts_users_service, method):
4648
assert hasattr(async_accounts_users_service, method)
49+
50+
51+
@pytest.mark.parametrize(
52+
("service_method", "expected_service_class"),
53+
[("groups", AccountsUserGroupsService)],
54+
)
55+
def test_property_services(accounts_users_service, service_method, expected_service_class):
56+
service = getattr(accounts_users_service, service_method)("USR-0000-0001")
57+
58+
assert isinstance(service, expected_service_class)
59+
assert service.endpoint_params == {
60+
"account_id": "ACC-0000-0001",
61+
"user_id": "USR-0000-0001",
62+
}
63+
64+
65+
@pytest.mark.parametrize(
66+
("service_method", "expected_service_class"),
67+
[("groups", AsyncAccountsUserGroupsService)],
68+
)
69+
def test_async_property_services(
70+
async_accounts_users_service, service_method, expected_service_class
71+
):
72+
service = getattr(async_accounts_users_service, service_method)("USR-0000-0001")
73+
74+
assert isinstance(service, expected_service_class)
75+
assert service.endpoint_params == {
76+
"account_id": "ACC-0000-0001",
77+
"user_id": "USR-0000-0001",
78+
}

0 commit comments

Comments
 (0)