feat(admin): 添加用户管理相关文件
添加用户管理视图、API和状态管理文件
This commit is contained in:
@@ -0,0 +1,227 @@
|
||||
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
|
||||
Reference in New Issue
Block a user