Skip to content

Commit bee30fc

Browse files
committed
add helpdesk parameter groups API services and tests
1 parent 0f6655f commit bee30fc

File tree

12 files changed

+582
-0
lines changed

12 files changed

+582
-0
lines changed

mpt_api_client/resources/helpdesk/helpdesk.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
from mpt_api_client.http import AsyncHTTPClient, HTTPClient
22
from mpt_api_client.resources.helpdesk.cases import AsyncCasesService, CasesService
33
from mpt_api_client.resources.helpdesk.chats import AsyncChatsService, ChatsService
4+
from mpt_api_client.resources.helpdesk.parameter_groups import (
5+
AsyncParameterGroupsService,
6+
ParameterGroupsService,
7+
)
48
from mpt_api_client.resources.helpdesk.parameters import (
59
AsyncParametersService,
610
ParametersService,
@@ -34,6 +38,11 @@ def parameters(self) -> ParametersService: # noqa: WPS110
3438
"""Parameters service."""
3539
return ParametersService(http_client=self.http_client)
3640

41+
@property
42+
def parameter_groups(self) -> ParameterGroupsService:
43+
"""Parameter groups service."""
44+
return ParameterGroupsService(http_client=self.http_client)
45+
3746

3847
class AsyncHelpdesk:
3948
"""Async Helpdesk MPT API Module."""
@@ -60,3 +69,8 @@ def queues(self) -> AsyncQueuesService:
6069
def parameters(self) -> AsyncParametersService: # noqa: WPS110
6170
"""Async parameters service."""
6271
return AsyncParametersService(http_client=self.http_client)
72+
73+
@property
74+
def parameter_groups(self) -> AsyncParameterGroupsService:
75+
"""Async parameter groups service."""
76+
return AsyncParameterGroupsService(http_client=self.http_client)
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from mpt_api_client.http import AsyncService, Service
2+
from mpt_api_client.http.mixins import (
3+
AsyncCollectionMixin,
4+
AsyncManagedResourceMixin,
5+
CollectionMixin,
6+
ManagedResourceMixin,
7+
)
8+
from mpt_api_client.models import Model
9+
10+
11+
class ParameterGroupParameter(Model):
12+
"""Helpdesk parameter group parameter resource."""
13+
14+
15+
class ParameterGroupParametersServiceConfig:
16+
"""Helpdesk parameter group parameters service configuration."""
17+
18+
_endpoint = "/public/v1/helpdesk/parameter-groups/{group_id}/parameters"
19+
_model_class = ParameterGroupParameter
20+
_collection_key = "data"
21+
22+
23+
class ParameterGroupParametersService(
24+
ManagedResourceMixin[ParameterGroupParameter],
25+
CollectionMixin[ParameterGroupParameter],
26+
Service[ParameterGroupParameter],
27+
ParameterGroupParametersServiceConfig,
28+
):
29+
"""Helpdesk parameter group parameters service."""
30+
31+
32+
class AsyncParameterGroupParametersService(
33+
AsyncManagedResourceMixin[ParameterGroupParameter],
34+
AsyncCollectionMixin[ParameterGroupParameter],
35+
AsyncService[ParameterGroupParameter],
36+
ParameterGroupParametersServiceConfig,
37+
):
38+
"""Async helpdesk parameter group parameters service."""
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
from mpt_api_client.http import AsyncService, Service
2+
from mpt_api_client.http.mixins import (
3+
AsyncCollectionMixin,
4+
AsyncManagedResourceMixin,
5+
CollectionMixin,
6+
ManagedResourceMixin,
7+
)
8+
from mpt_api_client.models import Model
9+
from mpt_api_client.resources.helpdesk.parameter_group_parameters import (
10+
AsyncParameterGroupParametersService,
11+
ParameterGroupParametersService,
12+
)
13+
14+
15+
class ParameterGroup(Model):
16+
"""Helpdesk parameter group resource."""
17+
18+
19+
class ParameterGroupsServiceConfig:
20+
"""Helpdesk parameter groups service configuration."""
21+
22+
_endpoint = "/public/v1/helpdesk/parameter-groups"
23+
_model_class = ParameterGroup
24+
_collection_key = "data"
25+
26+
27+
class ParameterGroupsService(
28+
ManagedResourceMixin[ParameterGroup],
29+
CollectionMixin[ParameterGroup],
30+
Service[ParameterGroup],
31+
ParameterGroupsServiceConfig,
32+
):
33+
"""Helpdesk parameter groups service."""
34+
35+
def parameters(self, group_id: str) -> ParameterGroupParametersService: # noqa: WPS110
36+
"""Return parameter group parameters service."""
37+
return ParameterGroupParametersService(
38+
http_client=self.http_client, endpoint_params={"group_id": group_id}
39+
)
40+
41+
42+
class AsyncParameterGroupsService(
43+
AsyncManagedResourceMixin[ParameterGroup],
44+
AsyncCollectionMixin[ParameterGroup],
45+
AsyncService[ParameterGroup],
46+
ParameterGroupsServiceConfig,
47+
):
48+
"""Async helpdesk parameter groups service."""
49+
50+
def parameters(self, group_id: str) -> AsyncParameterGroupParametersService: # noqa: WPS110
51+
"""Return async parameter group parameters service."""
52+
return AsyncParameterGroupParametersService(
53+
http_client=self.http_client, endpoint_params={"group_id": group_id}
54+
)
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import pytest
2+
3+
from tests.e2e.helper import (
4+
async_create_fixture_resource_and_delete,
5+
create_fixture_resource_and_delete,
6+
)
7+
8+
9+
@pytest.fixture
10+
def parameter_group_data(short_uuid):
11+
return {
12+
"name": f"E2E Helpdesk Parameter Group {short_uuid}",
13+
"label": f"E2E Label {short_uuid}",
14+
"description": "E2E Created Helpdesk Parameter Group",
15+
}
16+
17+
18+
@pytest.fixture
19+
def invalid_parameter_group_id():
20+
return "PGR-0000-0000"
21+
22+
23+
@pytest.fixture
24+
def parameter_groups_service(mpt_ops):
25+
return mpt_ops.helpdesk.parameter_groups
26+
27+
28+
@pytest.fixture
29+
def async_parameter_groups_service(async_mpt_ops):
30+
return async_mpt_ops.helpdesk.parameter_groups
31+
32+
33+
@pytest.fixture
34+
def created_parameter_group(parameter_groups_service, parameter_group_data):
35+
with create_fixture_resource_and_delete(
36+
parameter_groups_service, parameter_group_data
37+
) as parameter_group:
38+
yield parameter_group
39+
40+
41+
@pytest.fixture
42+
async def async_created_parameter_group(async_parameter_groups_service, parameter_group_data):
43+
async with async_create_fixture_resource_and_delete(
44+
async_parameter_groups_service, parameter_group_data
45+
) as parameter_group:
46+
yield parameter_group
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import pytest
2+
3+
from tests.e2e.helper import (
4+
async_create_fixture_resource_and_delete,
5+
create_fixture_resource_and_delete,
6+
)
7+
8+
9+
@pytest.fixture
10+
def parameter_data(short_uuid):
11+
return {
12+
"name": f"E2E Helpdesk Group Parameter {short_uuid}",
13+
"description": "E2E Created Helpdesk Group Parameter",
14+
"scope": "Case",
15+
"phase": "Request",
16+
"type": "String",
17+
"multiple": False,
18+
"constraints": {
19+
"required": False,
20+
"readonly": False,
21+
"hidden": False,
22+
"visibility": "All",
23+
},
24+
}
25+
26+
27+
@pytest.fixture
28+
def created_parameter_definition(mpt_ops, parameter_data):
29+
with create_fixture_resource_and_delete(
30+
mpt_ops.helpdesk.parameters, parameter_data
31+
) as parameter_definition:
32+
yield parameter_definition
33+
34+
35+
@pytest.fixture
36+
async def async_created_parameter_definition(async_mpt_ops, parameter_data):
37+
async with async_create_fixture_resource_and_delete(
38+
async_mpt_ops.helpdesk.parameters, parameter_data
39+
) as parameter_definition:
40+
yield parameter_definition
41+
42+
43+
@pytest.fixture
44+
def parameter_group_parameters_service(mpt_ops, created_parameter_group):
45+
return mpt_ops.helpdesk.parameter_groups.parameters(created_parameter_group.id)
46+
47+
48+
@pytest.fixture
49+
def parameter_group_parameter_data(created_parameter_definition):
50+
return {
51+
"parameterId": created_parameter_definition.id,
52+
"displayOrder": 100,
53+
}
54+
55+
56+
@pytest.fixture
57+
def created_parameter_group_parameter(
58+
parameter_group_parameters_service, parameter_group_parameter_data
59+
):
60+
with create_fixture_resource_and_delete(
61+
parameter_group_parameters_service, parameter_group_parameter_data
62+
) as parameter_group_parameter:
63+
yield parameter_group_parameter
64+
65+
66+
@pytest.fixture
67+
def invalid_parameter_group_parameter_id():
68+
return "PAR-0000-0000"
69+
70+
71+
@pytest.fixture
72+
def async_parameter_group_parameters_service(async_mpt_ops, async_created_parameter_group):
73+
return async_mpt_ops.helpdesk.parameter_groups.parameters(async_created_parameter_group.id)
74+
75+
76+
@pytest.fixture
77+
def async_parameter_group_parameter_data(async_created_parameter_definition):
78+
return {
79+
"parameterId": async_created_parameter_definition.id,
80+
"displayOrder": 100,
81+
}
82+
83+
84+
@pytest.fixture
85+
async def async_created_parameter_group_parameter(
86+
async_parameter_group_parameters_service, async_parameter_group_parameter_data
87+
):
88+
async with async_create_fixture_resource_and_delete(
89+
async_parameter_group_parameters_service, async_parameter_group_parameter_data
90+
) as parameter_group_parameter:
91+
yield parameter_group_parameter
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import pytest
2+
3+
from mpt_api_client.exceptions import MPTAPIError
4+
5+
pytestmark = [
6+
pytest.mark.flaky,
7+
pytest.mark.skip(reason="Skipped per MPT-18373 request"),
8+
]
9+
10+
11+
async def test_get_parameter_group_parameter(
12+
async_parameter_group_parameters_service, async_created_parameter_group_parameter
13+
):
14+
result = await async_parameter_group_parameters_service.get(
15+
async_created_parameter_group_parameter.id
16+
)
17+
18+
assert result.id == async_created_parameter_group_parameter.id
19+
20+
21+
async def test_list_parameter_group_parameters(
22+
async_parameter_group_parameters_service, async_created_parameter_group_parameter
23+
):
24+
result = await async_parameter_group_parameters_service.fetch_page(limit=20)
25+
26+
assert any(parameter.id == async_created_parameter_group_parameter.id for parameter in result)
27+
28+
29+
def test_create_parameter_group_parameter(async_created_parameter_group_parameter):
30+
result = async_created_parameter_group_parameter
31+
32+
assert result is not None
33+
34+
35+
async def test_update_parameter_group_parameter(
36+
async_parameter_group_parameters_service, async_created_parameter_group_parameter
37+
):
38+
update_data = {"displayOrder": 101}
39+
40+
result = await async_parameter_group_parameters_service.update(
41+
async_created_parameter_group_parameter.id,
42+
update_data,
43+
)
44+
45+
assert result.id == async_created_parameter_group_parameter.id
46+
assert result.to_dict().get("displayOrder") == update_data["displayOrder"]
47+
48+
49+
async def test_delete_parameter_group_parameter(
50+
async_parameter_group_parameters_service, async_created_parameter_group_parameter
51+
):
52+
await async_parameter_group_parameters_service.delete(
53+
async_created_parameter_group_parameter.id
54+
) # act
55+
56+
57+
async def test_not_found(
58+
async_parameter_group_parameters_service, invalid_parameter_group_parameter_id
59+
):
60+
with pytest.raises(MPTAPIError):
61+
await async_parameter_group_parameters_service.get(invalid_parameter_group_parameter_id)
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import pytest
2+
3+
from mpt_api_client.exceptions import MPTAPIError
4+
5+
pytestmark = [
6+
pytest.mark.flaky,
7+
pytest.mark.skip(reason="Skipped per MPT-18373 request"),
8+
]
9+
10+
11+
def test_get_parameter_group_parameter(
12+
parameter_group_parameters_service, created_parameter_group_parameter
13+
):
14+
result = parameter_group_parameters_service.get(created_parameter_group_parameter.id)
15+
16+
assert result.id == created_parameter_group_parameter.id
17+
18+
19+
def test_list_parameter_group_parameters(
20+
parameter_group_parameters_service, created_parameter_group_parameter
21+
):
22+
result = parameter_group_parameters_service.fetch_page(limit=20)
23+
24+
assert any(parameter.id == created_parameter_group_parameter.id for parameter in result)
25+
26+
27+
def test_create_parameter_group_parameter(created_parameter_group_parameter):
28+
result = created_parameter_group_parameter
29+
30+
assert result is not None
31+
32+
33+
def test_update_parameter_group_parameter(
34+
parameter_group_parameters_service, created_parameter_group_parameter
35+
):
36+
update_data = {"displayOrder": 101}
37+
38+
result = parameter_group_parameters_service.update(
39+
created_parameter_group_parameter.id, update_data
40+
)
41+
42+
assert result.id == created_parameter_group_parameter.id
43+
assert result.to_dict().get("displayOrder") == update_data["displayOrder"]
44+
45+
46+
def test_delete_parameter_group_parameter(
47+
parameter_group_parameters_service, created_parameter_group_parameter
48+
):
49+
parameter_group_parameters_service.delete(created_parameter_group_parameter.id) # act
50+
51+
52+
def test_not_found(parameter_group_parameters_service, invalid_parameter_group_parameter_id):
53+
with pytest.raises(MPTAPIError):
54+
parameter_group_parameters_service.get(invalid_parameter_group_parameter_id)

0 commit comments

Comments
 (0)