Files
张翔 08ea5fbe98 feat(admin): 添加用户管理相关文件
添加用户管理视图、API和状态管理文件
2026-03-28 14:37:29 +08:00

228 lines
7.6 KiB
Python

import pytest
from pages import MenuManagementPage
@pytest.mark.web
@pytest.mark.menu_management
class TestMenuManagement:
"""菜单管理测试类"""
@pytest.fixture(autouse=True)
def setup(self, web_page, test_config):
"""设置测试环境"""
self.page = web_page
self.config = test_config
self.menu_page = MenuManagementPage(self.page, test_config.base_url)
self.menu_page.navigate()
def test_menu_management_page_loaded(self):
"""测试菜单管理页面加载"""
assert self.menu_page.is_loaded()
def test_add_menu_success(self):
"""测试成功添加菜单"""
initial_count = self.menu_page.get_menu_count()
self.menu_page.click_add_menu()
self.menu_page.fill_menu_form(
{
"name": "测试菜单",
"path": "/test-menu",
"icon": "test-icon",
"sort_order": "1",
"parent_id": "",
"is_visible": True,
}
)
self.menu_page.save_menu()
assert self.menu_page.get_menu_count() == initial_count + 1
assert self.menu_page.is_menu_exists("测试菜单")
def test_add_sub_menu(self):
"""测试添加子菜单"""
menus = self.menu_page.get_menu_list()
if menus:
parent_id = menus[0]["id"]
initial_count = self.menu_page.get_menu_count()
self.menu_page.click_add_menu()
self.menu_page.fill_menu_form(
{
"name": "子菜单",
"path": "/sub-menu",
"icon": "sub-icon",
"sort_order": "1",
"parent_id": parent_id,
"is_visible": True,
}
)
self.menu_page.save_menu()
assert self.menu_page.get_menu_count() == initial_count + 1
assert self.menu_page.is_menu_exists("子菜单")
def test_add_hidden_menu(self):
"""测试添加隐藏菜单"""
initial_count = self.menu_page.get_menu_count()
self.menu_page.click_add_menu()
self.menu_page.fill_menu_form(
{
"name": "隐藏菜单",
"path": "/hidden-menu",
"icon": "hidden-icon",
"sort_order": "1",
"parent_id": "",
"is_visible": False,
}
)
self.menu_page.save_menu()
assert self.menu_page.get_menu_count() == initial_count + 1
assert self.menu_page.is_menu_exists("隐藏菜单")
def test_search_menu(self):
"""测试搜索菜单"""
self.menu_page.search_menu("用户")
menus = self.menu_page.get_menu_list()
assert any("用户" in menu["name"] for menu in menus)
def test_edit_menu(self):
"""测试编辑菜单"""
menus = self.menu_page.get_menu_list()
if menus:
menu_id = menus[0]["id"]
self.menu_page.edit_menu(menu_id)
self.menu_page.fill_menu_form({"name": "更新后的菜单名"})
self.menu_page.save_menu()
updated_menus = self.menu_page.get_menu_list()
updated_menu = next((m for m in updated_menus if m["id"] == menu_id), None)
assert updated_menu is not None
assert updated_menu["name"] == "更新后的菜单名"
def test_delete_menu(self):
"""测试删除菜单"""
initial_count = self.menu_page.get_menu_count()
self.menu_page.click_add_menu()
self.menu_page.fill_menu_form(
{
"name": "待删除菜单",
"path": "/to-delete",
"icon": "delete-icon",
"sort_order": "1",
"parent_id": "",
"is_visible": True,
}
)
self.menu_page.save_menu()
menus = self.menu_page.get_menu_list()
menu_to_delete = next((m for m in menus if m["name"] == "待删除菜单"), None)
if menu_to_delete:
self.menu_page.delete_menu(menu_to_delete["id"])
assert self.menu_page.get_menu_count() == initial_count
assert not self.menu_page.is_menu_exists("待删除菜单")
def test_expand_and_collapse_menu(self):
"""测试展开和折叠菜单"""
menus = self.menu_page.get_menu_list()
if menus:
menu_id = menus[0]["id"]
self.menu_page.expand_menu(menu_id)
expanded_menu = self.page.query_selector(f".menu-item[data-id='{menu_id}'].expanded")
assert expanded_menu is not None
self.menu_page.collapse_menu(menu_id)
collapsed_menu = self.page.query_selector(f".menu-item[data-id='{menu_id}'].collapsed")
assert collapsed_menu is not None
def test_get_menu_tree(self):
"""测试获取菜单树"""
tree = self.menu_page.get_menu_tree()
assert isinstance(tree, list)
assert len(tree) > 0
def test_drag_and_drop_menu(self):
"""测试拖拽菜单"""
menus = self.menu_page.get_menu_list()
if len(menus) >= 2:
source_id = menus[0]["id"]
target_id = menus[1]["id"]
self.menu_page.drag_and_drop_menu(source_id, target_id)
updated_menus = self.menu_page.get_menu_list()
assert len(updated_menus) == len(menus)
@pytest.mark.parametrize(
"name,path,icon,sort_order",
[
("菜单1", "/menu1", "icon1", "1"),
("菜单2", "/menu2", "icon2", "2"),
("菜单3", "/menu3", "icon3", "3"),
],
)
def test_add_multiple_menus(self, name, path, icon, sort_order):
"""测试添加多个菜单"""
initial_count = self.menu_page.get_menu_count()
self.menu_page.click_add_menu()
self.menu_page.fill_menu_form(
{
"name": name,
"path": path,
"icon": icon,
"sort_order": sort_order,
"parent_id": "",
"is_visible": True,
}
)
self.menu_page.save_menu()
assert self.menu_page.get_menu_count() == initial_count + 1
assert self.menu_page.is_menu_exists(name)
def test_cancel_menu_edit(self):
"""测试取消菜单编辑"""
menus = self.menu_page.get_menu_list()
if menus:
menu_id = menus[0]["id"]
original_name = menus[0]["name"]
self.menu_page.edit_menu(menu_id)
self.menu_page.fill_menu_form({"name": "临时菜单名"})
self.menu_page.cancel_edit()
updated_menus = self.menu_page.get_menu_list()
updated_menu = next((m for m in updated_menus if m["id"] == menu_id), None)
assert updated_menu is not None
assert updated_menu["name"] == original_name
def test_add_duplicate_menu(self):
"""测试添加重复菜单"""
menus = self.menu_page.get_menu_list()
if menus:
existing_menu = menus[0]
initial_count = self.menu_page.get_menu_count()
self.menu_page.click_add_menu()
self.menu_page.fill_menu_form(
{
"name": existing_menu["name"],
"path": "/duplicate",
"icon": "duplicate-icon",
"sort_order": "1",
"parent_id": "",
"is_visible": True,
}
)
self.menu_page.save_menu()
assert self.menu_page.get_menu_count() == initial_count