Skip to content

Commit 0e3e348

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

File tree

8 files changed

+235
-0
lines changed

8 files changed

+235
-0
lines changed

mpt_api_client/resources/helpdesk/helpdesk.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
from mpt_api_client.resources.helpdesk.cases import AsyncCasesService, CasesService
33
from mpt_api_client.resources.helpdesk.chats import AsyncChatsService, ChatsService
44
from mpt_api_client.resources.helpdesk.queues import AsyncQueuesService, QueuesService
5+
from mpt_api_client.resources.helpdesk.parameters import (
6+
AsyncParametersService,
7+
ParametersService,
8+
)
59

610

711
class Helpdesk:
@@ -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: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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.models.model import BaseModel
10+
11+
12+
class Parameter(Model):
13+
"""Helpdesk parameter definition resource."""
14+
15+
16+
class ParametersServiceConfig:
17+
"""Helpdesk parameters service configuration."""
18+
19+
_endpoint = "/public/v1/helpdesk/parameters"
20+
_model_class = Parameter
21+
_collection_key = "data"
22+
23+
24+
class ParametersService(
25+
ManagedResourceMixin[Parameter],
26+
CollectionMixin[Parameter],
27+
Service[Parameter],
28+
ParametersServiceConfig,
29+
):
30+
"""Helpdesk parameters service."""
31+
32+
33+
class AsyncParametersService(
34+
AsyncManagedResourceMixin[Parameter],
35+
AsyncCollectionMixin[Parameter],
36+
AsyncService[Parameter],
37+
ParametersServiceConfig,
38+
):
39+
"""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
@@ -4,6 +4,10 @@
44
from mpt_api_client.resources.helpdesk.cases import AsyncCasesService, CasesService
55
from mpt_api_client.resources.helpdesk.chats import AsyncChatsService, ChatsService
66
from mpt_api_client.resources.helpdesk.queues import AsyncQueuesService, QueuesService
7+
from mpt_api_client.resources.helpdesk.parameters import (
8+
AsyncParametersService,
9+
ParametersService,
10+
)
711

812

913
def test_helpdesk_init(http_client):
@@ -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: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import pytest
2+
3+
from mpt_api_client.resources.helpdesk.parameters import (
4+
AsyncParametersService,
5+
Parameter,
6+
ParametersService,
7+
)
8+
9+
10+
@pytest.fixture
11+
def parameters_service(http_client):
12+
return ParametersService(http_client=http_client)
13+
14+
15+
@pytest.fixture
16+
def async_parameters_service(async_http_client):
17+
return AsyncParametersService(http_client=async_http_client)
18+
19+
20+
def test_endpoint(parameters_service):
21+
result = parameters_service.path == "/public/v1/helpdesk/parameters"
22+
23+
assert result is True
24+
25+
26+
def test_async_endpoint(async_parameters_service):
27+
result = async_parameters_service.path == "/public/v1/helpdesk/parameters"
28+
29+
assert result is True
30+
31+
32+
@pytest.mark.parametrize("method", ["get", "create", "update", "delete", "fetch_page", "iterate"])
33+
def test_methods_present(parameters_service, method):
34+
result = hasattr(parameters_service, method)
35+
36+
assert result is True
37+
38+
39+
@pytest.mark.parametrize("method", ["get", "create", "update", "delete", "fetch_page", "iterate"])
40+
def test_async_methods_present(async_parameters_service, method):
41+
result = hasattr(async_parameters_service, method)
42+
43+
assert result is True

0 commit comments

Comments
 (0)