Files
zkxw/backend/tests/test_mini_menu.py
T
2026-10-13 15:18:01 +08:00

150 lines
4.4 KiB
Python

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from app.api.mini_menu import list_mobile_menu_items
from app.models.base import Base
from app.models.models import (
SysMenu,
SysPost,
SysPostRole,
SysRole,
SysRoleMenu,
SysUserPost,
SysUserRole,
)
def _session():
engine = create_engine("sqlite:///:memory:")
Base.metadata.create_all(
engine,
tables=[
SysMenu.__table__,
SysPost.__table__,
SysPostRole.__table__,
SysRole.__table__,
SysRoleMenu.__table__,
SysUserPost.__table__,
SysUserRole.__table__,
],
)
return sessionmaker(bind=engine)()
def _menu(*, menu_id, tenant_no, name, parent_id, path="", perms=None, menu_type="M", order_num=1):
return SysMenu(
id=menu_id,
menu_name=name,
parent_id=parent_id,
menu_type=menu_type,
path=path,
perms=perms,
visible="1",
status="1",
tenant_no=tenant_no,
order_num=order_num,
create_dept_id="",
del_flag=0,
)
def test_mobile_menu_query_uses_current_tenant_and_returns_leaf_group_title():
db = _session()
db.add_all(
[
_menu(
menu_id="tenant-a-root",
tenant_no="tenant-a",
name="移动端菜单",
parent_id="0",
),
_menu(
menu_id="tenant-a-market",
tenant_no="tenant-a",
name="市场部",
parent_id="tenant-a-root",
),
_menu(
menu_id="tenant-a-manager-presign",
tenant_no="tenant-a",
name="预签约订单(经理)",
parent_id="tenant-a-market",
path="/pages/market/webview/index?entry=manager-presign",
perms="mini:market:manager:presign",
menu_type="C",
),
_menu(
menu_id="tenant-b-root",
tenant_no="tenant-b",
name="移动端菜单",
parent_id="0",
),
_menu(
menu_id="tenant-b-market",
tenant_no="tenant-b",
name="市场部",
parent_id="tenant-b-root",
),
_menu(
menu_id="tenant-b-specialist-presign",
tenant_no="tenant-b",
name="预签约订单(专员)",
parent_id="tenant-b-market",
path="/pages/market/webview/index?entry=specialist-presign",
perms="mini:market:specialist:presign",
menu_type="C",
),
SysRole(
id="tenant-b-role",
role_name="市场专员",
status="1",
tenant_no="tenant-b",
create_dept_id="",
del_flag=0,
),
SysUserRole(
id="tenant-b-user-role",
user_id="u1",
role_id="tenant-b-role",
tenant_no="tenant-b",
create_dept_id="",
del_flag=0,
),
SysRoleMenu(
id="tenant-b-role-directory",
role_id="tenant-b-role",
menu_id="tenant-b-market",
tenant_no="tenant-b",
create_dept_id="",
del_flag=0,
),
SysRoleMenu(
id="tenant-b-role-leaf",
role_id="tenant-b-role",
menu_id="tenant-b-specialist-presign",
tenant_no="tenant-b",
create_dept_id="",
del_flag=0,
),
]
)
db.commit()
items = list_mobile_menu_items(db, user_id="u1", tenant_no="tenant-b")
assert {item["id"] for item in items} == {"tenant-b-specialist-presign"}
assert items[0]["groupTitle"] == "市场部"
assert items[0]["title"] == "预签约订单(专员)"
assert items[0]["path"] == (
"/pages/market/webview/index?entry=specialist-presign"
)
assert items[0]["icon"] == "market-presign"
assert items[0]["iconBg"] == "transparent"
def test_mobile_menu_query_requires_explicit_tenant():
db = _session()
assert list_mobile_menu_items(db, user_id="u1", tenant_no="") == []