test_mini_menu.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. from sqlalchemy import create_engine
  2. from sqlalchemy.orm import sessionmaker
  3. from app.api.mini_menu import list_mobile_menu_items
  4. from app.models.base import Base
  5. from app.models.models import (
  6. SysMenu,
  7. SysPost,
  8. SysPostRole,
  9. SysRole,
  10. SysRoleMenu,
  11. SysUserPost,
  12. SysUserRole,
  13. )
  14. def _session():
  15. engine = create_engine("sqlite:///:memory:")
  16. Base.metadata.create_all(
  17. engine,
  18. tables=[
  19. SysMenu.__table__,
  20. SysPost.__table__,
  21. SysPostRole.__table__,
  22. SysRole.__table__,
  23. SysRoleMenu.__table__,
  24. SysUserPost.__table__,
  25. SysUserRole.__table__,
  26. ],
  27. )
  28. return sessionmaker(bind=engine)()
  29. def _menu(*, menu_id, tenant_no, name, parent_id, path="", perms=None, menu_type="M", order_num=1):
  30. return SysMenu(
  31. id=menu_id,
  32. menu_name=name,
  33. parent_id=parent_id,
  34. menu_type=menu_type,
  35. path=path,
  36. perms=perms,
  37. visible="1",
  38. status="1",
  39. tenant_no=tenant_no,
  40. order_num=order_num,
  41. create_dept_id="",
  42. del_flag=0,
  43. )
  44. def test_mobile_menu_query_uses_current_tenant_and_returns_leaf_group_title():
  45. db = _session()
  46. db.add_all(
  47. [
  48. _menu(
  49. menu_id="tenant-a-root",
  50. tenant_no="tenant-a",
  51. name="移动端菜单",
  52. parent_id="0",
  53. ),
  54. _menu(
  55. menu_id="tenant-a-market",
  56. tenant_no="tenant-a",
  57. name="市场部",
  58. parent_id="tenant-a-root",
  59. ),
  60. _menu(
  61. menu_id="tenant-a-manager-presign",
  62. tenant_no="tenant-a",
  63. name="预签约订单(经理)",
  64. parent_id="tenant-a-market",
  65. path="/pages/market/webview/index?entry=manager-presign",
  66. perms="mini:market:manager:presign",
  67. menu_type="C",
  68. ),
  69. _menu(
  70. menu_id="tenant-b-root",
  71. tenant_no="tenant-b",
  72. name="移动端菜单",
  73. parent_id="0",
  74. ),
  75. _menu(
  76. menu_id="tenant-b-market",
  77. tenant_no="tenant-b",
  78. name="市场部",
  79. parent_id="tenant-b-root",
  80. ),
  81. _menu(
  82. menu_id="tenant-b-specialist-presign",
  83. tenant_no="tenant-b",
  84. name="预签约订单(专员)",
  85. parent_id="tenant-b-market",
  86. path="/pages/market/webview/index?entry=specialist-presign",
  87. perms="mini:market:specialist:presign",
  88. menu_type="C",
  89. ),
  90. SysRole(
  91. id="tenant-b-role",
  92. role_name="市场专员",
  93. status="1",
  94. tenant_no="tenant-b",
  95. create_dept_id="",
  96. del_flag=0,
  97. ),
  98. SysUserRole(
  99. id="tenant-b-user-role",
  100. user_id="u1",
  101. role_id="tenant-b-role",
  102. tenant_no="tenant-b",
  103. create_dept_id="",
  104. del_flag=0,
  105. ),
  106. SysRoleMenu(
  107. id="tenant-b-role-directory",
  108. role_id="tenant-b-role",
  109. menu_id="tenant-b-market",
  110. tenant_no="tenant-b",
  111. create_dept_id="",
  112. del_flag=0,
  113. ),
  114. SysRoleMenu(
  115. id="tenant-b-role-leaf",
  116. role_id="tenant-b-role",
  117. menu_id="tenant-b-specialist-presign",
  118. tenant_no="tenant-b",
  119. create_dept_id="",
  120. del_flag=0,
  121. ),
  122. ]
  123. )
  124. db.commit()
  125. items = list_mobile_menu_items(db, user_id="u1", tenant_no="tenant-b")
  126. assert {item["id"] for item in items} == {"tenant-b-specialist-presign"}
  127. assert items[0]["groupTitle"] == "市场部"
  128. assert items[0]["title"] == "预签约订单(专员)"
  129. assert items[0]["path"] == (
  130. "/pages/market/webview/index?entry=specialist-presign"
  131. )
  132. assert items[0]["icon"] == "market-presign"
  133. assert items[0]["iconBg"] == "transparent"
  134. def test_mobile_menu_query_requires_explicit_tenant():
  135. db = _session()
  136. assert list_mobile_menu_items(db, user_id="u1", tenant_no="") == []