feat(avatar): align authorization page with design

This commit is contained in:
stefanfeng
2026-08-19 17:05:22 +08:00
parent 2e2adeb9e2
commit cfcfe7146e
5 changed files with 585 additions and 1415 deletions
@@ -92,3 +92,67 @@ def test_authorization_requires_login_and_rejects_unknown_permissions(authorizat
},
).json()
assert invalid["code"] == 400
def test_avatar_permission_settings_default_and_persist(authorization_context):
context = authorization_context
endpoint = f"/api/avatar/{context['avatar'].id}/permission-settings"
initial = client.get(endpoint, headers=context["owner_headers"]).json()
assert initial["code"] == 200
assert initial["data"] == {
"avatarId": context["avatar"].id,
"permissions": ["friend", "chat"],
}
updated = client.put(
endpoint,
headers=context["owner_headers"],
json={"permissions": ["interact", "publish", "friend", "friend"]},
).json()
assert updated["code"] == 200
assert updated["data"]["permissions"] == ["friend", "publish", "interact"]
reloaded = client.get(endpoint, headers=context["owner_headers"]).json()
assert reloaded["data"]["permissions"] == ["friend", "publish", "interact"]
def test_avatar_permission_settings_allow_all_disabled(authorization_context):
context = authorization_context
endpoint = f"/api/avatar/{context['avatar'].id}/permission-settings"
response = client.put(
endpoint,
headers=context["owner_headers"],
json={"permissions": []},
).json()
assert response["code"] == 200
assert response["data"]["permissions"] == []
def test_avatar_permission_settings_validate_owner_and_permissions(authorization_context):
context = authorization_context
endpoint = f"/api/avatar/{context['avatar'].id}/permission-settings"
invalid = client.put(
endpoint,
headers=context["owner_headers"],
json={"permissions": ["takeover"]},
).json()
assert invalid["code"] == 400
missing = client.put(
endpoint,
headers=context["owner_headers"],
json={},
).json()
assert missing["code"] == 400
forbidden = client.get(
f"/api/avatar/{context['other_avatar'].id}/permission-settings",
headers=context["owner_headers"],
)
assert forbidden.status_code == 403
unauthenticated = client.get(endpoint)
assert unauthenticated.status_code == 401