08ea5fbe98
添加用户管理视图、API和状态管理文件
228 lines
7.6 KiB
Python
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
|