150 lines
4.4 KiB
Python
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="") == []
|
|
|