From 479f12414daba430ec681ff814b497f01bcafa29 Mon Sep 17 00:00:00 2001 From: Robert Segal Date: Thu, 13 Nov 2025 13:39:30 -0700 Subject: [PATCH] Added Accounts user groups e2e tests --- .github/workflows/cron-main-e2e.yml | 2 +- .github/workflows/pr-build-merge.yml | 2 +- .github/workflows/release.yml | 2 +- e2e_config.test.json | 3 +- tests/e2e/accounts/conftest.py | 19 +++- .../user_groups/test_async_user_groups.py | 86 +++++++++++++++++++ .../user_groups/test_sync_user_groups.py | 80 +++++++++++++++++ tests/e2e/conftest.py | 10 +++ 8 files changed, 199 insertions(+), 5 deletions(-) create mode 100644 tests/e2e/accounts/user_groups/test_async_user_groups.py create mode 100644 tests/e2e/accounts/user_groups/test_sync_user_groups.py diff --git a/.github/workflows/cron-main-e2e.yml b/.github/workflows/cron-main-e2e.yml index f27994bd..3f71d330 100644 --- a/.github/workflows/cron-main-e2e.yml +++ b/.github/workflows/cron-main-e2e.yml @@ -6,7 +6,7 @@ on: jobs: build: runs-on: ubuntu-latest - timeout-minutes: 10 + timeout-minutes: 15 steps: - name: "Checkout" uses: actions/checkout@v4 diff --git a/.github/workflows/pr-build-merge.yml b/.github/workflows/pr-build-merge.yml index f9592066..ed2ec275 100644 --- a/.github/workflows/pr-build-merge.yml +++ b/.github/workflows/pr-build-merge.yml @@ -15,7 +15,7 @@ jobs: build: runs-on: ubuntu-latest - timeout-minutes: 10 + timeout-minutes: 15 steps: - name: "Checkout" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bdd362b6..1e181fe5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,7 +12,7 @@ jobs: build: runs-on: ubuntu-latest - timeout-minutes: 10 + timeout-minutes: 15 steps: - name: "Checkout" diff --git a/e2e_config.test.json b/e2e_config.test.json index cb6df82f..6a8c1259 100644 --- a/e2e_config.test.json +++ b/e2e_config.test.json @@ -5,5 +5,6 @@ "catalog.product.parameter.id": "PAR-7255-3950-0016", "accounts.account.id": "ACC-9042-0088", "accounts.buyer.account.id": "ACC-1086-6867", - "accounts.buyer.id": "BUY-1591-2112" + "accounts.buyer.id": "BUY-1591-2112", + "accounts.user_group.id": "UGR-6822-0561" } diff --git a/tests/e2e/accounts/conftest.py b/tests/e2e/accounts/conftest.py index f1657e73..67229261 100644 --- a/tests/e2e/accounts/conftest.py +++ b/tests/e2e/accounts/conftest.py @@ -46,7 +46,7 @@ def _seller( @pytest.fixture def account(): def _account( - name: str = "Test Api Client Vendor", + name: str = "E2E Test Api Client Vendor", ): return { "name": name, @@ -90,3 +90,20 @@ def _buyer( } return _buyer + + +@pytest.fixture +def user_group(account_id): + def _user_group( + name: str = "E2E Test Api Client User Group", + ): + return { + "name": name, + "account": {"id": account_id}, + "buyers": None, + "logo": "", + "description": "User group for E2E tests", + "modules": [{"id": "MOD-1756"}], + } + + return _user_group diff --git a/tests/e2e/accounts/user_groups/test_async_user_groups.py b/tests/e2e/accounts/user_groups/test_async_user_groups.py new file mode 100644 index 00000000..25619be9 --- /dev/null +++ b/tests/e2e/accounts/user_groups/test_async_user_groups.py @@ -0,0 +1,86 @@ +import pytest + +from mpt_api_client.exceptions import MPTAPIError +from mpt_api_client.rql.query_builder import RQLQuery + +pytestmark = [pytest.mark.flaky] + + +@pytest.fixture +async def created_user_group(async_mpt_ops, user_group): + new_user_group_request_data = user_group() + created_user_group = await async_mpt_ops.accounts.user_groups.create( + new_user_group_request_data + ) + + yield created_user_group + + try: + await async_mpt_ops.accounts.user_groups.delete(created_user_group.id) + except MPTAPIError as error: + print(f"TEARDOWN - Unable to delete user group: {error.title}") # noqa: WPS421 + + +async def test_get_user_group_by_id(async_mpt_ops, user_group_id): + user_group = await async_mpt_ops.accounts.user_groups.get(user_group_id) + assert user_group is not None + + +async def test_list_user_groups(async_mpt_ops): + limit = 10 + user_groups = await async_mpt_ops.accounts.user_groups.fetch_page(limit=limit) + assert len(user_groups) > 0 + + +async def test_get_user_group_by_id_not_found(async_mpt_ops, invalid_user_group_id): + with pytest.raises(MPTAPIError, match=r"404 Not Found"): + await async_mpt_ops.accounts.user_groups.get(invalid_user_group_id) + + +async def test_filter_user_groups(async_mpt_ops, user_group_id): + select_fields = ["-name"] + + filtered_user_groups = ( + async_mpt_ops.accounts.user_groups.filter(RQLQuery(id=user_group_id)) + .filter(RQLQuery(name="E2E Seeded User Group")) + .select(*select_fields) + ) + + user_groups = [ + filtered_user_group async for filtered_user_group in filtered_user_groups.iterate() + ] + + assert len(user_groups) == 1 + + +def test_create_user_group(created_user_group): + new_user_group = created_user_group + assert new_user_group is not None + + +async def test_delete_user_group(async_mpt_ops, created_user_group): + await async_mpt_ops.accounts.user_groups.delete(created_user_group.id) + + +async def test_delete_user_group_not_found(async_mpt_ops, invalid_user_group_id): + with pytest.raises(MPTAPIError, match=r"404 Not Found"): + await async_mpt_ops.accounts.user_groups.delete(invalid_user_group_id) + + +async def test_update_user_group(async_mpt_ops, user_group, created_user_group): + updated_user_group_data = user_group(name="E2E Updated User Group") + + updated_user_group = await async_mpt_ops.accounts.user_groups.update( + created_user_group.id, updated_user_group_data + ) + + assert updated_user_group is not None + + +async def test_update_user_group_not_found(async_mpt_ops, user_group, invalid_user_group_id): + updated_user_group_data = user_group(name="Nonexistent User Group") + + with pytest.raises(MPTAPIError, match=r"404 Not Found"): + await async_mpt_ops.accounts.user_groups.update( + invalid_user_group_id, updated_user_group_data + ) diff --git a/tests/e2e/accounts/user_groups/test_sync_user_groups.py b/tests/e2e/accounts/user_groups/test_sync_user_groups.py new file mode 100644 index 00000000..67651c6f --- /dev/null +++ b/tests/e2e/accounts/user_groups/test_sync_user_groups.py @@ -0,0 +1,80 @@ +import pytest + +from mpt_api_client.exceptions import MPTAPIError +from mpt_api_client.rql.query_builder import RQLQuery + +pytestmark = [pytest.mark.flaky] + + +@pytest.fixture +def created_user_group(mpt_ops, user_group): + new_user_group_request_data = user_group() + created_user_group = mpt_ops.accounts.user_groups.create(new_user_group_request_data) + + yield created_user_group + + try: + mpt_ops.accounts.user_groups.delete(created_user_group.id) + except MPTAPIError as error: + print(f"TEARDOWN - Unable to delete user group: {error.title}") # noqa: WPS421 + + +def test_get_user_group_by_id(mpt_ops, user_group_id): + user_group = mpt_ops.accounts.user_groups.get(user_group_id) + assert user_group is not None + + +def test_list_user_groups(mpt_ops): + limit = 10 + user_groups = mpt_ops.accounts.user_groups.fetch_page(limit=limit) + assert len(user_groups) > 0 + + +def test_get_user_group_by_id_not_found(mpt_ops, invalid_user_group_id): + with pytest.raises(MPTAPIError, match=r"404 Not Found"): + mpt_ops.accounts.user_groups.get(invalid_user_group_id) + + +def test_filter_user_groups(mpt_ops, user_group_id): + select_fields = ["-name"] + + filtered_user_groups = ( + mpt_ops.accounts.user_groups.filter(RQLQuery(id=user_group_id)) + .filter(RQLQuery(name="E2E Seeded User Group")) + .select(*select_fields) + ) + + user_groups = list(filtered_user_groups.iterate()) + + assert len(user_groups) == 1 + + +def test_create_user_group(created_user_group): + new_user_group = created_user_group + assert new_user_group is not None + + +def test_delete_user_group(mpt_ops, created_user_group): + mpt_ops.accounts.user_groups.delete(created_user_group.id) + + +def test_delete_user_group_not_found(mpt_ops, invalid_user_group_id): + with pytest.raises(MPTAPIError, match=r"404 Not Found"): + mpt_ops.accounts.user_groups.delete(invalid_user_group_id) + + +def test_update_user_group(mpt_ops, user_group, created_user_group): + updated_user_group_data = user_group(name="E2E Updated User Group") + + updated_user_group = mpt_ops.accounts.user_groups.update( + created_user_group.id, updated_user_group_data + ) + + assert updated_user_group is not None + + +def test_update_user_group_not_found(mpt_ops, user_group, invalid_user_group_id): + updated_user_group_data = user_group(name="Nonexistent User Group") + + with pytest.raises(MPTAPIError, match=r"404 Not Found"): + mpt_ops.accounts.user_groups.update(invalid_user_group_id, updated_user_group_data) diff --git a/tests/e2e/conftest.py b/tests/e2e/conftest.py index 075c1cc1..69537e9a 100644 --- a/tests/e2e/conftest.py +++ b/tests/e2e/conftest.py @@ -113,3 +113,13 @@ def buyer_id(e2e_config): @pytest.fixture def buyer_account_id(e2e_config): return e2e_config["accounts.buyer.account.id"] + + +@pytest.fixture +def user_group_id(e2e_config): + return e2e_config["accounts.user_group.id"] + + +@pytest.fixture +def invalid_user_group_id(): + return "UGR-0000-0000"