返回 douyin-downloader
test_database_history.py
根目录 / tests / test_database_history.py
1 import os
2 import tempfile
3
4 import pytest
5
6 from storage.database import Database
7
8
9 @pytest.mark.asyncio
10 async def test_get_aweme_history_paginates():
11 with tempfile.TemporaryDirectory() as td:
12 db = Database(db_path=os.path.join(td, "t.db"))
13 await db.initialize()
14 for i in range(5):
15 await db.add_aweme(
16 {
17 "aweme_id": f"id{i}",
18 "aweme_type": "video",
19 "title": f"t{i}",
20 "author_id": "u1",
21 "author_name": "A",
22 "create_time": 1700000000 + i,
23 "file_path": f"/tmp/{i}",
24 "metadata": "{}",
25 }
26 )
27 page1 = await db.get_aweme_history(page=1, size=2)
28 page2 = await db.get_aweme_history(page=2, size=2)
29 assert len(page1["items"]) == 2
30 assert len(page2["items"]) == 2
31 assert page1["total"] == 5
32 await db.close()
33
34
35 @pytest.mark.asyncio
36 async def test_get_aweme_history_filters_by_author():
37 with tempfile.TemporaryDirectory() as td:
38 db = Database(db_path=os.path.join(td, "t.db"))
39 await db.initialize()
40 await db.add_aweme(
41 {
42 "aweme_id": "a",
43 "aweme_type": "video",
44 "title": "Aa",
45 "author_id": "u1",
46 "author_name": "Alice",
47 "create_time": 0,
48 "file_path": "/tmp/a",
49 "metadata": "{}",
50 }
51 )
52 await db.add_aweme(
53 {
54 "aweme_id": "b",
55 "aweme_type": "video",
56 "title": "Bb",
57 "author_id": "u2",
58 "author_name": "Bob",
59 "create_time": 0,
60 "file_path": "/tmp/b",
61 "metadata": "{}",
62 }
63 )
64 res = await db.get_aweme_history(page=1, size=10, author="Alice")
65 assert len(res["items"]) == 1
66 assert res["items"][0]["author_name"] == "Alice"
67 await db.close()
68
69
70 @pytest.mark.asyncio
71 async def test_get_aweme_history_filters_by_aweme_type():
72 with tempfile.TemporaryDirectory() as td:
73 db = Database(db_path=os.path.join(td, "t.db"))
74 await db.initialize()
75 await db.add_aweme(
76 {
77 "aweme_id": "a",
78 "aweme_type": "video",
79 "title": "",
80 "author_id": "u",
81 "author_name": "A",
82 "create_time": 0,
83 "file_path": "/tmp/a",
84 "metadata": "{}",
85 }
86 )
87 await db.add_aweme(
88 {
89 "aweme_id": "b",
90 "aweme_type": "note",
91 "title": "",
92 "author_id": "u",
93 "author_name": "A",
94 "create_time": 0,
95 "file_path": "/tmp/b",
96 "metadata": "{}",
97 }
98 )
99 res = await db.get_aweme_history(page=1, size=10, aweme_type="note")
100 assert len(res["items"]) == 1
101 assert res["items"][0]["aweme_id"] == "b"
102 await db.close()
103
104
105 @pytest.mark.asyncio
106 async def test_get_aweme_history_filters_by_title_substring():
107 with tempfile.TemporaryDirectory() as td:
108 db = Database(db_path=os.path.join(td, "t.db"))
109 await db.initialize()
110 for idx, title in enumerate(["abcDEF", "xyz", "FooABCbar", None]):
111 await db.add_aweme(
112 {
113 "aweme_id": f"id{idx}",
114 "aweme_type": "video",
115 "title": title,
116 "author_id": "u",
117 "author_name": "A",
118 "create_time": 0,
119 "file_path": f"/tmp/{idx}",
120 "metadata": "{}",
121 }
122 )
123 res = await db.get_aweme_history(page=1, size=10, title="abc")
124 titles = sorted(item["title"] for item in res["items"])
125 assert titles == ["FooABCbar", "abcDEF"]
126 await db.close()
127
128
129 @pytest.mark.asyncio
130 async def test_get_aweme_history_empty_db():
131 with tempfile.TemporaryDirectory() as td:
132 db = Database(db_path=os.path.join(td, "t.db"))
133 await db.initialize()
134 res = await db.get_aweme_history(page=1, size=10)
135 assert res == {"total": 0, "page": 1, "size": 10, "items": []}
136 await db.close()
137
137 lines PYTHON