# -*- coding: utf-8 -*- """favsort HTTP 层测试(httpx MockTransport,不联网): uv run python tests/test_favsort_http.py """ import os import sys import httpx sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) sys.stdout.reconfigure(encoding="utf-8") import favsort # noqa: E402 def with_client(handler): client = httpx.Client(transport=httpx.MockTransport(handler)) original = favsort._HTTP_CLIENT favsort._HTTP_CLIENT = client return client, original def test_get_json_and_post_form_headers(): calls = [] def handler(request): calls.append(request) return httpx.Response(200, json={"code": 0, "data": []}) client, original = with_client(handler) try: cfg = {"cookie": "SESSDATA=x; buvid3=y"} assert favsort.get_json( cfg, "https://api.bilibili.com/x/test", auth=False ) == {"code": 0, "data": []} first = calls[0] assert first.headers["origin"] == "https://space.bilibili.com" assert first.headers["priority"] == "u=1, i" assert "Chrome/155.0.0.0" in first.headers["user-agent"] assert "SESSDATA" not in first.headers["cookie"] assert "buvid3=y" in first.headers["cookie"] favsort.post_form( cfg, "https://api.bilibili.com/x/v3/fav/resource/sort", {"a": "b"}, referer="https://space.bilibili.com/1/favlist?fid=2", ) post = calls[1] assert post.method == "POST" assert post.headers["content-type"] == "application/x-www-form-urlencoded" assert post.headers["referer"] == "https://space.bilibili.com/1/favlist?fid=2" assert post.content == b"a=b" assert "SESSDATA=x" in post.headers["cookie"] finally: favsort._HTTP_CLIENT = original client.close() def test_anonymous_failure_falls_back_to_full_cookie(): calls = [] def handler(request): calls.append(request) if len(calls) == 1: return httpx.Response(200, json={"code": -101, "message": "未登录"}) return httpx.Response(200, json={"code": 0, "data": []}) client, original = with_client(handler) try: cfg = {"cookie": "SESSDATA=x; buvid3=y"} assert favsort.get_json(cfg, "https://api.bilibili.com/x/test") == { "code": 0, "data": [], } assert len(calls) == 2 assert "SESSDATA" not in calls[0].headers["cookie"] assert "SESSDATA=x" in calls[1].headers["cookie"] finally: favsort._HTTP_CLIENT = original client.close() def main(): test_get_json_and_post_form_headers() test_anonymous_failure_falls_back_to_full_cookie() print("OK: favsort httpx 请求头与匿名回退测试全部通过") if __name__ == "__main__": main()