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
3 changes: 2 additions & 1 deletion e2e_config.test.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,5 +67,6 @@
"notifications.category.id": "NTC-6157-0397",
"notifications.message.id": "MSG-0000-6215-1019-0139",
"notifications.subscriber.id": "NTS-0829-7123-7123",
"integration.extension.id": "EXT-6587-4477"
"integration.extension.id": "EXT-6587-4477",
"integration.term.id": "ETC-6587-4477-0062"
}
53 changes: 50 additions & 3 deletions mpt_api_client/resources/integration/extension_term_variants.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,52 @@
from mpt_api_client.http import AsyncService, Service
from mpt_api_client.http.mixins import (
AsyncCollectionMixin,
AsyncCreateFileMixin,
AsyncModifiableResourceMixin,
CollectionMixin,
CreateFileMixin,
ModifiableResourceMixin,
)
from mpt_api_client.models import Model
from mpt_api_client.models.model import BaseModel
from mpt_api_client.resources.integration.mixins import (
AsyncPublishableMixin,
PublishableMixin,
)


class ExtensionTermVariant(Model):
"""Extension Term Variant resource (stub)."""
"""Extension Term Variant resource.

Attributes:
name: Variant name.
revision: Revision number.
type: Variant type (Online or File).
asset_url: URL to the variant asset for Online type.
language_code: Language code for this variant.
description: Variant description.
status: Variant status (Draft, Published, Unpublished, Deleted).
filename: Original file name for File type.
size: File size in bytes for File type.
content_type: MIME content type of the file.
term: Reference to the parent term.
file_id: Identifier of the uploaded file.
audit: Audit information (created, updated, published, unpublished).
"""

name: str | None
revision: int | None
type: str | None
asset_url: str | None
language_code: str | None
description: str | None
status: str | None
filename: str | None
size: int | None
content_type: str | None
term: BaseModel | None
file_id: str | None
audit: BaseModel | None


class ExtensionTermVariantsServiceConfig:
Expand All @@ -16,19 +55,27 @@ class ExtensionTermVariantsServiceConfig:
_endpoint = "/public/v1/integration/extensions/{extension_id}/terms/{term_id}/variants"
_model_class = ExtensionTermVariant
_collection_key = "data"
_upload_file_key = "file"
_upload_data_key = "variant"


class ExtensionTermVariantsService(
PublishableMixin[ExtensionTermVariant],
CreateFileMixin[ExtensionTermVariant],
ModifiableResourceMixin[ExtensionTermVariant],
CollectionMixin[ExtensionTermVariant],
Service[ExtensionTermVariant],
ExtensionTermVariantsServiceConfig,
):
"""Sync service for extension term variants (stub)."""
"""Sync service for extensions/{extensionId}/terms/{termId}/variants endpoint."""


class AsyncExtensionTermVariantsService(
AsyncPublishableMixin[ExtensionTermVariant],
AsyncCreateFileMixin[ExtensionTermVariant],
AsyncModifiableResourceMixin[ExtensionTermVariant],
AsyncCollectionMixin[ExtensionTermVariant],
AsyncService[ExtensionTermVariant],
ExtensionTermVariantsServiceConfig,
):
"""Async service for extension term variants (stub)."""
"""Async service for extensions/{extensionId}/terms/{termId}/variants endpoint."""
Empty file.
58 changes: 58 additions & 0 deletions tests/e2e/integration/extension_term_variants/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import pytest

from mpt_api_client.exceptions import MPTAPIError


@pytest.fixture(scope="session")
def extension_id(e2e_config):
return e2e_config["integration.extension.id"]


@pytest.fixture(scope="session")
def term_id(e2e_config):
return e2e_config["integration.term.id"]


@pytest.fixture
def extension_term_variants_service(mpt_vendor, extension_id, term_id):
return mpt_vendor.integration.extensions.terms(extension_id).variants(term_id)


@pytest.fixture
def async_extension_term_variants_service(async_mpt_vendor, extension_id, term_id):
return async_mpt_vendor.integration.extensions.terms(extension_id).variants(term_id)


@pytest.fixture
def variant_data(short_uuid):
return {
"type": "File",
"assetUrl": "",
"languageCode": "en-US",
"name": f"e2e - please delete {short_uuid}",
"description": "Created by automated E2E tests. Safe to delete.",
}


@pytest.fixture
def created_variant(extension_term_variants_service, variant_data, pdf_fd):
variant = extension_term_variants_service.create(variant_data, file=pdf_fd)

yield variant

try:
extension_term_variants_service.delete(variant.id)
except MPTAPIError as error:
print(f"TEARDOWN - Unable to delete variant {variant.id}: {error.title}") # noqa: WPS421


@pytest.fixture
async def async_created_variant(async_extension_term_variants_service, variant_data, pdf_fd):
variant = await async_extension_term_variants_service.create(variant_data, file=pdf_fd)

yield variant

try:
await async_extension_term_variants_service.delete(variant.id)
except MPTAPIError as error:
print(f"TEARDOWN - Unable to delete variant {variant.id}: {error.title}") # noqa: WPS421
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import pytest

from tests.e2e.helper import assert_async_service_filter_with_iterate

pytestmark = [
pytest.mark.flaky,
]


def test_create_extension_term_variant(async_created_variant, variant_data):
result = async_created_variant.name

assert result == variant_data["name"]


async def test_filter_extension_term_variants(
async_extension_term_variants_service, async_created_variant
):
await assert_async_service_filter_with_iterate(
async_extension_term_variants_service, async_created_variant.id, None
) # act


async def test_update_extension_term_variant(
async_extension_term_variants_service, async_created_variant, short_uuid
):
update_data = {"name": f"e2e updated {short_uuid}"}

result = await async_extension_term_variants_service.update(
async_created_variant.id, update_data
)

assert result.name == update_data["name"]


async def test_publish_extension_term_variant(
async_extension_term_variants_service, async_created_variant
):
result = await async_extension_term_variants_service.publish(async_created_variant.id)

assert result.status == "Published"


async def test_unpublish_extension_term_variant(
async_extension_term_variants_service, async_created_variant
):
await async_extension_term_variants_service.publish(async_created_variant.id)

result = await async_extension_term_variants_service.unpublish(async_created_variant.id)

assert result.status == "Unpublished"


async def test_delete_extension_term_variant(
async_extension_term_variants_service, async_created_variant
):
await async_extension_term_variants_service.delete(async_created_variant.id) # act
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import pytest

from tests.e2e.helper import assert_service_filter_with_iterate

pytestmark = [
pytest.mark.flaky,
]


def test_create_extension_term_variant(created_variant, variant_data):
result = created_variant.name

assert result == variant_data["name"]


def test_filter_extension_term_variants(extension_term_variants_service, created_variant):
assert_service_filter_with_iterate(
extension_term_variants_service, created_variant.id, None
) # act


def test_update_extension_term_variant(
extension_term_variants_service, created_variant, short_uuid
):
update_data = {"name": f"e2e updated {short_uuid}"}

result = extension_term_variants_service.update(created_variant.id, update_data)

assert result.name == update_data["name"]


def test_publish_extension_term_variant(extension_term_variants_service, created_variant):
result = extension_term_variants_service.publish(created_variant.id)

assert result.status == "Published"


def test_unpublish_extension_term_variant(extension_term_variants_service, created_variant):
extension_term_variants_service.publish(created_variant.id)

result = extension_term_variants_service.unpublish(created_variant.id)

assert result.status == "Unpublished"


def test_delete_extension_term_variant(extension_term_variants_service, created_variant):
extension_term_variants_service.delete(created_variant.id) # act
Loading