All checks were successful
技能自动化发布 / release (push) Successful in 15s
基于 skill-template 脚手架开发,包含: - 5 张业务表(教职工、请假政策、考勤日历、请假记录、假期余额) - 请假核算引擎(扣薪计算、审批层级判定、年假抵扣) - CLI 入口(import-employees / calculate-leave / render-html) - HTML 审批与扣薪报告生成 - 示例数据与完整测试套件(295 tests passed)
64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
import subprocess
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from service.account_client import AccountManagerError, pick_web_account
|
|
|
|
|
|
def _completed(payload: dict) -> subprocess.CompletedProcess[str]:
|
|
return subprocess.CompletedProcess(
|
|
args=["python", "account-manager"],
|
|
returncode=0,
|
|
stdout=json.dumps(payload, ensure_ascii=False),
|
|
stderr="",
|
|
)
|
|
|
|
|
|
class TestExplicitAccountLease(unittest.TestCase):
|
|
@patch("service.account_client._run_argv")
|
|
def test_explicit_account_id_is_reselected_with_lease(self, run_argv) -> None:
|
|
account = {
|
|
"id": 42,
|
|
"platform_key": "target-platform",
|
|
"account_label": "主账号",
|
|
"login_id": "user@example.com",
|
|
"profile_dir": "D:/data/profile-42",
|
|
"status": "active",
|
|
}
|
|
leased = {**account, "lease_token": "lease-42"}
|
|
run_argv.side_effect = [_completed(account), _completed(leased)]
|
|
|
|
result = pick_web_account("target-platform", account_id="42")
|
|
|
|
self.assertEqual(result["id"], 42)
|
|
self.assertEqual(result["lease_token"], "lease-42")
|
|
self.assertEqual(run_argv.call_args_list[0].args[0], ["account", "get", "42"])
|
|
pick_args = run_argv.call_args_list[1].args[0]
|
|
self.assertIn("pick-web", pick_args)
|
|
self.assertIn("--lease", pick_args)
|
|
self.assertIn("user@example.com", pick_args)
|
|
|
|
@patch("service.account_client._run_argv")
|
|
def test_missing_lease_token_is_rejected(self, run_argv) -> None:
|
|
account = {
|
|
"id": 42,
|
|
"platform_key": "target-platform",
|
|
"account_label": "主账号",
|
|
"login_id": "user@example.com",
|
|
"profile_dir": "D:/data/profile-42",
|
|
"status": "active",
|
|
}
|
|
run_argv.side_effect = [_completed(account), _completed(account)]
|
|
|
|
with self.assertRaises(AccountManagerError) as raised:
|
|
pick_web_account("target-platform", account_id="42")
|
|
|
|
self.assertEqual(raised.exception.code, "LEASE_REQUIRED")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|