88 lines
2.9 KiB
Python
88 lines
2.9 KiB
Python
from django.contrib.auth import get_user_model
|
|
from django.contrib.auth.models import Group
|
|
from django.core.management import call_command
|
|
|
|
from apps.accounts.models import MenuItem, UserGroup
|
|
|
|
|
|
def login_admin(client):
|
|
call_command("bootstrap_governance")
|
|
user = get_user_model().objects.get(username="admin")
|
|
client.force_login(user)
|
|
return user
|
|
|
|
|
|
def test_admin_manages_users_groups_roles_permissions_and_menus(client, db):
|
|
login_admin(client)
|
|
|
|
created_user = client.post(
|
|
"/api/accounts/users",
|
|
data={
|
|
"username": "support",
|
|
"display_name": "技术支持一号",
|
|
"email": "support@example.com",
|
|
"password": "Copper-River-42",
|
|
"is_active": True,
|
|
},
|
|
content_type="application/json",
|
|
)
|
|
assert created_user.status_code == 200
|
|
user_id = created_user.json()["id"]
|
|
|
|
user_group = client.post(
|
|
"/api/accounts/user-groups",
|
|
data={"name": "一线支持组", "code": "support_l1", "description": "处理一线工单"},
|
|
content_type="application/json",
|
|
)
|
|
assert user_group.status_code == 200
|
|
user_group_id = user_group.json()["id"]
|
|
|
|
members = client.post(
|
|
f"/api/accounts/user-groups/{user_group_id}/members",
|
|
data={"user_ids": [user_id]},
|
|
content_type="application/json",
|
|
)
|
|
assert members.status_code == 200
|
|
assert UserGroup.objects.get(id=user_group_id).users.filter(id=user_id).exists()
|
|
|
|
role = client.post(
|
|
"/api/accounts/roles",
|
|
data={"name": "工单观察员", "permission_codes": ["ticket.view"]},
|
|
content_type="application/json",
|
|
)
|
|
assert role.status_code == 200
|
|
role_id = role.json()["id"]
|
|
|
|
role_permissions = client.post(
|
|
f"/api/accounts/roles/{role_id}/permissions",
|
|
data={"permission_codes": ["ticket.view", "solution.view"]},
|
|
content_type="application/json",
|
|
)
|
|
assert role_permissions.status_code == 200
|
|
assert set(role_permissions.json()["permission_codes"]) == {"ticket.view", "solution.view"}
|
|
|
|
user_roles = client.post(
|
|
f"/api/accounts/users/{user_id}/roles",
|
|
data={"role_ids": [role_id]},
|
|
content_type="application/json",
|
|
)
|
|
assert user_roles.status_code == 200
|
|
assert Group.objects.get(id=role_id).user_set.filter(id=user_id).exists()
|
|
|
|
menus = client.get("/api/accounts/menus")
|
|
assert menus.status_code == 200
|
|
menu_id = MenuItem.objects.get(code="system.users").id
|
|
updated_menu = client.patch(
|
|
f"/api/accounts/menus/{menu_id}",
|
|
data={"title": "账号管理", "permission_code": "system.user.view"},
|
|
content_type="application/json",
|
|
)
|
|
assert updated_menu.status_code == 200
|
|
assert updated_menu.json()["title"] == "账号管理"
|
|
|
|
|
|
def test_anonymous_governance_access_is_denied(client, db):
|
|
response = client.get("/api/accounts/users")
|
|
|
|
assert response.status_code == 401
|