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="") == []