test(e2e): cover user deletion removing it from user inventory (#34007)

This commit is contained in:
Yassin Kortam 2026-07-20 15:38:32 -07:00 • committed by GitHub
parent 6f62022e84
commit c208bec37f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 39 additions and 0 deletions

View file

@ -45,6 +45,7 @@ from models import (
TeamNewResponse,
TeamUpdateBody,
UserDeleteBody,
UserDeleteResponse,
UserInfoParams,
UserInfoResponse,
UserListParams,
@ -287,6 +288,18 @@ class ManagementClient:
response_type=NoBody,
)
def delete_user_strict(self, user_id: str) -> None:
"""Strict delete for the act phase of a test: a failed delete is a hard
failure, unlike the warn-only delete_user used at teardown."""
_ = unwrap(
self.proxy.transport.post(
"/user/delete",
headers=self.proxy.transport.master,
json=UserDeleteBody(user_ids=[user_id]),
response_type=UserDeleteResponse,
)
)
def user_info(self, user_id: str) -> UserInfoResponse:
return unwrap(
self.proxy.transport.get(

View file

@ -335,6 +335,28 @@ class TestUserRoutes:
assert info.user_role == "internal_user_viewer", (
f"/user/info reports user_role {info.user_role!r} after /user/update to 'internal_user_viewer'"
)
@pytest.mark.covers("mgmt.user.delete.persists")
def test_delete_removes_the_user_from_inventory(
self, client: ManagementClient, resources: ResourceManager
) -> None:
"""The teardown's deferred delete fires again on the already-deleted user by
design: the deferred cleanup must survive this test failing before the
in-body delete, and a repeat /user/delete is a cheap no-op the warn-only
teardown absorbs."""
user_id = _create_user(
client,
resources,
UserNewBody(user_email=f"e2e-mgmt-{unique_marker()}@example.com", user_role="internal_user"),
)
assert client.user_count(user_id) == 1, f"user {user_id} was not created before deletion"
client.delete_user_strict(user_id)
def removed() -> bool | None:
return True if client.user_count(user_id) == 0 else None
_ = _poll(client, removed, f"user {user_id} still present in /user/list after /user/delete at the deadline")
@pytest.mark.covers("mgmt.user.list.happy_path")
def test_created_users_appear_in_user_list(
self, client: ManagementClient, resources: ResourceManager

View file

@ -705,6 +705,10 @@ class UserDeleteBody(BaseModel):
user_ids: list[str]
class UserDeleteResponse(RootModel[int]):
pass
class UserListParams(BaseModel):
user_ids: str