from django.contrib.auth import get_user_model from django.contrib.auth.models import Group, Permission from django.core.management import call_command from apps.accounts.models import MenuItem, UserGroup def test_bootstrap_governance_seeds_admin_roles_groups_permissions_and_menus(db, settings): settings.DJANGO_SUPERUSER_USERNAME = "admin" settings.DJANGO_SUPERUSER_PASSWORD = "admin12345" settings.DJANGO_SUPERUSER_EMAIL = "admin@example.com" call_command("bootstrap_governance") call_command("bootstrap_governance") user = get_user_model().objects.get(username="admin") assert user.is_superuser is True assert user.check_password("admin12345") assert Group.objects.filter(name="系统管理员").exists() assert Permission.objects.filter(codename="system.user.manage").exists() assert UserGroup.objects.filter(code="default").exists() assert MenuItem.objects.filter(code="system.users", title="用户管理").exists() assert MenuItem.objects.filter(code="system.roles", permission_code="system.role.view").exists() assert MenuItem.objects.filter(code="workbench", path="#/", parent=None).exists() assert MenuItem.objects.filter( code="workbench.overview", is_visible=False, is_enabled=False ).exists() assert MenuItem.objects.filter(code="business", title="工单", sort_order=20).exists() knowledge = MenuItem.objects.get(code="knowledge") assert knowledge.title == "知识与方案" assert list(knowledge.children.order_by("sort_order").values_list("code", flat=True)) == [ "platform.knowledge", "knowledge.search", "business.solutions", ] assert MenuItem.objects.filter(code="platform.knowledge", is_enabled=True).exists() assert MenuItem.objects.filter(code="platform", title="AI 平台", sort_order=40).exists() assert MenuItem.objects.filter(code="system", sort_order=50).exists() def test_bootstrap_governance_migrates_legacy_english_roles(db, settings): legacy_group = Group.objects.create(name="Support Engineer") user = get_user_model().objects.create_user(username="support", password="password") user.groups.add(legacy_group) settings.DJANGO_SUPERUSER_USERNAME = "admin" settings.DJANGO_SUPERUSER_PASSWORD = "admin12345" settings.DJANGO_SUPERUSER_EMAIL = "admin@example.com" call_command("bootstrap_governance") assert not Group.objects.filter(name="Support Engineer").exists() support_role = Group.objects.get(name="技术支持") assert support_role.user_set.filter(username="support").exists()