diff --git a/e2e_config.test.json b/e2e_config.test.json index d947efc9..5a47d855 100644 --- a/e2e_config.test.json +++ b/e2e_config.test.json @@ -66,5 +66,6 @@ "notifications.batch.id": "MST-3638-2460-4825", "notifications.category.id": "NTC-6157-0397", "notifications.message.id": "MSG-0000-6215-1019-0139", - "notifications.subscriber.id": "NTS-0829-7123-7123" + "notifications.subscriber.id": "NTS-0829-7123-7123", + "integration.extension.id": "EXT-4401-0953" } diff --git a/mpt_api_client/mpt_client.py b/mpt_api_client/mpt_client.py index 8eb2c3ee..b5ebc258 100644 --- a/mpt_api_client/mpt_client.py +++ b/mpt_api_client/mpt_client.py @@ -9,16 +9,16 @@ AsyncCatalog, AsyncCommerce, AsyncExchange, - AsyncExtensibility, AsyncHelpdesk, + AsyncIntegration, AsyncNotifications, Audit, Billing, Catalog, Commerce, Exchange, - Extensibility, Helpdesk, + Integration, Notifications, ) @@ -93,9 +93,9 @@ def exchange(self) -> AsyncExchange: return AsyncExchange(http_client=self.http_client) @property - def extensibility(self) -> AsyncExtensibility: - """Extensibility MPT API Client.""" - return AsyncExtensibility(http_client=self.http_client) + def integration(self) -> AsyncIntegration: + """Integration MPT API Client.""" + return AsyncIntegration(http_client=self.http_client) class MPTClient: @@ -173,6 +173,6 @@ def exchange(self) -> Exchange: return Exchange(http_client=self.http_client) @property - def extensibility(self) -> Extensibility: - """Extensibility MPT API Client.""" - return Extensibility(http_client=self.http_client) + def integration(self) -> Integration: + """Integration MPT API Client.""" + return Integration(http_client=self.http_client) diff --git a/mpt_api_client/resources/__init__.py b/mpt_api_client/resources/__init__.py index 7022837f..76daeb78 100644 --- a/mpt_api_client/resources/__init__.py +++ b/mpt_api_client/resources/__init__.py @@ -4,8 +4,8 @@ from mpt_api_client.resources.catalog import AsyncCatalog, Catalog from mpt_api_client.resources.commerce import AsyncCommerce, Commerce from mpt_api_client.resources.exchange import AsyncExchange, Exchange -from mpt_api_client.resources.extensibility import AsyncExtensibility, Extensibility from mpt_api_client.resources.helpdesk import AsyncHelpdesk, Helpdesk +from mpt_api_client.resources.integration import AsyncIntegration, Integration from mpt_api_client.resources.notifications import AsyncNotifications, Notifications __all__ = [ # noqa: WPS410 @@ -16,15 +16,15 @@ "AsyncCatalog", "AsyncCommerce", "AsyncExchange", - "AsyncExtensibility", "AsyncHelpdesk", + "AsyncIntegration", "AsyncNotifications", "Audit", "Billing", "Catalog", "Commerce", "Exchange", - "Extensibility", "Helpdesk", + "Integration", "Notifications", ] diff --git a/mpt_api_client/resources/extensibility/__init__.py b/mpt_api_client/resources/extensibility/__init__.py deleted file mode 100644 index 68c837fa..00000000 --- a/mpt_api_client/resources/extensibility/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -from mpt_api_client.resources.extensibility.extensibility import ( - AsyncExtensibility, - Extensibility, -) - -__all__ = [ # noqa: WPS410 - "AsyncExtensibility", - "Extensibility", -] diff --git a/mpt_api_client/resources/integration/__init__.py b/mpt_api_client/resources/integration/__init__.py new file mode 100644 index 00000000..76e3031e --- /dev/null +++ b/mpt_api_client/resources/integration/__init__.py @@ -0,0 +1,9 @@ +from mpt_api_client.resources.integration.integration import ( + AsyncIntegration, + Integration, +) + +__all__ = [ # noqa: WPS410 + "AsyncIntegration", + "Integration", +] diff --git a/mpt_api_client/resources/extensibility/extensions.py b/mpt_api_client/resources/integration/extensions.py similarity index 90% rename from mpt_api_client/resources/extensibility/extensions.py rename to mpt_api_client/resources/integration/extensions.py index b6c9b1d8..4636d717 100644 --- a/mpt_api_client/resources/extensibility/extensions.py +++ b/mpt_api_client/resources/integration/extensions.py @@ -13,7 +13,7 @@ ) from mpt_api_client.models import Model from mpt_api_client.models.model import BaseModel -from mpt_api_client.resources.extensibility.mixins import ( +from mpt_api_client.resources.integration.mixins import ( AsyncExtensionMixin, ExtensionMixin, ) @@ -60,7 +60,7 @@ class Extension(Model): class ExtensionsServiceConfig: """Extensions service configuration.""" - _endpoint = "/public/v1/extensibility/extensions" + _endpoint = "/public/v1/integration/extensions" _model_class = Extension _collection_key = "data" _upload_file_key = "icon" @@ -77,7 +77,7 @@ class ExtensionsService( Service[Extension], ExtensionsServiceConfig, ): - """Sync service for the /public/v1/extensibility/extensions endpoint.""" + """Sync service for the /public/v1/integration/extensions endpoint.""" class AsyncExtensionsService( @@ -90,4 +90,4 @@ class AsyncExtensionsService( AsyncService[Extension], ExtensionsServiceConfig, ): - """Async service for the /public/v1/extensibility/extensions endpoint.""" + """Async service for the /public/v1/integration/extensions endpoint.""" diff --git a/mpt_api_client/resources/extensibility/extensibility.py b/mpt_api_client/resources/integration/integration.py similarity index 76% rename from mpt_api_client/resources/extensibility/extensibility.py rename to mpt_api_client/resources/integration/integration.py index d23faf0b..5abd952a 100644 --- a/mpt_api_client/resources/extensibility/extensibility.py +++ b/mpt_api_client/resources/integration/integration.py @@ -1,12 +1,12 @@ from mpt_api_client.http import AsyncHTTPClient, HTTPClient -from mpt_api_client.resources.extensibility.extensions import ( +from mpt_api_client.resources.integration.extensions import ( AsyncExtensionsService, ExtensionsService, ) -class Extensibility: - """Extensibility MPT API Module.""" +class Integration: + """Integration MPT API Module.""" def __init__(self, *, http_client: HTTPClient): self.http_client = http_client @@ -17,8 +17,8 @@ def extensions(self) -> ExtensionsService: return ExtensionsService(http_client=self.http_client) -class AsyncExtensibility: - """Async Extensibility MPT API Module.""" +class AsyncIntegration: + """Async Integration MPT API Module.""" def __init__(self, *, http_client: AsyncHTTPClient): self.http_client = http_client diff --git a/mpt_api_client/resources/extensibility/mixins/__init__.py b/mpt_api_client/resources/integration/mixins/__init__.py similarity index 62% rename from mpt_api_client/resources/extensibility/mixins/__init__.py rename to mpt_api_client/resources/integration/mixins/__init__.py index dc6e031a..8e0ba997 100644 --- a/mpt_api_client/resources/extensibility/mixins/__init__.py +++ b/mpt_api_client/resources/integration/mixins/__init__.py @@ -1,4 +1,4 @@ -from mpt_api_client.resources.extensibility.mixins.extension_mixin import ( +from mpt_api_client.resources.integration.mixins.extension_mixin import ( AsyncExtensionMixin, ExtensionMixin, ) diff --git a/mpt_api_client/resources/extensibility/mixins/extension_mixin.py b/mpt_api_client/resources/integration/mixins/extension_mixin.py similarity index 100% rename from mpt_api_client/resources/extensibility/mixins/extension_mixin.py rename to mpt_api_client/resources/integration/mixins/extension_mixin.py diff --git a/pyproject.toml b/pyproject.toml index fe2562a1..7ccab9bd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -123,7 +123,7 @@ per-file-ignores = [ "mpt_api_client/resources/catalog/products.py: WPS204 WPS214 WPS215 WPS235", "mpt_api_client/resources/commerce/*.py: WPS235 WPS215", "mpt_api_client/resources/exchange/*.py: WPS235 WPS215", - "mpt_api_client/resources/extensibility/*.py: WPS214 WPS215 WPS235", + "mpt_api_client/resources/integration/*.py: WPS214 WPS215 WPS235", "mpt_api_client/resources/helpdesk/*.py: WPS204 WPS215 WPS214", "mpt_api_client/rql/query_builder.py: WPS110 WPS115 WPS210 WPS214", "tests/e2e/accounts/*.py: WPS430 WPS202", @@ -143,7 +143,10 @@ per-file-ignores = [ "tests/unit/http/mixins/*: WPS204 WPS202 WPS210", "tests/unit/resources/accounts/*.py: WPS204 WPS202 WPS210", "tests/unit/resources/catalog/test_products.py: WPS202 WPS210", - "tests/unit/resources/extensibility/*.py: WPS202 WPS210 WPS218", + "tests/e2e/integration/*.py: WPS453", + "tests/e2e/integration/extensions/*.py: WPS453 WPS202", + "tests/unit/resources/integration/*.py: WPS202 WPS210 WPS218 WPS453", + "tests/unit/resources/integration/mixins/*.py: WPS453 WPS202", "tests/unit/resources/commerce/*.py: WPS202 WPS204", "tests/unit/test_mpt_client.py: WPS235", "tests/*: WPS432 WPS202", diff --git a/tests/unit/resources/extensibility/__init__.py b/tests/e2e/integration/__init__.py similarity index 100% rename from tests/unit/resources/extensibility/__init__.py rename to tests/e2e/integration/__init__.py diff --git a/tests/unit/resources/extensibility/mixins/__init__.py b/tests/e2e/integration/extensions/__init__.py similarity index 100% rename from tests/unit/resources/extensibility/mixins/__init__.py rename to tests/e2e/integration/extensions/__init__.py diff --git a/tests/e2e/integration/extensions/conftest.py b/tests/e2e/integration/extensions/conftest.py new file mode 100644 index 00000000..b05eeaa8 --- /dev/null +++ b/tests/e2e/integration/extensions/conftest.py @@ -0,0 +1,52 @@ +import pytest + +from mpt_api_client.exceptions import MPTAPIError + + +@pytest.fixture +def extensions_service(mpt_ops): + return mpt_ops.integration.extensions + + +@pytest.fixture +def async_extensions_service(async_mpt_ops): + return async_mpt_ops.integration.extensions + + +@pytest.fixture(scope="session") +def extension_id(e2e_config): + return e2e_config["integration.extension.id"] + + +@pytest.fixture +def extension_data(short_uuid): + return { + "name": f"e2e - please delete {short_uuid}", + "shortDescription": f"E2E test extension {short_uuid}", + "longDescription": "Created by automated E2E tests. Safe to delete.", + "website": "https://example.com", + } + + +@pytest.fixture +def created_extension(extensions_service, extension_data, logo_fd): + extension = extensions_service.create(extension_data, file=logo_fd) + + yield extension + + try: + extensions_service.delete(extension.id) + except MPTAPIError as error: + print(f"TEARDOWN - Unable to delete extension {extension.id}: {error.title}") # noqa: WPS421 + + +@pytest.fixture +async def async_created_extension(async_extensions_service, extension_data, logo_fd): + extension = await async_extensions_service.create(extension_data, file=logo_fd) + + yield extension + + try: + await async_extensions_service.delete(extension.id) + except MPTAPIError as error: + print(f"TEARDOWN - Unable to delete extension {extension.id}: {error.title}") # noqa: WPS421 diff --git a/tests/e2e/integration/extensions/test_async_extensions.py b/tests/e2e/integration/extensions/test_async_extensions.py new file mode 100644 index 00000000..6531621c --- /dev/null +++ b/tests/e2e/integration/extensions/test_async_extensions.py @@ -0,0 +1,74 @@ +import pytest + +from mpt_api_client.exceptions import MPTAPIError +from mpt_api_client.models import FileModel +from tests.e2e.helper import assert_async_service_filter_with_iterate + +pytestmark = [pytest.mark.flaky] + + +@pytest.mark.skip(reason="unable to create extensions for testing") +def test_create_extension(async_created_extension, extension_data): + result = async_created_extension.name + + assert result == extension_data["name"] + + +async def test_get_extension(async_extensions_service, extension_id): + result = await async_extensions_service.get(extension_id) + + assert result.id == extension_id + + +async def test_get_extension_not_found(async_extensions_service): + bogus_id = "EXT-0000-0000" + + with pytest.raises(MPTAPIError, match=r"404 Not Found"): + await async_extensions_service.get(bogus_id) + + +@pytest.mark.skip(reason="unable to create extensions for testing") +async def test_update_extension( + async_extensions_service, async_created_extension, logo_fd, short_uuid +): + update_data = {"name": f"e2e - please delete {short_uuid}"} + + result = await async_extensions_service.update( + async_created_extension.id, update_data, file=logo_fd + ) + + assert result.name == update_data["name"] + + +@pytest.mark.skip(reason="unable to create extensions for testing") +async def test_delete_extension(async_extensions_service, async_created_extension): + await async_extensions_service.delete(async_created_extension.id) # act + + +async def test_filter_extensions(async_extensions_service, extension_id): + await assert_async_service_filter_with_iterate( + async_extensions_service, extension_id, None + ) # act + + +@pytest.mark.skip(reason="unable to create extensions for testing") +async def test_download_icon(async_extensions_service, async_created_extension): + result = await async_extensions_service.download_icon(async_created_extension.id) + + assert isinstance(result, FileModel) + + +@pytest.mark.skip(reason="unable to create extensions for testing") +async def test_publish_extension(async_extensions_service, async_created_extension): + result = await async_extensions_service.publish(async_created_extension.id) + + assert result.status == "Public" + + +@pytest.mark.skip(reason="unable to create extensions for testing") +async def test_unpublish_extension(async_extensions_service, async_created_extension): + await async_extensions_service.publish(async_created_extension.id) + + result = await async_extensions_service.unpublish(async_created_extension.id) + + assert result.status == "Private" diff --git a/tests/e2e/integration/extensions/test_sync_extensions.py b/tests/e2e/integration/extensions/test_sync_extensions.py new file mode 100644 index 00000000..3a91049f --- /dev/null +++ b/tests/e2e/integration/extensions/test_sync_extensions.py @@ -0,0 +1,70 @@ +import pytest + +from mpt_api_client.exceptions import MPTAPIError +from mpt_api_client.models import FileModel +from tests.e2e.helper import assert_service_filter_with_iterate + +pytestmark = [ + pytest.mark.flaky, +] + + +@pytest.mark.skip(reason="unable to create extensions for testing") +def test_create_extension(created_extension, extension_data): + result = created_extension.name + + assert result == extension_data["name"] + + +def test_get_extension(extensions_service, extension_id): + result = extensions_service.get(extension_id) + + assert result.id == extension_id + + +def test_get_extension_not_found(extensions_service): + bogus_id = "EXT-0000-0000" + + with pytest.raises(MPTAPIError, match=r"404 Not Found"): + extensions_service.get(bogus_id) + + +@pytest.mark.skip(reason="unable to create extensions for testing") +def test_update_extension(extensions_service, created_extension, logo_fd, short_uuid): + update_data = {"name": f"e2e - please delete {short_uuid}"} + + result = extensions_service.update(created_extension.id, update_data, file=logo_fd) + + assert result.name == update_data["name"] + + +@pytest.mark.skip(reason="unable to create extensions for testing") +def test_delete_extension(extensions_service, created_extension): + extensions_service.delete(created_extension.id) # act + + +def test_filter_extensions(extensions_service, extension_id): + assert_service_filter_with_iterate(extensions_service, extension_id, None) # act + + +@pytest.mark.skip(reason="unable to create extensions for testing") +def test_download_icon(extensions_service, created_extension): + result = extensions_service.download_icon(created_extension.id) + + assert isinstance(result, FileModel) + + +@pytest.mark.skip(reason="unable to create extensions for testing") +def test_publish_extension(extensions_service, created_extension): + result = extensions_service.publish(created_extension.id) + + assert result.status == "Public" + + +@pytest.mark.skip(reason="unable to create extensions for testing") +def test_unpublish_extension(extensions_service, created_extension): + extensions_service.publish(created_extension.id) + + result = extensions_service.unpublish(created_extension.id) + + assert result.status == "Private" diff --git a/tests/unit/resources/extensibility/test_extensibility.py b/tests/unit/resources/extensibility/test_extensibility.py deleted file mode 100644 index 2833ccaf..00000000 --- a/tests/unit/resources/extensibility/test_extensibility.py +++ /dev/null @@ -1,60 +0,0 @@ -import pytest - -from mpt_api_client.resources.extensibility.extensibility import ( - AsyncExtensibility, - Extensibility, -) -from mpt_api_client.resources.extensibility.extensions import ( - AsyncExtensionsService, - ExtensionsService, -) - - -@pytest.fixture -def extensibility(http_client): - return Extensibility(http_client=http_client) - - -@pytest.fixture -def async_extensibility(async_http_client): - return AsyncExtensibility(http_client=async_http_client) - - -def test_extensibility_initialization(http_client): - result = Extensibility(http_client=http_client) - - assert result.http_client is http_client - assert isinstance(result, Extensibility) - - -def test_async_extensibility_initialization(async_http_client): - result = AsyncExtensibility(http_client=async_http_client) - - assert result.http_client is async_http_client - assert isinstance(result, AsyncExtensibility) - - -@pytest.mark.parametrize( - ("property_name", "expected_service_class"), - [ - ("extensions", ExtensionsService), - ], -) -def test_extensibility_properties(extensibility, property_name, expected_service_class): - result = getattr(extensibility, property_name) - - assert isinstance(result, expected_service_class) - assert result.http_client is extensibility.http_client - - -@pytest.mark.parametrize( - ("property_name", "expected_service_class"), - [ - ("extensions", AsyncExtensionsService), - ], -) -def test_async_extensibility_properties(async_extensibility, property_name, expected_service_class): - result = getattr(async_extensibility, property_name) - - assert isinstance(result, expected_service_class) - assert result.http_client is async_extensibility.http_client diff --git a/tests/unit/resources/integration/__init__.py b/tests/unit/resources/integration/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/resources/integration/conftest.py b/tests/unit/resources/integration/conftest.py new file mode 100644 index 00000000..e91c8ea3 --- /dev/null +++ b/tests/unit/resources/integration/conftest.py @@ -0,0 +1,16 @@ +import pytest + +from mpt_api_client.resources.integration.integration import ( + AsyncIntegration, + Integration, +) + + +@pytest.fixture +def integration(http_client): + return Integration(http_client=http_client) + + +@pytest.fixture +def async_integration(async_http_client): + return AsyncIntegration(http_client=async_http_client) diff --git a/tests/unit/resources/integration/mixins/__init__.py b/tests/unit/resources/integration/mixins/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/resources/extensibility/mixins/test_extension_mixin.py b/tests/unit/resources/integration/mixins/test_extension_mixin.py similarity index 87% rename from tests/unit/resources/extensibility/mixins/test_extension_mixin.py rename to tests/unit/resources/integration/mixins/test_extension_mixin.py index 9904a05c..33109880 100644 --- a/tests/unit/resources/extensibility/mixins/test_extension_mixin.py +++ b/tests/unit/resources/integration/mixins/test_extension_mixin.py @@ -5,7 +5,7 @@ from mpt_api_client.http.async_service import AsyncService from mpt_api_client.http.service import Service from mpt_api_client.models import FileModel -from mpt_api_client.resources.extensibility.mixins import ( +from mpt_api_client.resources.integration.mixins import ( AsyncExtensionMixin, ExtensionMixin, ) @@ -16,7 +16,7 @@ class DummyExtensionService( ExtensionMixin[DummyModel], Service[DummyModel], ): - _endpoint = "/public/v1/extensibility/extensions" + _endpoint = "/public/v1/integration/extensions" _model_class = DummyModel _collection_key = "data" @@ -25,7 +25,7 @@ class DummyAsyncExtensionService( AsyncExtensionMixin[DummyModel], AsyncService[DummyModel], ): - _endpoint = "/public/v1/extensibility/extensions" + _endpoint = "/public/v1/integration/extensions" _model_class = DummyModel _collection_key = "data" @@ -49,7 +49,7 @@ def test_post_actions(extension_service, action): expected_response = {"id": extension_id, "status": "updated"} with respx.mock: mock_route = respx.post( - f"https://api.example.com/public/v1/extensibility/extensions/{extension_id}/{action}" + f"https://api.example.com/public/v1/integration/extensions/{extension_id}/{action}" ).mock( return_value=httpx.Response( status_code=httpx.codes.OK, @@ -71,7 +71,7 @@ def test_download_icon(extension_service): icon_bytes = b"\x89PNG\r\n\x1a\n" with respx.mock: mock_route = respx.get( - f"https://api.example.com/public/v1/extensibility/extensions/{extension_id}/icon" + f"https://api.example.com/public/v1/integration/extensions/{extension_id}/icon" ).mock( return_value=httpx.Response( status_code=httpx.codes.OK, @@ -97,7 +97,7 @@ async def test_async_post_actions(async_extension_service, action): expected_response = {"id": extension_id, "status": "updated"} with respx.mock: mock_route = respx.post( - f"https://api.example.com/public/v1/extensibility/extensions/{extension_id}/{action}" + f"https://api.example.com/public/v1/integration/extensions/{extension_id}/{action}" ).mock( return_value=httpx.Response( status_code=httpx.codes.OK, @@ -119,7 +119,7 @@ async def test_async_download_icon(async_extension_service): icon_bytes = b"\x89PNG\r\n\x1a\n" with respx.mock: mock_route = respx.get( - f"https://api.example.com/public/v1/extensibility/extensions/{extension_id}/icon" + f"https://api.example.com/public/v1/integration/extensions/{extension_id}/icon" ).mock( return_value=httpx.Response( status_code=httpx.codes.OK, diff --git a/tests/unit/resources/extensibility/test_extensions.py b/tests/unit/resources/integration/test_extensions.py similarity index 94% rename from tests/unit/resources/extensibility/test_extensions.py rename to tests/unit/resources/integration/test_extensions.py index 751779a2..6d1b21b1 100644 --- a/tests/unit/resources/extensibility/test_extensions.py +++ b/tests/unit/resources/integration/test_extensions.py @@ -3,7 +3,7 @@ import respx from mpt_api_client.models.model import BaseModel -from mpt_api_client.resources.extensibility.extensions import ( +from mpt_api_client.resources.integration.extensions import ( AsyncExtensionsService, Extension, ExtensionsService, @@ -68,7 +68,7 @@ def test_extension_create(extensions_service, tmp_path): icon_path = tmp_path / "icon.png" icon_path.write_bytes(b"fake image data") with icon_path.open("rb") as icon_file, respx.mock: - mock_route = respx.post("https://api.example.com/public/v1/extensibility/extensions").mock( + mock_route = respx.post("https://api.example.com/public/v1/integration/extensions").mock( return_value=httpx.Response(httpx.codes.CREATED, json=expected_response) ) @@ -85,7 +85,7 @@ async def test_async_extension_create(async_extensions_service, tmp_path): icon_path = tmp_path / "icon.png" icon_path.write_bytes(b"fake image data") with icon_path.open("rb") as icon_file, respx.mock: - mock_route = respx.post("https://api.example.com/public/v1/extensibility/extensions").mock( + mock_route = respx.post("https://api.example.com/public/v1/integration/extensions").mock( return_value=httpx.Response(httpx.codes.CREATED, json=expected_response) ) @@ -104,7 +104,7 @@ def test_extension_update(extensions_service, tmp_path): icon_path.write_bytes(b"new icon data") with icon_path.open("rb") as icon_file, respx.mock: mock_route = respx.put( - f"https://api.example.com/public/v1/extensibility/extensions/{extension_id}" + f"https://api.example.com/public/v1/integration/extensions/{extension_id}" ).mock(return_value=httpx.Response(httpx.codes.OK, json=expected_response)) result = extensions_service.update(extension_id, update_data, file=icon_file) @@ -122,7 +122,7 @@ async def test_async_extension_update(async_extensions_service, tmp_path): icon_path.write_bytes(b"new async icon data") with icon_path.open("rb") as icon_file, respx.mock: mock_route = respx.put( - f"https://api.example.com/public/v1/extensibility/extensions/{extension_id}" + f"https://api.example.com/public/v1/integration/extensions/{extension_id}" ).mock(return_value=httpx.Response(httpx.codes.OK, json=expected_response)) result = await async_extensions_service.update(extension_id, update_data, file=icon_file) diff --git a/tests/unit/resources/integration/test_integration.py b/tests/unit/resources/integration/test_integration.py new file mode 100644 index 00000000..76b3bb15 --- /dev/null +++ b/tests/unit/resources/integration/test_integration.py @@ -0,0 +1,60 @@ +import pytest + +from mpt_api_client.resources.integration.extensions import ( + AsyncExtensionsService, + ExtensionsService, +) +from mpt_api_client.resources.integration.integration import ( + AsyncIntegration, + Integration, +) + + +@pytest.fixture +def integration(http_client): + return Integration(http_client=http_client) + + +@pytest.fixture +def async_integration(async_http_client): + return AsyncIntegration(http_client=async_http_client) + + +def test_integration_initialization(http_client): + result = Integration(http_client=http_client) + + assert result.http_client is http_client + assert isinstance(result, Integration) + + +def test_async_integration_initialization(async_http_client): + result = AsyncIntegration(http_client=async_http_client) + + assert result.http_client is async_http_client + assert isinstance(result, AsyncIntegration) + + +@pytest.mark.parametrize( + ("property_name", "expected_service_class"), + [ + ("extensions", ExtensionsService), + ], +) +def test_integration_properties(integration, property_name, expected_service_class): + result = getattr(integration, property_name) + + assert isinstance(result, expected_service_class) + assert result.http_client is integration.http_client + + +@pytest.mark.parametrize( + ("property_name", "expected_service_class"), + [ + ("extensions", AsyncExtensionsService), + ], +) +def test_async_integration_properties(async_integration, property_name, expected_service_class): + result = getattr(async_integration, property_name) + + assert isinstance(result, expected_service_class) + assert result.http_client is async_integration.http_client diff --git a/tests/unit/test_mpt_client.py b/tests/unit/test_mpt_client.py index 51b3315b..2f788f0c 100644 --- a/tests/unit/test_mpt_client.py +++ b/tests/unit/test_mpt_client.py @@ -10,16 +10,16 @@ AsyncCatalog, AsyncCommerce, AsyncExchange, - AsyncExtensibility, AsyncHelpdesk, + AsyncIntegration, AsyncNotifications, Audit, Billing, Catalog, Commerce, Exchange, - Extensibility, Helpdesk, + Integration, Notifications, ) from tests.unit.conftest import API_TOKEN, API_URL @@ -40,7 +40,7 @@ def get_mpt_client(): ("notifications", Notifications), ("helpdesk", Helpdesk), ("exchange", Exchange), - ("extensibility", Extensibility), + ("integration", Integration), ], ) def test_mpt_client(resource_name: str, expected_type: type) -> None: @@ -73,7 +73,7 @@ def test_mpt_client_env(monkeypatch: pytest.MonkeyPatch) -> None: ("notifications", AsyncNotifications), ("helpdesk", AsyncHelpdesk), ("exchange", AsyncExchange), - ("extensibility", AsyncExtensibility), + ("integration", AsyncIntegration), ], ) def test_async_mpt_client(resource_name: str, expected_type: type) -> None: