76 lines
2.8 KiB
Python
76 lines
2.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Profile 目录浏览器快捷方式测试。"""
|
|
import os
|
|
import sys
|
|
|
|
import pytest
|
|
|
|
from util.profile_shortcut import _lnk_safe_filename, create_profile_browser_shortcut
|
|
|
|
|
|
class TestLnkSafeFilename:
|
|
def test_strips_forbidden_chars(self) -> None:
|
|
assert _lnk_safe_filename('小红书/测试:账号') == "小红书_测试_账号"
|
|
|
|
def test_empty_uses_fallback(self) -> None:
|
|
assert _lnk_safe_filename(" ") == "browser"
|
|
|
|
|
|
class TestCreateProfileBrowserShortcut:
|
|
def test_skips_non_windows(self, tmp_path, monkeypatch) -> None:
|
|
monkeypatch.setattr("util.profile_shortcut.sys.platform", "linux")
|
|
out = create_profile_browser_shortcut(str(tmp_path), "demo")
|
|
assert out is None
|
|
|
|
def test_skips_when_no_browser(self, tmp_path, monkeypatch) -> None:
|
|
monkeypatch.setattr("util.profile_shortcut.sys.platform", "win32")
|
|
monkeypatch.setattr(
|
|
"util.profile_shortcut.resolve_chromium_executable",
|
|
lambda: None,
|
|
)
|
|
out = create_profile_browser_shortcut(str(tmp_path), "demo")
|
|
assert out is None
|
|
|
|
@pytest.mark.skipif(sys.platform != "win32", reason="Windows .lnk only")
|
|
def test_creates_lnk_on_windows(self, tmp_path, monkeypatch) -> None:
|
|
from service.browser_service import resolve_chromium_executable
|
|
|
|
browser_exe = resolve_chromium_executable()
|
|
if not browser_exe:
|
|
pytest.skip("no Chrome/Edge installed")
|
|
|
|
label = "ShortcutTest"
|
|
out = create_profile_browser_shortcut(str(tmp_path), label)
|
|
assert out is not None
|
|
assert os.path.isfile(out)
|
|
assert out.endswith(f"{label}.lnk")
|
|
|
|
@pytest.mark.skipif(sys.platform != "win32", reason="Windows .lnk only")
|
|
def test_add_web_creates_shortcut(self, clean_db, fake_env, monkeypatch) -> None:
|
|
from service.browser_service import resolve_chromium_executable
|
|
from service.account_service import cmd_account_add_web
|
|
from db.accounts_repo import find_accounts
|
|
|
|
if not resolve_chromium_executable():
|
|
pytest.skip("no Chrome/Edge installed")
|
|
|
|
label = "Maersk shortcut test"
|
|
cmd_account_add_web(
|
|
platform_input="maersk",
|
|
login_id="shortcut@test.com",
|
|
login_id_type="email",
|
|
label=label,
|
|
tenant_id="tenant-test",
|
|
environment="production",
|
|
role="booking",
|
|
provider_code=None,
|
|
url=None,
|
|
extra_json_str=None,
|
|
profile_dir_override=None,
|
|
)
|
|
accs = find_accounts(platform_key="maersk")
|
|
assert len(accs) == 1
|
|
profile_dir = accs[0]["profile_dir"]
|
|
lnk_path = os.path.join(profile_dir, f"{label}.lnk")
|
|
assert os.path.isfile(lnk_path), f"expected shortcut at {lnk_path}"
|