fix: account open launches Chrome/Edge directly like reveal-profile
All checks were successful
技能自动化发布 / release (push) Successful in 6s

This commit is contained in:
2026-07-31 11:58:18 +08:00
parent 0f54204a61
commit 87877010ac
6 changed files with 80 additions and 165 deletions

View File

@@ -2,6 +2,9 @@
"""
Browser launch helper checks (no real browser started).
"""
import json
from unittest import mock
import pytest
@@ -14,28 +17,11 @@ class TestPlaywrightLaunchHelpers:
args, _ignore = persistent_context_launch_parts()
assert "--start-maximized" in args
def test_open_child_runner_cleans_config_after_read(self):
import os
path = os.path.join(
os.path.dirname(__file__),
"..",
"scripts",
"service",
"open_child_runner.py",
)
path = os.path.abspath(path)
with open(path, encoding="utf-8") as f:
src = f.read()
assert "os.unlink(cfg_path)" in src
assert "wait_for_event" in src
assert "launch_persistent_context" in src
assert "headless=False" in src
assert "no_viewport=True" in src
class TestCmdOpenDirectBrowser:
"""account open = same-process Chrome/Edge launch (like reveal-profile)."""
class TestCmdOpenDetached:
def test_cmd_open_spawns_and_returns(self, clean_db, tmp_path, capsys, monkeypatch):
def test_cmd_open_launches_browser_exe(self, clean_db, tmp_path, capsys, monkeypatch):
from db.accounts_repo import insert_account
from service import browser_service
from util.platforms import seed_platforms
@@ -60,30 +46,39 @@ class TestCmdOpenDetached:
)
clean_db.commit()
monkeypatch.setattr(browser_service, "resolve_chromium_channel", lambda: "chrome")
fake_exe = str(tmp_path / "chrome.exe")
monkeypatch.setattr(
browser_service,
"resolve_chromium_executable",
lambda: fake_exe,
)
class FakeProc:
pid = 4242
pid = 5252
spawned = {}
def fake_spawn(cmd, *, cwd, env):
spawned["cmd"] = cmd
spawned["cwd"] = cwd
def fake_popen(cmd, **kwargs):
spawned["cmd"] = list(cmd)
spawned["kwargs"] = kwargs
return FakeProc()
monkeypatch.setattr(browser_service, "_spawn_browser_child", fake_spawn)
monkeypatch.setattr(browser_service.subprocess, "Popen", fake_popen)
browser_service.cmd_open(str(aid))
out = capsys.readouterr().out.strip()
import json
payload = json.loads(out.splitlines()[-1])
assert payload["success"] is True
assert payload["data"]["detached"] is True
assert payload["data"]["pid"] == 4242
assert "-m" in spawned["cmd"]
assert "service.open_child_runner" in spawned["cmd"]
assert payload["data"]["pid"] == 5252
assert payload["data"]["browser_exe"] == fake_exe
assert spawned["cmd"][0] == fake_exe
assert spawned["cmd"][1].startswith("--user-data-dir=")
assert spawned["cmd"][2] == "https://example.com"
# must NOT spawn python / open_child_runner
joined = " ".join(spawned["cmd"])
assert "open_child_runner" not in joined
assert "python" not in joined.lower()
class TestResolveChromiumChannel: