Skip to content

Commit d911034

Browse files
albertsolaCopilot
andcommitted
MPT-19892: add E2E tests for Extension base service
- Add sync and async E2E tests for /public/v1/extensibility/extensions - Tests cover: create, get, not_found, update, delete, filter, download_icon, publish, unpublish - Add extensibility.extension.id placeholder to e2e_config.test.json Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 170e5c0 commit d911034

6 files changed

Lines changed: 184 additions & 1 deletion

File tree

e2e_config.test.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,5 +66,6 @@
6666
"notifications.batch.id": "MST-3638-2460-4825",
6767
"notifications.category.id": "NTC-6157-0397",
6868
"notifications.message.id": "MSG-0000-6215-1019-0139",
69-
"notifications.subscriber.id": "NTS-0829-7123-7123"
69+
"notifications.subscriber.id": "NTS-0829-7123-7123",
70+
"extensibility.extension.id": "EXT-XXXX-XXXX"
7071
}

tests/e2e/extensibility/__init__.py

Whitespace-only changes.

tests/e2e/extensibility/extensions/__init__.py

Whitespace-only changes.
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import pytest
2+
3+
from mpt_api_client.exceptions import MPTAPIError
4+
5+
6+
@pytest.fixture
7+
def extensions_service(mpt_vendor):
8+
return mpt_vendor.extensibility.extensions
9+
10+
11+
@pytest.fixture
12+
def async_extensions_service(async_mpt_vendor):
13+
return async_mpt_vendor.extensibility.extensions
14+
15+
16+
@pytest.fixture(scope="session")
17+
def extension_id(e2e_config):
18+
return e2e_config["extensibility.extension.id"]
19+
20+
21+
@pytest.fixture
22+
def extension_data(short_uuid):
23+
return {
24+
"name": f"e2e - please delete {short_uuid}",
25+
"shortDescription": f"E2E test extension {short_uuid}",
26+
"longDescription": "Created by automated E2E tests. Safe to delete.",
27+
"website": "https://example.com",
28+
}
29+
30+
31+
@pytest.fixture
32+
def created_extension(extensions_service, extension_data, logo_fd):
33+
extension = extensions_service.create(extension_data, file=logo_fd)
34+
35+
yield extension
36+
37+
try:
38+
extensions_service.delete(extension.id)
39+
except MPTAPIError as error:
40+
print(f"TEARDOWN - Unable to delete extension {extension.id}: {error.title}") # noqa: WPS421
41+
42+
43+
@pytest.fixture
44+
async def async_created_extension(async_extensions_service, extension_data, logo_fd):
45+
extension = await async_extensions_service.create(extension_data, file=logo_fd)
46+
47+
yield extension
48+
49+
try:
50+
await async_extensions_service.delete(extension.id)
51+
except MPTAPIError as error:
52+
print(f"TEARDOWN - Unable to delete extension {extension.id}: {error.title}") # noqa: WPS421
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import pytest
2+
3+
from mpt_api_client.exceptions import MPTAPIError
4+
from mpt_api_client.models import FileModel
5+
from tests.e2e.helper import assert_async_service_filter_with_iterate
6+
7+
pytestmark = [pytest.mark.flaky]
8+
9+
10+
def test_create_extension(async_created_extension, extension_data):
11+
result = async_created_extension.name
12+
13+
assert result == extension_data["name"]
14+
15+
16+
async def test_get_extension(async_extensions_service, extension_id):
17+
result = await async_extensions_service.get(extension_id)
18+
19+
assert result.id == extension_id
20+
21+
22+
async def test_get_extension_not_found(async_extensions_service):
23+
bogus_id = "EXT-0000-0000"
24+
25+
with pytest.raises(MPTAPIError, match=r"404 Not Found"):
26+
await async_extensions_service.get(bogus_id)
27+
28+
29+
async def test_update_extension(
30+
async_extensions_service, async_created_extension, logo_fd, short_uuid
31+
):
32+
update_data = {"name": f"e2e - please delete {short_uuid}"}
33+
34+
result = await async_extensions_service.update(
35+
async_created_extension.id, update_data, file=logo_fd
36+
)
37+
38+
assert result.name == update_data["name"]
39+
40+
41+
async def test_delete_extension(async_extensions_service, async_created_extension):
42+
await async_extensions_service.delete(async_created_extension.id) # act
43+
44+
45+
async def test_filter_extensions(async_extensions_service, extension_id):
46+
await assert_async_service_filter_with_iterate(
47+
async_extensions_service, extension_id, None
48+
) # act
49+
50+
51+
async def test_download_icon(async_extensions_service, async_created_extension):
52+
result = await async_extensions_service.download_icon(async_created_extension.id)
53+
54+
assert isinstance(result, FileModel)
55+
56+
57+
async def test_publish_extension(async_extensions_service, async_created_extension):
58+
result = await async_extensions_service.publish(async_created_extension.id)
59+
60+
assert result.status == "Public"
61+
62+
63+
async def test_unpublish_extension(async_extensions_service, async_created_extension):
64+
await async_extensions_service.publish(async_created_extension.id)
65+
66+
result = await async_extensions_service.unpublish(async_created_extension.id)
67+
68+
assert result.status == "Private"
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import pytest
2+
3+
from mpt_api_client.exceptions import MPTAPIError
4+
from mpt_api_client.models import FileModel
5+
from tests.e2e.helper import assert_service_filter_with_iterate
6+
7+
pytestmark = [pytest.mark.flaky]
8+
9+
10+
def test_create_extension(created_extension, extension_data):
11+
result = created_extension.name
12+
13+
assert result == extension_data["name"]
14+
15+
16+
def test_get_extension(extensions_service, extension_id):
17+
result = extensions_service.get(extension_id)
18+
19+
assert result.id == extension_id
20+
21+
22+
def test_get_extension_not_found(extensions_service):
23+
bogus_id = "EXT-0000-0000"
24+
25+
with pytest.raises(MPTAPIError, match=r"404 Not Found"):
26+
extensions_service.get(bogus_id)
27+
28+
29+
def test_update_extension(extensions_service, created_extension, logo_fd, short_uuid):
30+
update_data = {"name": f"e2e - please delete {short_uuid}"}
31+
32+
result = extensions_service.update(created_extension.id, update_data, file=logo_fd)
33+
34+
assert result.name == update_data["name"]
35+
36+
37+
def test_delete_extension(extensions_service, created_extension):
38+
extensions_service.delete(created_extension.id) # act
39+
40+
41+
def test_filter_extensions(extensions_service, extension_id):
42+
assert_service_filter_with_iterate(extensions_service, extension_id, None) # act
43+
44+
45+
def test_download_icon(extensions_service, created_extension):
46+
result = extensions_service.download_icon(created_extension.id)
47+
48+
assert isinstance(result, FileModel)
49+
50+
51+
def test_publish_extension(extensions_service, created_extension):
52+
result = extensions_service.publish(created_extension.id)
53+
54+
assert result.status == "Public"
55+
56+
57+
def test_unpublish_extension(extensions_service, created_extension):
58+
extensions_service.publish(created_extension.id)
59+
60+
result = extensions_service.unpublish(created_extension.id)
61+
62+
assert result.status == "Private"

0 commit comments

Comments
 (0)