Files
leaudit-platform-backend/tests/release/test_g2_g3_tenant_entry_chain.py

91 lines
3.2 KiB
Python

from __future__ import annotations
import pytest
from .conftest import SeededUser, TenantSeed
from .helpers import ReleaseApiClient
def _set_module_tenants(admin_client: ReleaseApiClient, module_id: int, module_name: str, tenants: list[TenantSeed], path: str) -> dict:
payload = {
"name": module_name,
"description": "pytest release acceptance only",
"path": path,
"route_path": path,
"tenants": [
{
"tenant_code": tenant.tenant_code,
"tenant_name": tenant.tenant_name,
"enabled": True,
"sort_order": index,
}
for index, tenant in enumerate(tenants, start=1)
],
}
response = admin_client.put(f"/api/v3/entry-modules/{module_id}", json=payload, expected_status=200)
return ReleaseApiClient.json_data(response)
def _home_module_names(client: ReleaseApiClient) -> list[str]:
response = client.get("/api/home/entry-modules")
modules = ReleaseApiClient.json_data(response)
return [str(item.get("name") or "") for item in modules]
@pytest.mark.release
def test_g2_tenant_detail_and_user_tenant_switch(
admin_client: ReleaseApiClient,
anonymous_client: ReleaseApiClient,
tenant_a: TenantSeed,
tenant_common_user_a: SeededUser,
) -> None:
detail_response = admin_client.get(f"/api/v3/tenants/{tenant_a.tenant_code}")
detail = ReleaseApiClient.json_data(detail_response)
assert detail["tenant_code"] == tenant_a.tenant_code
assert detail["tenant_name"] == tenant_a.tenant_name
assert "home.entry_module" in detail["feature_keys"]
switch_response = admin_client.put(
f"/api/v3/rbac/users/{tenant_common_user_a.user_id}/tenant",
json={"tenant_code": tenant_a.tenant_code},
expected_status=200,
)
switch_data = ReleaseApiClient.json_data(switch_response)
assert switch_data["tenant_code"] == tenant_a.tenant_code
relogin = anonymous_client.login_oauth(
sub=tenant_common_user_a.sub,
username=tenant_common_user_a.username,
nickname=tenant_common_user_a.nickname,
ou_id=f"pytest-{tenant_a.tenant_code.lower()}",
ou_name=f"{tenant_a.tenant_name}测试组织",
area=tenant_a.tenant_name,
)
assert relogin["user_info"]["tenant_code"] == tenant_a.tenant_code
@pytest.mark.release
def test_g3_entry_module_visibility_follows_tenant_assignment(
admin_client: ReleaseApiClient,
release_entry_module: dict,
release_config,
tenant_a: TenantSeed,
tenant_b: TenantSeed,
common_api_a: ReleaseApiClient,
common_api_b: ReleaseApiClient,
) -> None:
module_id = int(release_entry_module["id"])
module_name = str(release_entry_module["name"])
_set_module_tenants(admin_client, module_id, module_name, [tenant_b], release_config.module_path)
names_a = _home_module_names(common_api_a)
names_b = _home_module_names(common_api_b)
assert module_name not in names_a
assert module_name in names_b
_set_module_tenants(admin_client, module_id, module_name, [tenant_a, tenant_b], release_config.module_path)
names_a = _home_module_names(common_api_a)
names_b = _home_module_names(common_api_b)
assert module_name in names_a
assert module_name in names_b