|
@@ -40,7 +40,11 @@ class TestListOrganizations:
|
|
|
assert response.json() == []
|
|
assert response.json() == []
|
|
|
|
|
|
|
|
async def test_super_admin_sees_all_orgs(
|
|
async def test_super_admin_sees_all_orgs(
|
|
|
- self, client: AsyncClient, default_organization: Organization, make_org_user, session: Session
|
|
|
|
|
|
|
+ self,
|
|
|
|
|
+ client: AsyncClient,
|
|
|
|
|
+ default_organization: Organization,
|
|
|
|
|
+ make_org_user,
|
|
|
|
|
+ session: Session,
|
|
|
):
|
|
):
|
|
|
other_org = Organization(id=str(uuid.uuid4()), name="Other Org")
|
|
other_org = Organization(id=str(uuid.uuid4()), name="Other Org")
|
|
|
session.add(other_org)
|
|
session.add(other_org)
|
|
@@ -56,7 +60,9 @@ class TestListOrganizations:
|
|
|
|
|
|
|
|
class TestCreateOrganization:
|
|
class TestCreateOrganization:
|
|
|
async def test_requires_auth(self, client: AsyncClient):
|
|
async def test_requires_auth(self, client: AsyncClient):
|
|
|
- response = await client.post(app.url_path_for("create_organization"), json={"name": "New Org"})
|
|
|
|
|
|
|
+ response = await client.post(
|
|
|
|
|
+ app.url_path_for("create_organization"), json={"name": "New Org"}
|
|
|
|
|
+ )
|
|
|
assert response.status_code == 401
|
|
assert response.status_code == 401
|
|
|
|
|
|
|
|
@pytest.mark.parametrize("role", ALL_ORG_ROLES + [None])
|
|
@pytest.mark.parametrize("role", ALL_ORG_ROLES + [None])
|
|
@@ -80,7 +86,11 @@ class TestCreateOrganization:
|
|
|
data = response.json()
|
|
data = response.json()
|
|
|
assert data["name"] == "New Org"
|
|
assert data["name"] == "New Org"
|
|
|
|
|
|
|
|
- org = session.execute(select(Organization).where(Organization.name == "New Org")).scalars().first()
|
|
|
|
|
|
|
+ org = (
|
|
|
|
|
+ session.execute(select(Organization).where(Organization.name == "New Org"))
|
|
|
|
|
+ .scalars()
|
|
|
|
|
+ .first()
|
|
|
|
|
+ )
|
|
|
assert org is not None
|
|
assert org is not None
|
|
|
|
|
|
|
|
async def test_duplicate_name_rejected(
|
|
async def test_duplicate_name_rejected(
|
|
@@ -96,7 +106,9 @@ class TestCreateOrganization:
|
|
|
|
|
|
|
|
async def test_missing_name_validation_error(self, client: AsyncClient, make_org_user):
|
|
async def test_missing_name_validation_error(self, client: AsyncClient, make_org_user):
|
|
|
_, headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
_, headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
|
- response = await client.post(app.url_path_for("create_organization"), headers=headers, json={})
|
|
|
|
|
|
|
+ response = await client.post(
|
|
|
|
|
+ app.url_path_for("create_organization"), headers=headers, json={}
|
|
|
|
|
+ )
|
|
|
assert response.status_code == 422
|
|
assert response.status_code == 422
|
|
|
|
|
|
|
|
|
|
|
|
@@ -113,7 +125,8 @@ class TestGetOrganization:
|
|
|
):
|
|
):
|
|
|
_, headers = make_org_user(role=role)
|
|
_, headers = make_org_user(role=role)
|
|
|
response = await client.get(
|
|
response = await client.get(
|
|
|
- app.url_path_for("get_organization", organization_id=default_organization_id), headers=headers
|
|
|
|
|
|
|
+ app.url_path_for("get_organization", organization_id=default_organization_id),
|
|
|
|
|
+ headers=headers,
|
|
|
)
|
|
)
|
|
|
assert response.status_code == 200
|
|
assert response.status_code == 200
|
|
|
assert response.json()["id"] == default_organization_id
|
|
assert response.json()["id"] == default_organization_id
|
|
@@ -123,7 +136,8 @@ class TestGetOrganization:
|
|
|
):
|
|
):
|
|
|
_, headers = make_org_user(role=None)
|
|
_, headers = make_org_user(role=None)
|
|
|
response = await client.get(
|
|
response = await client.get(
|
|
|
- app.url_path_for("get_organization", organization_id=default_organization_id), headers=headers
|
|
|
|
|
|
|
+ app.url_path_for("get_organization", organization_id=default_organization_id),
|
|
|
|
|
+ headers=headers,
|
|
|
)
|
|
)
|
|
|
assert response.status_code == 403
|
|
assert response.status_code == 403
|
|
|
|
|
|
|
@@ -132,7 +146,8 @@ class TestGetOrganization:
|
|
|
):
|
|
):
|
|
|
_, headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
_, headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
|
response = await client.get(
|
|
response = await client.get(
|
|
|
- app.url_path_for("get_organization", organization_id=default_organization_id), headers=headers
|
|
|
|
|
|
|
+ app.url_path_for("get_organization", organization_id=default_organization_id),
|
|
|
|
|
+ headers=headers,
|
|
|
)
|
|
)
|
|
|
assert response.status_code == 200
|
|
assert response.status_code == 200
|
|
|
|
|
|
|
@@ -141,7 +156,8 @@ class TestGetOrganization:
|
|
|
):
|
|
):
|
|
|
_, headers = make_org_user(role=OrgRole.RESPO_BENEVOLE)
|
|
_, headers = make_org_user(role=OrgRole.RESPO_BENEVOLE)
|
|
|
response = await client.get(
|
|
response = await client.get(
|
|
|
- app.url_path_for("get_organization", organization_id=default_organization_id), headers=headers
|
|
|
|
|
|
|
+ app.url_path_for("get_organization", organization_id=default_organization_id),
|
|
|
|
|
+ headers=headers,
|
|
|
)
|
|
)
|
|
|
assert response.status_code == 200
|
|
assert response.status_code == 200
|
|
|
memberships = response.json()["memberships"]
|
|
memberships = response.json()["memberships"]
|
|
@@ -162,7 +178,7 @@ class TestUpdateOrganization:
|
|
|
self, client: AsyncClient, default_organization: Organization, make_org_user, role
|
|
self, client: AsyncClient, default_organization: Organization, make_org_user, role
|
|
|
):
|
|
):
|
|
|
_, headers = make_org_user(role=role)
|
|
_, headers = make_org_user(role=role)
|
|
|
- response = await client.patch(
|
|
|
|
|
|
|
+ response = await client.post(
|
|
|
app.url_path_for("update_organization", organization_id=default_organization_id),
|
|
app.url_path_for("update_organization", organization_id=default_organization_id),
|
|
|
headers=headers,
|
|
headers=headers,
|
|
|
json={"name": "Renamed"},
|
|
json={"name": "Renamed"},
|
|
@@ -170,10 +186,14 @@ class TestUpdateOrganization:
|
|
|
assert response.status_code == 403
|
|
assert response.status_code == 403
|
|
|
|
|
|
|
|
async def test_super_admin_renames(
|
|
async def test_super_admin_renames(
|
|
|
- self, client: AsyncClient, default_organization: Organization, make_org_user, session: Session
|
|
|
|
|
|
|
+ self,
|
|
|
|
|
+ client: AsyncClient,
|
|
|
|
|
+ default_organization: Organization,
|
|
|
|
|
+ make_org_user,
|
|
|
|
|
+ session: Session,
|
|
|
):
|
|
):
|
|
|
_, headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
_, headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
|
- response = await client.patch(
|
|
|
|
|
|
|
+ response = await client.post(
|
|
|
app.url_path_for("update_organization", organization_id=default_organization_id),
|
|
app.url_path_for("update_organization", organization_id=default_organization_id),
|
|
|
headers=headers,
|
|
headers=headers,
|
|
|
json={"name": "Renamed"},
|
|
json={"name": "Renamed"},
|
|
@@ -184,7 +204,7 @@ class TestUpdateOrganization:
|
|
|
|
|
|
|
|
async def test_not_found(self, client: AsyncClient, make_org_user):
|
|
async def test_not_found(self, client: AsyncClient, make_org_user):
|
|
|
_, headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
_, headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
|
- response = await client.patch(
|
|
|
|
|
|
|
+ response = await client.post(
|
|
|
app.url_path_for("update_organization", organization_id=uuid.uuid4()),
|
|
app.url_path_for("update_organization", organization_id=uuid.uuid4()),
|
|
|
headers=headers,
|
|
headers=headers,
|
|
|
json={"name": "Nope"},
|
|
json={"name": "Nope"},
|
|
@@ -199,7 +219,8 @@ class TestDeleteOrganization:
|
|
|
):
|
|
):
|
|
|
_, headers = make_org_user(role=role)
|
|
_, headers = make_org_user(role=role)
|
|
|
response = await client.delete(
|
|
response = await client.delete(
|
|
|
- app.url_path_for("delete_organization", organization_id=default_organization_id), headers=headers
|
|
|
|
|
|
|
+ app.url_path_for("delete_organization", organization_id=default_organization_id),
|
|
|
|
|
+ headers=headers,
|
|
|
)
|
|
)
|
|
|
assert response.status_code == 403
|
|
assert response.status_code == 403
|
|
|
|
|
|
|
@@ -208,12 +229,14 @@ class TestDeleteOrganization:
|
|
|
):
|
|
):
|
|
|
_, headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
_, headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
|
response = await client.delete(
|
|
response = await client.delete(
|
|
|
- app.url_path_for("delete_organization", organization_id=default_organization_id), headers=headers
|
|
|
|
|
|
|
+ app.url_path_for("delete_organization", organization_id=default_organization_id),
|
|
|
|
|
+ headers=headers,
|
|
|
)
|
|
)
|
|
|
assert response.status_code == 200
|
|
assert response.status_code == 200
|
|
|
assert session.get(Organization, default_organization_id) is None
|
|
assert session.get(Organization, default_organization_id) is None
|
|
|
|
|
|
|
|
from app.models import Project
|
|
from app.models import Project
|
|
|
|
|
+
|
|
|
assert session.get(Project, default_project.id) is None
|
|
assert session.get(Project, default_project.id) is None
|
|
|
|
|
|
|
|
async def test_not_found(self, client: AsyncClient, make_org_user):
|
|
async def test_not_found(self, client: AsyncClient, make_org_user):
|
|
@@ -223,6 +246,7 @@ class TestDeleteOrganization:
|
|
|
)
|
|
)
|
|
|
assert response.status_code == 404
|
|
assert response.status_code == 404
|
|
|
|
|
|
|
|
|
|
+
|
|
|
class TestAddMember:
|
|
class TestAddMember:
|
|
|
@pytest.mark.parametrize("role", ALL_ORG_ROLES + [None])
|
|
@pytest.mark.parametrize("role", ALL_ORG_ROLES + [None])
|
|
|
async def test_non_super_admin_forbidden(
|
|
async def test_non_super_admin_forbidden(
|
|
@@ -237,7 +261,11 @@ class TestAddMember:
|
|
|
assert response.status_code == 403
|
|
assert response.status_code == 403
|
|
|
|
|
|
|
|
async def test_super_admin_adds_existing_user(
|
|
async def test_super_admin_adds_existing_user(
|
|
|
- self, client: AsyncClient, default_organization: Organization, make_org_user, session: Session
|
|
|
|
|
|
|
+ self,
|
|
|
|
|
+ client: AsyncClient,
|
|
|
|
|
+ default_organization: Organization,
|
|
|
|
|
+ make_org_user,
|
|
|
|
|
+ session: Session,
|
|
|
):
|
|
):
|
|
|
target_user, _ = make_org_user(role=None) # exists, no membership yet
|
|
target_user, _ = make_org_user(role=None) # exists, no membership yet
|
|
|
_, admin_headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
_, admin_headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
@@ -257,7 +285,11 @@ class TestAddMember:
|
|
|
assert membership.role == OrgRole.RESPO_COMMISSION
|
|
assert membership.role == OrgRole.RESPO_COMMISSION
|
|
|
|
|
|
|
|
async def test_user_can_belong_to_multiple_orgs(
|
|
async def test_user_can_belong_to_multiple_orgs(
|
|
|
- self, client: AsyncClient, default_organization: Organization, make_org_user, session: Session
|
|
|
|
|
|
|
+ self,
|
|
|
|
|
+ client: AsyncClient,
|
|
|
|
|
+ default_organization: Organization,
|
|
|
|
|
+ make_org_user,
|
|
|
|
|
+ session: Session,
|
|
|
):
|
|
):
|
|
|
"""Confirms the multi-org membership model -- no unique(user_id) constraint."""
|
|
"""Confirms the multi-org membership model -- no unique(user_id) constraint."""
|
|
|
target_user, _ = make_org_user(role=OrgRole.ORG_ADMIN) # already in default_organization
|
|
target_user, _ = make_org_user(role=OrgRole.ORG_ADMIN) # already in default_organization
|
|
@@ -273,9 +305,13 @@ class TestAddMember:
|
|
|
)
|
|
)
|
|
|
assert response.status_code == 200
|
|
assert response.status_code == 200
|
|
|
|
|
|
|
|
- memberships = session.execute(
|
|
|
|
|
- select(UserOrganization).where(UserOrganization.user_id == target_user.id)
|
|
|
|
|
- ).scalars().all()
|
|
|
|
|
|
|
+ memberships = (
|
|
|
|
|
+ session.execute(
|
|
|
|
|
+ select(UserOrganization).where(UserOrganization.user_id == target_user.id)
|
|
|
|
|
+ )
|
|
|
|
|
+ .scalars()
|
|
|
|
|
+ .all()
|
|
|
|
|
+ )
|
|
|
assert len(memberships) == 2
|
|
assert len(memberships) == 2
|
|
|
|
|
|
|
|
async def test_unknown_user_id_not_found(
|
|
async def test_unknown_user_id_not_found(
|
|
@@ -313,6 +349,7 @@ class TestAddMember:
|
|
|
)
|
|
)
|
|
|
assert response.status_code == 404
|
|
assert response.status_code == 404
|
|
|
|
|
|
|
|
|
|
+
|
|
|
class TestUpdateMemberRole:
|
|
class TestUpdateMemberRole:
|
|
|
@pytest.mark.parametrize("role", [OrgRole.RESPO_BENEVOLE, OrgRole.RESPO_COMMISSION, None])
|
|
@pytest.mark.parametrize("role", [OrgRole.RESPO_BENEVOLE, OrgRole.RESPO_COMMISSION, None])
|
|
|
async def test_insufficient_role_forbidden(
|
|
async def test_insufficient_role_forbidden(
|
|
@@ -320,9 +357,11 @@ class TestUpdateMemberRole:
|
|
|
):
|
|
):
|
|
|
target_user, _ = make_org_user(role=OrgRole.RESPO_COMMISSION)
|
|
target_user, _ = make_org_user(role=OrgRole.RESPO_COMMISSION)
|
|
|
_, headers = make_org_user(role=role)
|
|
_, headers = make_org_user(role=role)
|
|
|
- response = await client.patch(
|
|
|
|
|
|
|
+ response = await client.post(
|
|
|
app.url_path_for(
|
|
app.url_path_for(
|
|
|
- "update_member_role", organization_id=default_organization_id, user_id=target_user.id
|
|
|
|
|
|
|
+ "update_member_role",
|
|
|
|
|
+ organization_id=default_organization_id,
|
|
|
|
|
+ user_id=target_user.id,
|
|
|
),
|
|
),
|
|
|
headers=headers,
|
|
headers=headers,
|
|
|
json={"role": OrgRole.ORG_ADMIN.value},
|
|
json={"role": OrgRole.ORG_ADMIN.value},
|
|
@@ -330,14 +369,20 @@ class TestUpdateMemberRole:
|
|
|
assert response.status_code == 403
|
|
assert response.status_code == 403
|
|
|
|
|
|
|
|
async def test_org_admin_of_same_org_can_change_role(
|
|
async def test_org_admin_of_same_org_can_change_role(
|
|
|
- self, client: AsyncClient, default_organization: Organization, make_org_user, session: Session
|
|
|
|
|
|
|
+ self,
|
|
|
|
|
+ client: AsyncClient,
|
|
|
|
|
+ default_organization: Organization,
|
|
|
|
|
+ make_org_user,
|
|
|
|
|
+ session: Session,
|
|
|
):
|
|
):
|
|
|
target_user, _ = make_org_user(role=OrgRole.RESPO_COMMISSION)
|
|
target_user, _ = make_org_user(role=OrgRole.RESPO_COMMISSION)
|
|
|
_, org_admin_headers = make_org_user(role=OrgRole.ORG_ADMIN)
|
|
_, org_admin_headers = make_org_user(role=OrgRole.ORG_ADMIN)
|
|
|
|
|
|
|
|
- response = await client.patch(
|
|
|
|
|
|
|
+ response = await client.post(
|
|
|
app.url_path_for(
|
|
app.url_path_for(
|
|
|
- "update_member_role", organization_id=default_organization_id, user_id=target_user.id
|
|
|
|
|
|
|
+ "update_member_role",
|
|
|
|
|
+ organization_id=default_organization_id,
|
|
|
|
|
+ user_id=target_user.id,
|
|
|
),
|
|
),
|
|
|
headers=org_admin_headers,
|
|
headers=org_admin_headers,
|
|
|
json={"role": OrgRole.RESPO_BENEVOLE.value},
|
|
json={"role": OrgRole.RESPO_BENEVOLE.value},
|
|
@@ -349,27 +394,41 @@ class TestUpdateMemberRole:
|
|
|
assert membership.role == OrgRole.RESPO_BENEVOLE
|
|
assert membership.role == OrgRole.RESPO_BENEVOLE
|
|
|
|
|
|
|
|
async def test_org_admin_of_different_org_forbidden(
|
|
async def test_org_admin_of_different_org_forbidden(
|
|
|
- self, client: AsyncClient, default_organization: Organization, make_org_user, session: Session
|
|
|
|
|
|
|
+ self,
|
|
|
|
|
+ client: AsyncClient,
|
|
|
|
|
+ default_organization: Organization,
|
|
|
|
|
+ make_org_user,
|
|
|
|
|
+ session: Session,
|
|
|
):
|
|
):
|
|
|
"""An org_admin has no authority over an organization they don't belong to."""
|
|
"""An org_admin has no authority over an organization they don't belong to."""
|
|
|
other_org = Organization(id=uuid.uuid4(), name="Other Org")
|
|
other_org = Organization(id=uuid.uuid4(), name="Other Org")
|
|
|
session.add(other_org)
|
|
session.add(other_org)
|
|
|
session.commit()
|
|
session.commit()
|
|
|
|
|
|
|
|
- target_user, _ = make_org_user(role=OrgRole.RESPO_COMMISSION) # member of default_organization
|
|
|
|
|
|
|
+ target_user, _ = make_org_user(
|
|
|
|
|
+ role=OrgRole.RESPO_COMMISSION
|
|
|
|
|
+ ) # member of default_organization
|
|
|
|
|
|
|
|
# org_admin, but of other_org, not default_organization
|
|
# org_admin, but of other_org, not default_organization
|
|
|
- outsider = User(id=uuid.uuid4(), email="outsider@test.com", hashed_password="x", name="Outsider")
|
|
|
|
|
|
|
+ outsider = User(
|
|
|
|
|
+ id=uuid.uuid4(), email="outsider@test.com", hashed_password="x", name="Outsider"
|
|
|
|
|
+ )
|
|
|
session.add(outsider)
|
|
session.add(outsider)
|
|
|
session.commit()
|
|
session.commit()
|
|
|
- session.add(UserOrganization(user_id=outsider.id, organization_id=other_org.id, role=OrgRole.ORG_ADMIN))
|
|
|
|
|
|
|
+ session.add(
|
|
|
|
|
+ UserOrganization(
|
|
|
|
|
+ user_id=outsider.id, organization_id=other_org.id, role=OrgRole.ORG_ADMIN
|
|
|
|
|
+ )
|
|
|
|
|
+ )
|
|
|
session.commit()
|
|
session.commit()
|
|
|
outsider_token = security.create_jwt_token(str(outsider.id), 60 * 60 * 24, refresh=False)[0]
|
|
outsider_token = security.create_jwt_token(str(outsider.id), 60 * 60 * 24, refresh=False)[0]
|
|
|
outsider_headers = {"Authorization": f"Bearer {outsider_token}"}
|
|
outsider_headers = {"Authorization": f"Bearer {outsider_token}"}
|
|
|
|
|
|
|
|
- response = await client.patch(
|
|
|
|
|
|
|
+ response = await client.post(
|
|
|
app.url_path_for(
|
|
app.url_path_for(
|
|
|
- "update_member_role", organization_id=default_organization_id, user_id=target_user.id
|
|
|
|
|
|
|
+ "update_member_role",
|
|
|
|
|
+ organization_id=default_organization_id,
|
|
|
|
|
+ user_id=target_user.id,
|
|
|
),
|
|
),
|
|
|
headers=outsider_headers,
|
|
headers=outsider_headers,
|
|
|
json={"role": OrgRole.ORG_ADMIN.value},
|
|
json={"role": OrgRole.ORG_ADMIN.value},
|
|
@@ -377,14 +436,20 @@ class TestUpdateMemberRole:
|
|
|
assert response.status_code == 403
|
|
assert response.status_code == 403
|
|
|
|
|
|
|
|
async def test_super_admin_changes_role(
|
|
async def test_super_admin_changes_role(
|
|
|
- self, client: AsyncClient, default_organization: Organization, make_org_user, session: Session
|
|
|
|
|
|
|
+ self,
|
|
|
|
|
+ client: AsyncClient,
|
|
|
|
|
+ default_organization: Organization,
|
|
|
|
|
+ make_org_user,
|
|
|
|
|
+ session: Session,
|
|
|
):
|
|
):
|
|
|
target_user, _ = make_org_user(role=OrgRole.RESPO_COMMISSION)
|
|
target_user, _ = make_org_user(role=OrgRole.RESPO_COMMISSION)
|
|
|
_, admin_headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
_, admin_headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
|
|
|
|
|
|
- response = await client.patch(
|
|
|
|
|
|
|
+ response = await client.post(
|
|
|
app.url_path_for(
|
|
app.url_path_for(
|
|
|
- "update_member_role", organization_id=default_organization_id, user_id=target_user.id
|
|
|
|
|
|
|
+ "update_member_role",
|
|
|
|
|
+ organization_id=default_organization_id,
|
|
|
|
|
+ user_id=target_user.id,
|
|
|
),
|
|
),
|
|
|
headers=admin_headers,
|
|
headers=admin_headers,
|
|
|
json={"role": OrgRole.ORG_ADMIN.value},
|
|
json={"role": OrgRole.ORG_ADMIN.value},
|
|
@@ -401,7 +466,7 @@ class TestUpdateMemberRole:
|
|
|
non_member, _ = make_org_user(role=None)
|
|
non_member, _ = make_org_user(role=None)
|
|
|
_, admin_headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
_, admin_headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
|
|
|
|
|
|
- response = await client.patch(
|
|
|
|
|
|
|
+ response = await client.post(
|
|
|
app.url_path_for(
|
|
app.url_path_for(
|
|
|
"update_member_role", organization_id=default_organization_id, user_id=non_member.id
|
|
"update_member_role", organization_id=default_organization_id, user_id=non_member.id
|
|
|
),
|
|
),
|
|
@@ -427,7 +492,11 @@ class TestRemoveMember:
|
|
|
assert response.status_code == 403
|
|
assert response.status_code == 403
|
|
|
|
|
|
|
|
async def test_super_admin_removes_member(
|
|
async def test_super_admin_removes_member(
|
|
|
- self, client: AsyncClient, default_organization: Organization, make_org_user, session: Session
|
|
|
|
|
|
|
+ self,
|
|
|
|
|
+ client: AsyncClient,
|
|
|
|
|
+ default_organization: Organization,
|
|
|
|
|
+ make_org_user,
|
|
|
|
|
+ session: Session,
|
|
|
):
|
|
):
|
|
|
target_user, _ = make_org_user(role=OrgRole.RESPO_BENEVOLE)
|
|
target_user, _ = make_org_user(role=OrgRole.RESPO_BENEVOLE)
|
|
|
_, admin_headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
_, admin_headers = make_org_user(role=None, global_role=GlobalRole.SUPER_ADMIN)
|
|
@@ -455,4 +524,4 @@ class TestRemoveMember:
|
|
|
),
|
|
),
|
|
|
headers=admin_headers,
|
|
headers=admin_headers,
|
|
|
)
|
|
)
|
|
|
- assert response.status_code == 404
|
|
|
|
|
|
|
+ assert response.status_code == 404
|