feat: take over host delete so profile dirs are removed
All checks were successful
技能自动化发布 / release (push) Successful in 7s
All checks were successful
技能自动化发布 / release (push) Successful in 7s
This commit is contained in:
54
tests/test_account_delete.py
Normal file
54
tests/test_account_delete.py
Normal file
@@ -0,0 +1,54 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""delete id 会删库记录和硬盘 Profile,避免假删除残留登录态。"""
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
|
||||
from db.accounts_repo import find_accounts, get_account_by_id
|
||||
|
||||
|
||||
def _add_web(**kwargs):
|
||||
from service.account_service import cmd_account_add_web
|
||||
|
||||
defaults = dict(
|
||||
platform_input="maersk",
|
||||
login_id="demo@maersk.com",
|
||||
login_id_type="email",
|
||||
label="Maersk delete test",
|
||||
tenant_id="tenant-demo",
|
||||
environment="simulator",
|
||||
role="booking",
|
||||
provider_code=None,
|
||||
url=None,
|
||||
extra_json_str=None,
|
||||
profile_dir_override=None,
|
||||
)
|
||||
defaults.update(kwargs)
|
||||
cmd_account_add_web(**defaults)
|
||||
|
||||
|
||||
def test_delete_by_id_removes_row_and_profile(clean_db, fake_env):
|
||||
from service.account_service import cmd_delete_by_id
|
||||
|
||||
_add_web()
|
||||
acc = find_accounts(platform_key="maersk")[0]
|
||||
profile_dir = acc["profile_dir"]
|
||||
marker = os.path.join(profile_dir, "Default", "Cookies")
|
||||
os.makedirs(os.path.dirname(marker), exist_ok=True)
|
||||
with open(marker, "w", encoding="utf-8") as handle:
|
||||
handle.write("session")
|
||||
assert os.path.isfile(marker)
|
||||
|
||||
cmd_delete_by_id(acc["id"])
|
||||
|
||||
assert get_account_by_id(acc["id"]) is None
|
||||
assert find_accounts(platform_key="maersk") == []
|
||||
assert not os.path.exists(profile_dir)
|
||||
|
||||
|
||||
def test_delete_by_id_missing_account(clean_db, capsys):
|
||||
from service.account_service import cmd_delete_by_id
|
||||
|
||||
cmd_delete_by_id(99999)
|
||||
out = capsys.readouterr().out
|
||||
assert "ERROR:ACCOUNT_NOT_FOUND" in out
|
||||
@@ -72,6 +72,26 @@ class TestRowOpenActions(unittest.TestCase):
|
||||
self.assertIn("enum", props["login_id_type"])
|
||||
self.assertIn("enum", props["status"])
|
||||
|
||||
def test_delete_takes_over_host_delete(self) -> None:
|
||||
delete = _by_id(_load_actions(), "account-delete")
|
||||
self.assertEqual(delete.get("replaces"), "delete")
|
||||
self.assertEqual(delete.get("placements") or [], [])
|
||||
self.assertEqual(delete.get("interaction"), "confirm")
|
||||
self.assertEqual(delete.get("label"), "删除账号")
|
||||
bind = delete.get("bind") or {}
|
||||
self.assertEqual(bind.get("tables"), ["accounts"])
|
||||
self.assertEqual(bind.get("inputMapping"), {"accountId": "$row.$pk"})
|
||||
self.assertEqual(
|
||||
(delete.get("entrypoint") or {}).get("command"),
|
||||
"delete",
|
||||
)
|
||||
self.assertEqual(
|
||||
(delete.get("entrypoint") or {}).get("args"),
|
||||
["id", "{{accountId}}"],
|
||||
)
|
||||
steps = delete.get("steps") or []
|
||||
self.assertTrue(any(s.get("do") == "reloadTable" for s in steps))
|
||||
|
||||
def test_copy_is_direct_row_action(self) -> None:
|
||||
copy = _by_id(_load_actions(), "account-copy")
|
||||
self.assertEqual(copy.get("label"), "复制")
|
||||
|
||||
Reference in New Issue
Block a user