File size: 2,271 Bytes
6cfe55f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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")]