Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions mpt_api_client/resources/helpdesk/helpdesk.py
Original file line number Diff line number Diff line change
@@ -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


Expand All @@ -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."""
Expand All @@ -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)
38 changes: 38 additions & 0 deletions mpt_api_client/resources/helpdesk/parameters.py
Original file line number Diff line number Diff line change
@@ -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."""
Empty file.
45 changes: 45 additions & 0 deletions tests/e2e/helpdesk/parameters/conftest.py
Original file line number Diff line number Diff line change
@@ -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
44 changes: 44 additions & 0 deletions tests/e2e/helpdesk/parameters/test_async_parameters.py
Original file line number Diff line number Diff line change
@@ -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)
44 changes: 44 additions & 0 deletions tests/e2e/helpdesk/parameters/test_sync_parameters.py
Original file line number Diff line number Diff line change
@@ -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)
6 changes: 6 additions & 0 deletions tests/unit/resources/helpdesk/test_helpdesk.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand All @@ -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):
Expand All @@ -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):
Expand Down
42 changes: 42 additions & 0 deletions tests/unit/resources/helpdesk/test_parameters.py
Original file line number Diff line number Diff line change
@@ -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
Loading