返回 douyin-downloader
test_url_parser.py
根目录 / tests / test_url_parser.py
1 from core.url_parser import URLParser
2
3
4 def test_parse_video_url():
5 url = "https://www.douyin.com/video/7320876060210373923"
6 parsed = URLParser.parse(url)
7
8 assert parsed is not None
9 assert parsed["type"] == "video"
10 assert parsed["aweme_id"] == "7320876060210373923"
11
12
13 def test_parse_gallery_url_sets_aweme_id():
14 url = "https://www.douyin.com/note/7320876060210373923"
15 parsed = URLParser.parse(url)
16
17 assert parsed is not None
18 assert parsed["type"] == "gallery"
19 assert parsed["aweme_id"] == "7320876060210373923"
20 assert parsed["note_id"] == "7320876060210373923"
21
22
23 def test_parse_gallery_path_url_sets_aweme_id():
24 url = "https://www.douyin.com/gallery/7320876060210373923"
25 parsed = URLParser.parse(url)
26
27 assert parsed is not None
28 assert parsed["type"] == "gallery"
29 assert parsed["aweme_id"] == "7320876060210373923"
30 assert parsed["note_id"] == "7320876060210373923"
31
32
33 def test_parse_collection_url_sets_mix_id():
34 url = "https://www.douyin.com/collection/7320876060210373923"
35 parsed = URLParser.parse(url)
36
37 assert parsed is not None
38 assert parsed["type"] == "collection"
39 assert parsed["mix_id"] == "7320876060210373923"
40
41
42 def test_parse_music_url_sets_music_id():
43 url = "https://www.douyin.com/music/7320876060210373923"
44 parsed = URLParser.parse(url)
45
46 assert parsed is not None
47 assert parsed["type"] == "music"
48 assert parsed["music_id"] == "7320876060210373923"
49
50
51 def test_parse_unsupported_url_returns_none():
52 url = "https://www.douyin.com/hashtag/123456"
53 assert URLParser.parse(url) is None
54
55
56 def test_parse_short_url_marks_as_short():
57 # 短链在 parser 层统一标记为 'short',交由 CLI 预先解析真实链接。
58 for url in (
59 "https://v.douyin.com/ab12cd/",
60 "http://v.douyin.com/ab12cd",
61 "v.douyin.com/ab12cd",
62 "https://v.iesdouyin.com/xyz789/",
63 ):
64 parsed = URLParser.parse(url)
65 assert parsed is not None, url
66 assert parsed["type"] == "short", url
67
68
69 def test_parse_live_url():
70 parsed = URLParser.parse("https://live.douyin.com/123456789")
71 assert parsed is not None
72 assert parsed["type"] == "live"
73 assert parsed["room_id"] == "123456789"
74
75 parsed = URLParser.parse("https://www.douyin.com/follow/live/987654321")
76 assert parsed is not None
77 assert parsed["type"] == "live"
78 assert parsed["room_id"] == "987654321"
79
79 lines PYTHON