Skip to content

Commit bc1fcec

Browse files
committed
feat: add helpdesk parameter definition api and tests
1 parent a34159c commit bc1fcec

File tree

8 files changed

+233
-0
lines changed

8 files changed

+233
-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.parameters import (
5+
AsyncParametersService,
6+
ParametersService,
7+
)
48
from mpt_api_client.resources.helpdesk.queues import AsyncQueuesService, QueuesService
59

610

@@ -25,6 +29,11 @@ def queues(self) -> QueuesService:
2529
"""Queues service."""
2630
return QueuesService(http_client=self.http_client)
2731

32+
@property
33+
def parameters(self) -> ParametersService: # noqa: WPS110
34+
"""Parameters service."""
35+
return ParametersService(http_client=self.http_client)
36+
2837

2938
class AsyncHelpdesk:
3039
"""Async Helpdesk MPT API Module."""
@@ -46,3 +55,8 @@ def cases(self) -> AsyncCasesService:
4655
def queues(self) -> AsyncQueuesService:
4756
"""Async Queues service."""
4857
return AsyncQueuesService(http_client=self.http_client)
58+
59+
@property
60+
def parameters(self) -> AsyncParametersService: # noqa: WPS110
61+
"""Async parameters service."""
62+
return AsyncParametersService(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 Parameter(Model):
12+
"""Helpdesk parameter definition resource."""
13+
14+
15+
class ParametersServiceConfig:
16+
"""Helpdesk parameters service configuration."""
17+
18+
_endpoint = "/public/v1/helpdesk/parameters"
19+
_model_class = Parameter
20+
_collection_key = "data"
21+
22+
23+
class ParametersService(
24+
ManagedResourceMixin[Parameter],
25+
CollectionMixin[Parameter],
26+
Service[Parameter],
27+
ParametersServiceConfig,
28+
):
29+
"""Helpdesk parameters service."""
30+
31+
32+
class AsyncParametersService(
33+
AsyncManagedResourceMixin[Parameter],
34+
AsyncCollectionMixin[Parameter],
35+
AsyncService[Parameter],
36+
ParametersServiceConfig,
37+
):
38+
"""Async helpdesk parameters service."""

tests/e2e/helpdesk/parameters/__init__.py

Whitespace-only changes.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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 Parameter {short_uuid}",
13+
"description": "E2E Created Helpdesk 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 invalid_parameter_id():
29+
return "PAR-0000-0000"
30+
31+
32+
@pytest.fixture
33+
def created_parameter(mpt_ops, parameter_data):
34+
with create_fixture_resource_and_delete(
35+
mpt_ops.helpdesk.parameters, parameter_data
36+
) as parameter:
37+
yield parameter
38+
39+
40+
@pytest.fixture
41+
async def async_created_parameter(async_mpt_ops, parameter_data):
42+
async with async_create_fixture_resource_and_delete(
43+
async_mpt_ops.helpdesk.parameters, parameter_data
44+
) as parameter:
45+
yield parameter
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
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(async_mpt_ops, async_created_parameter):
12+
result = await async_mpt_ops.helpdesk.parameters.get(async_created_parameter.id)
13+
14+
assert result.id == async_created_parameter.id
15+
16+
17+
async def test_list_parameters(async_mpt_ops):
18+
result = await async_mpt_ops.helpdesk.parameters.fetch_page(limit=1)
19+
20+
assert len(result) > 0
21+
22+
23+
def test_create_parameter(async_created_parameter):
24+
result = async_created_parameter
25+
26+
assert result is not None
27+
28+
29+
async def test_update_parameter(async_mpt_ops, async_created_parameter, short_uuid):
30+
update_data = {"description": f"e2e update {short_uuid}"}
31+
32+
result = await async_mpt_ops.helpdesk.parameters.update(async_created_parameter.id, update_data)
33+
34+
assert result.id == async_created_parameter.id
35+
assert result.to_dict().get("description") == update_data["description"]
36+
37+
38+
async def test_delete_parameter(async_mpt_ops, async_created_parameter):
39+
await async_mpt_ops.helpdesk.parameters.delete(async_created_parameter.id) # act
40+
41+
42+
async def test_not_found(async_mpt_ops, invalid_parameter_id):
43+
with pytest.raises(MPTAPIError):
44+
await async_mpt_ops.helpdesk.parameters.get(invalid_parameter_id)
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
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(mpt_ops, created_parameter):
12+
result = mpt_ops.helpdesk.parameters.get(created_parameter.id)
13+
14+
assert result.id == created_parameter.id
15+
16+
17+
def test_list_parameters(mpt_ops):
18+
result = mpt_ops.helpdesk.parameters.fetch_page(limit=1)
19+
20+
assert len(result) > 0
21+
22+
23+
def test_create_parameter(created_parameter):
24+
result = created_parameter
25+
26+
assert result is not None
27+
28+
29+
def test_update_parameter(mpt_ops, created_parameter, short_uuid):
30+
update_data = {"description": f"e2e update {short_uuid}"}
31+
32+
result = mpt_ops.helpdesk.parameters.update(created_parameter.id, update_data)
33+
34+
assert result.id == created_parameter.id
35+
assert result.to_dict().get("description") == update_data["description"]
36+
37+
38+
def test_delete_parameter(mpt_ops, created_parameter):
39+
mpt_ops.helpdesk.parameters.delete(created_parameter.id) # act
40+
41+
42+
def test_not_found(mpt_ops, invalid_parameter_id):
43+
with pytest.raises(MPTAPIError):
44+
mpt_ops.helpdesk.parameters.get(invalid_parameter_id)

tests/unit/resources/helpdesk/test_helpdesk.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
from mpt_api_client.resources.helpdesk import AsyncHelpdesk, Helpdesk
44
from mpt_api_client.resources.helpdesk.cases import AsyncCasesService, CasesService
55
from mpt_api_client.resources.helpdesk.chats import AsyncChatsService, ChatsService
6+
from mpt_api_client.resources.helpdesk.parameters import (
7+
AsyncParametersService,
8+
ParametersService,
9+
)
610
from mpt_api_client.resources.helpdesk.queues import AsyncQueuesService, QueuesService
711

812

@@ -26,6 +30,7 @@ def test_async_helpdesk_init(async_http_client):
2630
("chats", ChatsService),
2731
("cases", CasesService),
2832
("queues", QueuesService),
33+
("parameters", ParametersService),
2934
],
3035
)
3136
def test_helpdesk_properties(http_client, attr_name, expected):
@@ -42,6 +47,7 @@ def test_helpdesk_properties(http_client, attr_name, expected):
4247
("chats", AsyncChatsService),
4348
("cases", AsyncCasesService),
4449
("queues", AsyncQueuesService),
50+
("parameters", AsyncParametersService),
4551
],
4652
)
4753
def test_async_helpdesk_properties(async_http_client, attr_name, expected):
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import pytest
2+
3+
from mpt_api_client.resources.helpdesk.parameters import (
4+
AsyncParametersService,
5+
ParametersService,
6+
)
7+
8+
9+
@pytest.fixture
10+
def parameters_service(http_client):
11+
return ParametersService(http_client=http_client)
12+
13+
14+
@pytest.fixture
15+
def async_parameters_service(async_http_client):
16+
return AsyncParametersService(http_client=async_http_client)
17+
18+
19+
def test_endpoint(parameters_service):
20+
result = parameters_service.path == "/public/v1/helpdesk/parameters"
21+
22+
assert result is True
23+
24+
25+
def test_async_endpoint(async_parameters_service):
26+
result = async_parameters_service.path == "/public/v1/helpdesk/parameters"
27+
28+
assert result is True
29+
30+
31+
@pytest.mark.parametrize("method", ["get", "create", "update", "delete", "fetch_page", "iterate"])
32+
def test_methods_present(parameters_service, method):
33+
result = hasattr(parameters_service, method)
34+
35+
assert result is True
36+
37+
38+
@pytest.mark.parametrize("method", ["get", "create", "update", "delete", "fetch_page", "iterate"])
39+
def test_async_methods_present(async_parameters_service, method):
40+
result = hasattr(async_parameters_service, method)
41+
42+
assert result is True

0 commit comments

Comments
 (0)