diff --git a/mpt_api_client/resources/helpdesk/helpdesk.py b/mpt_api_client/resources/helpdesk/helpdesk.py index 3363962..fc7ff51 100644 --- a/mpt_api_client/resources/helpdesk/helpdesk.py +++ b/mpt_api_client/resources/helpdesk/helpdesk.py @@ -1,6 +1,10 @@ from mpt_api_client.http import AsyncHTTPClient, HTTPClient from mpt_api_client.resources.helpdesk.cases import AsyncCasesService, CasesService from mpt_api_client.resources.helpdesk.chats import AsyncChatsService, ChatsService +from mpt_api_client.resources.helpdesk.parameters import ( + AsyncParametersService, + ParametersService, +) from mpt_api_client.resources.helpdesk.queues import AsyncQueuesService, QueuesService @@ -25,6 +29,11 @@ def queues(self) -> QueuesService: """Queues service.""" return QueuesService(http_client=self.http_client) + @property + def parameters(self) -> ParametersService: # noqa: WPS110 + """Parameters service.""" + return ParametersService(http_client=self.http_client) + class AsyncHelpdesk: """Async Helpdesk MPT API Module.""" @@ -46,3 +55,8 @@ def cases(self) -> AsyncCasesService: def queues(self) -> AsyncQueuesService: """Async Queues service.""" return AsyncQueuesService(http_client=self.http_client) + + @property + def parameters(self) -> AsyncParametersService: # noqa: WPS110 + """Async parameters service.""" + return AsyncParametersService(http_client=self.http_client) diff --git a/mpt_api_client/resources/helpdesk/parameters.py b/mpt_api_client/resources/helpdesk/parameters.py new file mode 100644 index 0000000..4bbead4 --- /dev/null +++ b/mpt_api_client/resources/helpdesk/parameters.py @@ -0,0 +1,38 @@ +from mpt_api_client.http import AsyncService, Service +from mpt_api_client.http.mixins import ( + AsyncCollectionMixin, + AsyncManagedResourceMixin, + CollectionMixin, + ManagedResourceMixin, +) +from mpt_api_client.models import Model + + +class Parameter(Model): + """Helpdesk parameter definition resource.""" + + +class ParametersServiceConfig: + """Helpdesk parameters service configuration.""" + + _endpoint = "/public/v1/helpdesk/parameters" + _model_class = Parameter + _collection_key = "data" + + +class ParametersService( + ManagedResourceMixin[Parameter], + CollectionMixin[Parameter], + Service[Parameter], + ParametersServiceConfig, +): + """Helpdesk parameters service.""" + + +class AsyncParametersService( + AsyncManagedResourceMixin[Parameter], + AsyncCollectionMixin[Parameter], + AsyncService[Parameter], + ParametersServiceConfig, +): + """Async helpdesk parameters service.""" diff --git a/tests/e2e/helpdesk/parameters/__init__.py b/tests/e2e/helpdesk/parameters/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/e2e/helpdesk/parameters/conftest.py b/tests/e2e/helpdesk/parameters/conftest.py new file mode 100644 index 0000000..1dc3059 --- /dev/null +++ b/tests/e2e/helpdesk/parameters/conftest.py @@ -0,0 +1,45 @@ +import pytest + +from tests.e2e.helper import ( + async_create_fixture_resource_and_delete, + create_fixture_resource_and_delete, +) + + +@pytest.fixture +def parameter_data(short_uuid): + return { + "name": f"E2E Helpdesk Parameter {short_uuid}", + "description": "E2E Created Helpdesk Parameter", + "scope": "Case", + "phase": "Request", + "type": "String", + "multiple": False, + "constraints": { + "required": False, + "readonly": False, + "hidden": False, + "visibility": "All", + }, + } + + +@pytest.fixture +def invalid_parameter_id(): + return "PAR-0000-0000" + + +@pytest.fixture +def created_parameter(mpt_ops, parameter_data): + with create_fixture_resource_and_delete( + mpt_ops.helpdesk.parameters, parameter_data + ) as parameter: + yield parameter + + +@pytest.fixture +async def async_created_parameter(async_mpt_ops, parameter_data): + async with async_create_fixture_resource_and_delete( + async_mpt_ops.helpdesk.parameters, parameter_data + ) as parameter: + yield parameter diff --git a/tests/e2e/helpdesk/parameters/test_async_parameters.py b/tests/e2e/helpdesk/parameters/test_async_parameters.py new file mode 100644 index 0000000..0bbf4dd --- /dev/null +++ b/tests/e2e/helpdesk/parameters/test_async_parameters.py @@ -0,0 +1,44 @@ +import pytest + +from mpt_api_client.exceptions import MPTAPIError + +pytestmark = [ + pytest.mark.flaky, + pytest.mark.skip(reason="Skipped per MPT-18373 request"), +] + + +async def test_get_parameter(async_mpt_ops, async_created_parameter): + result = await async_mpt_ops.helpdesk.parameters.get(async_created_parameter.id) + + assert result.id == async_created_parameter.id + + +async def test_list_parameters(async_mpt_ops): + result = await async_mpt_ops.helpdesk.parameters.fetch_page(limit=1) + + assert len(result) > 0 + + +def test_create_parameter(async_created_parameter): + result = async_created_parameter + + assert result is not None + + +async def test_update_parameter(async_mpt_ops, async_created_parameter, short_uuid): + update_data = {"description": f"e2e update {short_uuid}"} + + result = await async_mpt_ops.helpdesk.parameters.update(async_created_parameter.id, update_data) + + assert result.id == async_created_parameter.id + assert result.to_dict().get("description") == update_data["description"] + + +async def test_delete_parameter(async_mpt_ops, async_created_parameter): + await async_mpt_ops.helpdesk.parameters.delete(async_created_parameter.id) # act + + +async def test_not_found(async_mpt_ops, invalid_parameter_id): + with pytest.raises(MPTAPIError): + await async_mpt_ops.helpdesk.parameters.get(invalid_parameter_id) diff --git a/tests/e2e/helpdesk/parameters/test_sync_parameters.py b/tests/e2e/helpdesk/parameters/test_sync_parameters.py new file mode 100644 index 0000000..aa857be --- /dev/null +++ b/tests/e2e/helpdesk/parameters/test_sync_parameters.py @@ -0,0 +1,44 @@ +import pytest + +from mpt_api_client.exceptions import MPTAPIError + +pytestmark = [ + pytest.mark.flaky, + pytest.mark.skip(reason="Skipped per MPT-18373 request"), +] + + +def test_get_parameter(mpt_ops, created_parameter): + result = mpt_ops.helpdesk.parameters.get(created_parameter.id) + + assert result.id == created_parameter.id + + +def test_list_parameters(mpt_ops): + result = mpt_ops.helpdesk.parameters.fetch_page(limit=1) + + assert len(result) > 0 + + +def test_create_parameter(created_parameter): + result = created_parameter + + assert result is not None + + +def test_update_parameter(mpt_ops, created_parameter, short_uuid): + update_data = {"description": f"e2e update {short_uuid}"} + + result = mpt_ops.helpdesk.parameters.update(created_parameter.id, update_data) + + assert result.id == created_parameter.id + assert result.to_dict().get("description") == update_data["description"] + + +def test_delete_parameter(mpt_ops, created_parameter): + mpt_ops.helpdesk.parameters.delete(created_parameter.id) # act + + +def test_not_found(mpt_ops, invalid_parameter_id): + with pytest.raises(MPTAPIError): + mpt_ops.helpdesk.parameters.get(invalid_parameter_id) diff --git a/tests/unit/resources/helpdesk/test_helpdesk.py b/tests/unit/resources/helpdesk/test_helpdesk.py index 10a2dab..a38680f 100644 --- a/tests/unit/resources/helpdesk/test_helpdesk.py +++ b/tests/unit/resources/helpdesk/test_helpdesk.py @@ -3,6 +3,10 @@ from mpt_api_client.resources.helpdesk import AsyncHelpdesk, Helpdesk from mpt_api_client.resources.helpdesk.cases import AsyncCasesService, CasesService from mpt_api_client.resources.helpdesk.chats import AsyncChatsService, ChatsService +from mpt_api_client.resources.helpdesk.parameters import ( + AsyncParametersService, + ParametersService, +) from mpt_api_client.resources.helpdesk.queues import AsyncQueuesService, QueuesService @@ -26,6 +30,7 @@ def test_async_helpdesk_init(async_http_client): ("chats", ChatsService), ("cases", CasesService), ("queues", QueuesService), + ("parameters", ParametersService), ], ) def test_helpdesk_properties(http_client, attr_name, expected): @@ -42,6 +47,7 @@ def test_helpdesk_properties(http_client, attr_name, expected): ("chats", AsyncChatsService), ("cases", AsyncCasesService), ("queues", AsyncQueuesService), + ("parameters", AsyncParametersService), ], ) def test_async_helpdesk_properties(async_http_client, attr_name, expected): diff --git a/tests/unit/resources/helpdesk/test_parameters.py b/tests/unit/resources/helpdesk/test_parameters.py new file mode 100644 index 0000000..113b619 --- /dev/null +++ b/tests/unit/resources/helpdesk/test_parameters.py @@ -0,0 +1,42 @@ +import pytest + +from mpt_api_client.resources.helpdesk.parameters import ( + AsyncParametersService, + ParametersService, +) + + +@pytest.fixture +def parameters_service(http_client): + return ParametersService(http_client=http_client) + + +@pytest.fixture +def async_parameters_service(async_http_client): + return AsyncParametersService(http_client=async_http_client) + + +def test_endpoint(parameters_service): + result = parameters_service.path == "/public/v1/helpdesk/parameters" + + assert result is True + + +def test_async_endpoint(async_parameters_service): + result = async_parameters_service.path == "/public/v1/helpdesk/parameters" + + assert result is True + + +@pytest.mark.parametrize("method", ["get", "create", "update", "delete", "fetch_page", "iterate"]) +def test_methods_present(parameters_service, method): + result = hasattr(parameters_service, method) + + assert result is True + + +@pytest.mark.parametrize("method", ["get", "create", "update", "delete", "fetch_page", "iterate"]) +def test_async_methods_present(async_parameters_service, method): + result = hasattr(async_parameters_service, method) + + assert result is True