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.parameter_groups import (
AsyncParameterGroupsService,
ParameterGroupsService,
)
from mpt_api_client.resources.helpdesk.parameters import (
AsyncParametersService,
ParametersService,
Expand Down Expand Up @@ -34,6 +38,11 @@ def parameters(self) -> ParametersService: # noqa: WPS110
"""Parameters service."""
return ParametersService(http_client=self.http_client)

@property
def parameter_groups(self) -> ParameterGroupsService:
"""Parameter groups service."""
return ParameterGroupsService(http_client=self.http_client)


class AsyncHelpdesk:
"""Async Helpdesk MPT API Module."""
Expand All @@ -60,3 +69,8 @@ def queues(self) -> AsyncQueuesService:
def parameters(self) -> AsyncParametersService: # noqa: WPS110
"""Async parameters service."""
return AsyncParametersService(http_client=self.http_client)

@property
def parameter_groups(self) -> AsyncParameterGroupsService:
"""Async parameter groups service."""
return AsyncParameterGroupsService(http_client=self.http_client)
38 changes: 38 additions & 0 deletions mpt_api_client/resources/helpdesk/parameter_group_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 ParameterGroupParameter(Model):
"""Helpdesk parameter group parameter resource."""


class ParameterGroupParametersServiceConfig:
"""Helpdesk parameter group parameters service configuration."""

_endpoint = "/public/v1/helpdesk/parameter-groups/{group_id}/parameters"
_model_class = ParameterGroupParameter
_collection_key = "data"


class ParameterGroupParametersService(
ManagedResourceMixin[ParameterGroupParameter],
CollectionMixin[ParameterGroupParameter],
Service[ParameterGroupParameter],
ParameterGroupParametersServiceConfig,
):
"""Helpdesk parameter group parameters service."""


class AsyncParameterGroupParametersService(
AsyncManagedResourceMixin[ParameterGroupParameter],
AsyncCollectionMixin[ParameterGroupParameter],
AsyncService[ParameterGroupParameter],
ParameterGroupParametersServiceConfig,
):
"""Async helpdesk parameter group parameters service."""
54 changes: 54 additions & 0 deletions mpt_api_client/resources/helpdesk/parameter_groups.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
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
from mpt_api_client.resources.helpdesk.parameter_group_parameters import (
AsyncParameterGroupParametersService,
ParameterGroupParametersService,
)


class ParameterGroup(Model):
"""Helpdesk parameter group resource."""


class ParameterGroupsServiceConfig:
"""Helpdesk parameter groups service configuration."""

_endpoint = "/public/v1/helpdesk/parameter-groups"
_model_class = ParameterGroup
_collection_key = "data"


class ParameterGroupsService(
ManagedResourceMixin[ParameterGroup],
CollectionMixin[ParameterGroup],
Service[ParameterGroup],
ParameterGroupsServiceConfig,
):
"""Helpdesk parameter groups service."""

def parameters(self, group_id: str) -> ParameterGroupParametersService: # noqa: WPS110
"""Return parameter group parameters service."""
return ParameterGroupParametersService(
http_client=self.http_client, endpoint_params={"group_id": group_id}
)


class AsyncParameterGroupsService(
AsyncManagedResourceMixin[ParameterGroup],
AsyncCollectionMixin[ParameterGroup],
AsyncService[ParameterGroup],
ParameterGroupsServiceConfig,
):
"""Async helpdesk parameter groups service."""

def parameters(self, group_id: str) -> AsyncParameterGroupParametersService: # noqa: WPS110
"""Return async parameter group parameters service."""
return AsyncParameterGroupParametersService(
http_client=self.http_client, endpoint_params={"group_id": group_id}
)
46 changes: 46 additions & 0 deletions tests/e2e/helpdesk/parameter_groups/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import pytest

from tests.e2e.helper import (
async_create_fixture_resource_and_delete,
create_fixture_resource_and_delete,
)


@pytest.fixture
def parameter_group_data(short_uuid):
return {
"name": f"E2E Helpdesk Parameter Group {short_uuid}",
"label": f"E2E Label {short_uuid}",
"description": "E2E Created Helpdesk Parameter Group",
}


@pytest.fixture
def invalid_parameter_group_id():
return "PGR-0000-0000"


@pytest.fixture
def parameter_groups_service(mpt_ops):
return mpt_ops.helpdesk.parameter_groups


@pytest.fixture
def async_parameter_groups_service(async_mpt_ops):
return async_mpt_ops.helpdesk.parameter_groups


@pytest.fixture
def created_parameter_group(parameter_groups_service, parameter_group_data):
with create_fixture_resource_and_delete(
parameter_groups_service, parameter_group_data
) as parameter_group:
yield parameter_group


@pytest.fixture
async def async_created_parameter_group(async_parameter_groups_service, parameter_group_data):
async with async_create_fixture_resource_and_delete(
async_parameter_groups_service, parameter_group_data
) as parameter_group:
yield parameter_group
91 changes: 91 additions & 0 deletions tests/e2e/helpdesk/parameter_groups/parameters/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
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 Group Parameter {short_uuid}",
"description": "E2E Created Helpdesk Group Parameter",
"scope": "Case",
"phase": "Request",
"type": "String",
"multiple": False,
"constraints": {
"required": False,
"readonly": False,
"hidden": False,
"visibility": "All",
},
}


@pytest.fixture
def created_parameter_definition(mpt_ops, parameter_data):
with create_fixture_resource_and_delete(
mpt_ops.helpdesk.parameters, parameter_data
) as parameter_definition:
yield parameter_definition


@pytest.fixture
async def async_created_parameter_definition(async_mpt_ops, parameter_data):
async with async_create_fixture_resource_and_delete(
async_mpt_ops.helpdesk.parameters, parameter_data
) as parameter_definition:
yield parameter_definition


@pytest.fixture
def parameter_group_parameters_service(mpt_ops, created_parameter_group):
return mpt_ops.helpdesk.parameter_groups.parameters(created_parameter_group.id)


@pytest.fixture
def parameter_group_parameter_data(created_parameter_definition):
return {
"parameterId": created_parameter_definition.id,
"displayOrder": 100,
}


@pytest.fixture
def created_parameter_group_parameter(
parameter_group_parameters_service, parameter_group_parameter_data
):
with create_fixture_resource_and_delete(
parameter_group_parameters_service, parameter_group_parameter_data
) as parameter_group_parameter:
yield parameter_group_parameter


@pytest.fixture
def invalid_parameter_group_parameter_id():
return "PAR-0000-0000"


@pytest.fixture
def async_parameter_group_parameters_service(async_mpt_ops, async_created_parameter_group):
return async_mpt_ops.helpdesk.parameter_groups.parameters(async_created_parameter_group.id)


@pytest.fixture
def async_parameter_group_parameter_data(async_created_parameter_definition):
return {
"parameterId": async_created_parameter_definition.id,
"displayOrder": 100,
}


@pytest.fixture
async def async_created_parameter_group_parameter(
async_parameter_group_parameters_service, async_parameter_group_parameter_data
):
async with async_create_fixture_resource_and_delete(
async_parameter_group_parameters_service, async_parameter_group_parameter_data
) as parameter_group_parameter:
yield parameter_group_parameter
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
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_group_parameter(
async_parameter_group_parameters_service, async_created_parameter_group_parameter
):
result = await async_parameter_group_parameters_service.get(
async_created_parameter_group_parameter.id
)

assert result.id == async_created_parameter_group_parameter.id


async def test_list_parameter_group_parameters(
async_parameter_group_parameters_service, async_created_parameter_group_parameter
):
result = await async_parameter_group_parameters_service.fetch_page(limit=20)

assert any(parameter.id == async_created_parameter_group_parameter.id for parameter in result)


def test_create_parameter_group_parameter(async_created_parameter_group_parameter):
result = async_created_parameter_group_parameter

assert result is not None


async def test_update_parameter_group_parameter(
async_parameter_group_parameters_service, async_created_parameter_group_parameter
):
update_data = {"displayOrder": 101}

result = await async_parameter_group_parameters_service.update(
async_created_parameter_group_parameter.id,
update_data,
)

assert result.id == async_created_parameter_group_parameter.id
assert result.to_dict().get("displayOrder") == update_data["displayOrder"]


async def test_delete_parameter_group_parameter(
async_parameter_group_parameters_service, async_created_parameter_group_parameter
):
await async_parameter_group_parameters_service.delete(
async_created_parameter_group_parameter.id
) # act


async def test_not_found(
async_parameter_group_parameters_service, invalid_parameter_group_parameter_id
):
with pytest.raises(MPTAPIError):
await async_parameter_group_parameters_service.get(invalid_parameter_group_parameter_id)
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
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_group_parameter(
parameter_group_parameters_service, created_parameter_group_parameter
):
result = parameter_group_parameters_service.get(created_parameter_group_parameter.id)

assert result.id == created_parameter_group_parameter.id


def test_list_parameter_group_parameters(
parameter_group_parameters_service, created_parameter_group_parameter
):
result = parameter_group_parameters_service.fetch_page(limit=20)

assert any(parameter.id == created_parameter_group_parameter.id for parameter in result)


def test_create_parameter_group_parameter(created_parameter_group_parameter):
result = created_parameter_group_parameter

assert result is not None


def test_update_parameter_group_parameter(
parameter_group_parameters_service, created_parameter_group_parameter
):
update_data = {"displayOrder": 101}

result = parameter_group_parameters_service.update(
created_parameter_group_parameter.id, update_data
)

assert result.id == created_parameter_group_parameter.id
assert result.to_dict().get("displayOrder") == update_data["displayOrder"]


def test_delete_parameter_group_parameter(
parameter_group_parameters_service, created_parameter_group_parameter
):
parameter_group_parameters_service.delete(created_parameter_group_parameter.id) # act


def test_not_found(parameter_group_parameters_service, invalid_parameter_group_parameter_id):
with pytest.raises(MPTAPIError):
parameter_group_parameters_service.get(invalid_parameter_group_parameter_id)
Loading
Loading