76 lines
2.2 KiB
Python
76 lines
2.2 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""account reveal-profile:打开 profile 目录(不启动浏览器)。"""
|
||
from __future__ import annotations
|
||
|
||
import json
|
||
import os
|
||
from unittest import mock
|
||
|
||
import pytest
|
||
|
||
|
||
def _insert_account(conn, *, profile_dir: str) -> int:
|
||
from db.accounts_repo import insert_account
|
||
from util.platforms import seed_platforms
|
||
|
||
seed_platforms(conn)
|
||
aid = insert_account(
|
||
conn,
|
||
platform_key="sohu",
|
||
account_label="reveal-test",
|
||
login_id="13800000000",
|
||
login_id_type="phone",
|
||
tenant_id=None,
|
||
environment="production",
|
||
role="default",
|
||
provider_code="sohu",
|
||
profile_dir=profile_dir,
|
||
url="https://mp.sohu.com",
|
||
extra_json=None,
|
||
now=1_700_000_000,
|
||
auth_strategy="password_auto",
|
||
session_persistent=1,
|
||
device_fingerprint=None,
|
||
)
|
||
conn.commit()
|
||
return aid
|
||
|
||
|
||
def test_reveal_profile_opens_dir(clean_db, tmp_path, capsys):
|
||
from service.browser_service import cmd_reveal_profile
|
||
|
||
profile = tmp_path / "profiles" / "sohu" / "reveal-test"
|
||
aid = _insert_account(clean_db, profile_dir=str(profile))
|
||
|
||
with mock.patch("service.browser_service.os.startfile") as startfile:
|
||
with mock.patch("service.browser_service.sys.platform", "win32"):
|
||
cmd_reveal_profile(str(aid))
|
||
|
||
startfile.assert_called_once()
|
||
called_path = startfile.call_args[0][0]
|
||
assert os.path.isdir(called_path)
|
||
assert os.path.abspath(str(profile)) == called_path
|
||
|
||
out = capsys.readouterr().out.strip()
|
||
payload = json.loads(out.splitlines()[-1])
|
||
assert payload["success"] is True
|
||
assert payload["data"]["account_id"] == aid
|
||
assert payload["data"]["profile_dir"] == called_path
|
||
|
||
|
||
def test_reveal_profile_missing_account(clean_db):
|
||
from service.browser_service import cmd_reveal_profile
|
||
|
||
with pytest.raises(SystemExit) as ei:
|
||
cmd_reveal_profile("999999")
|
||
assert ei.value.code == 1
|
||
|
||
|
||
def test_reveal_profile_empty_dir(clean_db):
|
||
from service.browser_service import cmd_reveal_profile
|
||
|
||
aid = _insert_account(clean_db, profile_dir="")
|
||
with pytest.raises(SystemExit) as ei:
|
||
cmd_reveal_profile(str(aid))
|
||
assert ei.value.code == 1
|