import sys from pathlib import Path from types import SimpleNamespace BACKEND_ROOT = Path(__file__).resolve().parents[1] if str(BACKEND_ROOT) not in sys.path: sys.path.insert(0, str(BACKEND_ROOT)) from app.services.browser_cookie import BrowserCookieError, sync_browser_cookie from app.services.cookie_manager import CookieConfigManager def test_sync_browser_cookie_filters_platform_domain_and_persists(tmp_path, monkeypatch): manager = CookieConfigManager(filepath=str(tmp_path / "downloader.json")) def fake_extract(browser): assert browser == "chrome" return [ SimpleNamespace(domain=".youtube.com", name="SID", value="abc"), SimpleNamespace(domain="www.youtube.com", name="HSID", value="def"), SimpleNamespace(domain=".douyin.com", name="sessionid", value="skip"), SimpleNamespace(domain=".youtube.com", name="empty", value=""), ] monkeypatch.setattr("app.services.browser_cookie._extract_cookies_from_browser", fake_extract) result = sync_browser_cookie("youtube", "chrome", manager=manager) assert result == { "platform": "youtube", "browser": "chrome", "cookie": "SID=abc; HSID=def", "count": 2, } assert manager.get("youtube") == "SID=abc; HSID=def" assert manager.get_browser("youtube") == "chrome" def test_sync_browser_cookie_raises_when_browser_has_no_platform_cookie(tmp_path, monkeypatch): manager = CookieConfigManager(filepath=str(tmp_path / "downloader.json")) opened = [] monkeypatch.setattr( "app.services.browser_cookie._extract_cookies_from_browser", lambda browser: [SimpleNamespace(domain=".example.com", name="SID", value="abc")], ) monkeypatch.setattr( "app.services.browser_cookie._open_url_in_browser", lambda url, browser: opened.append((url, browser)) or True, ) try: sync_browser_cookie("bilibili", "safari", manager=manager) except BrowserCookieError as exc: assert "未找到 bilibili 对应的浏览器 Cookie" in str(exc) assert "已打开B站页面" in str(exc) else: raise AssertionError("Expected BrowserCookieError") assert opened == [("https://www.bilibili.com/", "safari")]