Coverage for tests/test_basic_crud.py: 100%
83 statements
« prev ^ index » next coverage.py v7.9.2, created at 2025-07-23 23:00 +0800
« prev ^ index » next coverage.py v7.9.2, created at 2025-07-23 23:00 +0800
1"""測試基本 CRUD 功能"""
3import pytest
4from dataclasses import dataclass
5from autocrud import AutoCRUD, MemoryStorage
8@dataclass
9class User:
10 name: str
11 email: str
12 age: int
15class TestBasicCrud:
16 """測試基本 CRUD 功能"""
18 def test_create_user(self, sample_user_data):
19 """測試創建用戶"""
20 storage = MemoryStorage()
21 crud = AutoCRUD(
22 model=User,
23 storage=storage,
24 resource_name="users"
25 )
27 created_user = crud.create(sample_user_data)
29 assert created_user['name'] == sample_user_data['name']
30 assert created_user['email'] == sample_user_data['email']
31 assert created_user['age'] == sample_user_data['age']
32 assert 'id' in created_user
33 assert isinstance(created_user['id'], str)
35 def test_get_user(self, sample_user_data):
36 """測試獲取用戶"""
37 storage = MemoryStorage()
38 crud = AutoCRUD(model=User, storage=storage, resource_name="users")
40 # 先創建用戶
41 created_user = crud.create(sample_user_data)
42 user_id = created_user['id']
44 # 獲取用戶
45 retrieved_user = crud.get(user_id)
47 assert retrieved_user is not None
48 assert retrieved_user['id'] == user_id
49 assert retrieved_user['name'] == sample_user_data['name']
51 def test_get_nonexistent_user(self):
52 """測試獲取不存在的用戶"""
53 storage = MemoryStorage()
54 crud = AutoCRUD(model=User, storage=storage, resource_name="users")
56 result = crud.get("nonexistent-id")
57 assert result is None
59 def test_update_user(self, sample_user_data):
60 """測試更新用戶"""
61 storage = MemoryStorage()
62 crud = AutoCRUD(model=User, storage=storage, resource_name="users")
64 # 創建用戶
65 created_user = crud.create(sample_user_data)
66 user_id = created_user['id']
68 # 更新用戶
69 updated_data = {
70 "name": "Alice Smith",
71 "email": "alice.smith@example.com",
72 "age": 31
73 }
74 updated_user = crud.update(user_id, updated_data)
76 assert updated_user is not None
77 assert updated_user['id'] == user_id
78 assert updated_user['name'] == "Alice Smith"
79 assert updated_user['email'] == "alice.smith@example.com"
80 assert updated_user['age'] == 31
82 def test_update_nonexistent_user(self, sample_user_data):
83 """測試更新不存在的用戶"""
84 storage = MemoryStorage()
85 crud = AutoCRUD(model=User, storage=storage, resource_name="users")
87 result = crud.update("nonexistent-id", sample_user_data)
88 assert result is None
90 def test_delete_user(self, sample_user_data):
91 """測試刪除用戶"""
92 storage = MemoryStorage()
93 crud = AutoCRUD(model=User, storage=storage, resource_name="users")
95 # 創建用戶
96 created_user = crud.create(sample_user_data)
97 user_id = created_user['id']
99 # 確認用戶存在
100 assert crud.exists(user_id) is True
102 # 刪除用戶
103 deleted = crud.delete(user_id)
104 assert deleted is True
106 # 確認用戶不存在
107 assert crud.exists(user_id) is False
108 assert crud.get(user_id) is None
110 def test_delete_nonexistent_user(self):
111 """測試刪除不存在的用戶"""
112 storage = MemoryStorage()
113 crud = AutoCRUD(model=User, storage=storage, resource_name="users")
115 result = crud.delete("nonexistent-id")
116 assert result is False
118 def test_list_all_users(self, sample_user_data):
119 """測試列出所有用戶"""
120 storage = MemoryStorage()
121 crud = AutoCRUD(model=User, storage=storage, resource_name="users")
123 # 創建多個用戶
124 user1 = crud.create(sample_user_data)
125 user2_data = {"name": "Bob", "email": "bob@example.com", "age": 25}
126 user2 = crud.create(user2_data)
128 # 列出所有用戶
129 all_users = crud.list_all()
131 assert len(all_users) == 2
132 assert user1['id'] in all_users
133 assert user2['id'] in all_users
134 assert all_users[user1['id']]['name'] == "Alice"
135 assert all_users[user2['id']]['name'] == "Bob"
137 def test_exists_user(self, sample_user_data):
138 """測試檢查用戶是否存在"""
139 storage = MemoryStorage()
140 crud = AutoCRUD(model=User, storage=storage, resource_name="users")
142 # 創建用戶
143 created_user = crud.create(sample_user_data)
144 user_id = created_user['id']
146 # 測試存在的用戶
147 assert crud.exists(user_id) is True
149 # 測試不存在的用戶
150 assert crud.exists("nonexistent-id") is False