Files
account-manager/tests/test_browser_open.py
chendelian 0f54204a61
All checks were successful
技能自动化发布 / release (push) Successful in 8s
fix: account open fire-and-forget; open-browser direct+sync
2026-07-31 11:43:11 +08:00

97 lines
2.9 KiB
Python

# -*- coding: utf-8 -*-
"""
Browser launch helper checks (no real browser started).
"""
import pytest
class TestPlaywrightLaunchHelpers:
"""Persistent context launch parts must match RPA contract."""
def test_persistent_context_includes_maximized(self):
from util.playwright_stealth import persistent_context_launch_parts
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 TestCmdOpenDetached:
def test_cmd_open_spawns_and_returns(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
seed_platforms(clean_db)
profile = tmp_path / "prof"
aid = insert_account(
clean_db,
platform_key="sohu",
account_label="open-test",
login_id="1",
login_id_type="phone",
tenant_id=None,
environment="production",
role="default",
provider_code="sohu",
profile_dir=str(profile),
url="https://example.com",
extra_json=None,
now=1_700_000_000,
auth_strategy="password_auto",
)
clean_db.commit()
monkeypatch.setattr(browser_service, "resolve_chromium_channel", lambda: "chrome")
class FakeProc:
pid = 4242
spawned = {}
def fake_spawn(cmd, *, cwd, env):
spawned["cmd"] = cmd
spawned["cwd"] = cwd
return FakeProc()
monkeypatch.setattr(browser_service, "_spawn_browser_child", fake_spawn)
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"]
class TestResolveChromiumChannel:
"""resolve_chromium_channel returns a channel string when browsers exist."""
def test_returns_string_or_none(self):
from service.browser_service import resolve_chromium_channel
ch = resolve_chromium_channel()
assert ch is None or ch in ("chrome", "msedge")