11"""Dashboard Client 单元测试"""
22
3+ import sys
4+ from pathlib import Path
35from unittest .mock import AsyncMock , Mock
46
57import httpx
68import pytest
79import respx
810
11+ sys .path .insert (0 , str (Path (__file__ ).parent .parent .parent / "src" ))
12+
913from api .dashboard_client import DashboardClient , DashboardError
1014from api .models import DashboardData , SearchCounters
1115
@@ -15,12 +19,14 @@ def mock_page():
1519 """Mock Playwright Page 对象"""
1620 page = Mock ()
1721 page .context = Mock ()
18- page .context .cookies = AsyncMock (
19- return_value = [
22+
23+ async def mock_cookies (urls = None ):
24+ return [
2025 {"name" : "cookie1" , "value" : "value1" , "domain" : "rewards.bing.com" },
2126 {"name" : "cookie2" , "value" : "value2" , "domain" : ".rewards.bing.com" },
2227 ]
23- )
28+
29+ page .context .cookies = mock_cookies
2430 page .content = AsyncMock (
2531 return_value = """
2632 <html>
@@ -58,9 +64,11 @@ def mock_page_no_dashboard():
5864 """没有 dashboard 变量的 Mock Page"""
5965 page = Mock ()
6066 page .context = Mock ()
61- page .context .cookies = AsyncMock (
62- return_value = [{"name" : "cookie1" , "value" : "value1" , "domain" : "rewards.bing.com" }]
63- )
67+
68+ async def mock_cookies (urls = None ):
69+ return [{"name" : "cookie1" , "value" : "value1" , "domain" : "rewards.bing.com" }]
70+
71+ page .context .cookies = mock_cookies
6472 page .content = AsyncMock (return_value = "<html><body>no dashboard</body></html>" )
6573 return page
6674
@@ -525,22 +533,20 @@ async def test_search_counters_handles_scalar_values():
525533
526534
527535async def test_cookie_filtering_by_domain (mock_page ):
528- """测试 Cookie 按域名严格过滤"""
529- mock_page .context .cookies = AsyncMock (
530- return_value = [
536+ """测试 Cookie 使用 Playwright URL 作用域选择"""
537+
538+ async def mock_cookies (urls = None ):
539+ return [
531540 {"name" : "bing_cookie" , "value" : "bing_value" , "domain" : "bing.com" },
532541 {"name" : "rewards_cookie" , "value" : "rewards_value" , "domain" : "rewards.bing.com" },
533542 {"name" : "rewards_sub_cookie" , "value" : "sub_value" , "domain" : ".rewards.bing.com" },
534- {"name" : "login_cookie" , "value" : "login_value" , "domain" : "login.live.com" },
535- {"name" : "microsoft_cookie" , "value" : "ms_value" , "domain" : "microsoft.com" },
536543 ]
537- )
544+
545+ mock_page .context .cookies = mock_cookies
538546
539547 client = DashboardClient (mock_page )
540548 cookies = await client ._get_cookies_header ()
541549
542- assert "bing_cookie=bing_value" not in cookies
550+ assert "bing_cookie=bing_value" in cookies
543551 assert "rewards_cookie=rewards_value" in cookies
544552 assert "rewards_sub_cookie=sub_value" in cookies
545- assert "login_cookie=login_value" not in cookies
546- assert "microsoft_cookie=ms_value" not in cookies
0 commit comments