39 lines
2.0 KiB
Python

from app.services.dingtalk_auth import DingTalkAuthService
def test_dingtalk_role_mapping() -> None:
assert DingTalkAuthService.map_role("产品部", "产品经理") == "user"
assert DingTalkAuthService.map_role("品控部", "质量主管") == "user"
assert DingTalkAuthService.map_role("采购部", "采购专员") == "user"
assert DingTalkAuthService.map_role("", "审核员") == "user"
assert DingTalkAuthService.map_role("", "", is_admin=True) == "admin"
assert DingTalkAuthService.map_role("未知部门", "普通员工") == "user"
def test_dingtalk_sync_only_promotes_user_and_never_downgrades_admin() -> None:
assert DingTalkAuthService.resolve_synced_role("user", "admin") == "admin"
assert DingTalkAuthService.resolve_synced_role("user", "user") == "user"
assert DingTalkAuthService.resolve_synced_role("admin", "user") == "admin"
assert DingTalkAuthService.resolve_synced_role("admin", "admin") == "admin"
assert DingTalkAuthService.resolve_synced_role("reviewer", "admin") == "reviewer"
def test_dingtalk_manager_flag_variants() -> None:
assert DingTalkAuthService._is_dingtalk_manager({"admin": True})
assert DingTalkAuthService._is_dingtalk_manager({"leader_in_dept": [{"leader": True}]})
assert not DingTalkAuthService._is_dingtalk_manager({"admin": False, "leader_in_dept": []})
def test_dingtalk_detail_fields_are_normalized() -> None:
detail = {"nick": "张三", "dept_id_list": [123, "456"], "is_leader": True}
assert DingTalkAuthService._display_name(detail, "fallback") == "张三"
assert DingTalkAuthService._department_ids(detail) == [123, 456]
assert DingTalkAuthService._is_dingtalk_manager(detail)
def test_dingtalk_nested_detail_fields_are_supported() -> None:
detail = {"user": {"userName": "李四", "deptIdList": [789]}}
nested = detail["user"]
assert DingTalkAuthService._display_name(nested, "fallback") == "李四"
assert DingTalkAuthService._department_ids(nested) == [789]