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

1"""測試基本 CRUD 功能""" 

2 

3import pytest 

4from dataclasses import dataclass 

5from autocrud import AutoCRUD, MemoryStorage 

6 

7 

8@dataclass 

9class User: 

10 name: str 

11 email: str 

12 age: int 

13 

14 

15class TestBasicCrud: 

16 """測試基本 CRUD 功能""" 

17 

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 ) 

26 

27 created_user = crud.create(sample_user_data) 

28 

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) 

34 

35 def test_get_user(self, sample_user_data): 

36 """測試獲取用戶""" 

37 storage = MemoryStorage() 

38 crud = AutoCRUD(model=User, storage=storage, resource_name="users") 

39 

40 # 先創建用戶 

41 created_user = crud.create(sample_user_data) 

42 user_id = created_user['id'] 

43 

44 # 獲取用戶 

45 retrieved_user = crud.get(user_id) 

46 

47 assert retrieved_user is not None 

48 assert retrieved_user['id'] == user_id 

49 assert retrieved_user['name'] == sample_user_data['name'] 

50 

51 def test_get_nonexistent_user(self): 

52 """測試獲取不存在的用戶""" 

53 storage = MemoryStorage() 

54 crud = AutoCRUD(model=User, storage=storage, resource_name="users") 

55 

56 result = crud.get("nonexistent-id") 

57 assert result is None 

58 

59 def test_update_user(self, sample_user_data): 

60 """測試更新用戶""" 

61 storage = MemoryStorage() 

62 crud = AutoCRUD(model=User, storage=storage, resource_name="users") 

63 

64 # 創建用戶 

65 created_user = crud.create(sample_user_data) 

66 user_id = created_user['id'] 

67 

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) 

75 

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 

81 

82 def test_update_nonexistent_user(self, sample_user_data): 

83 """測試更新不存在的用戶""" 

84 storage = MemoryStorage() 

85 crud = AutoCRUD(model=User, storage=storage, resource_name="users") 

86 

87 result = crud.update("nonexistent-id", sample_user_data) 

88 assert result is None 

89 

90 def test_delete_user(self, sample_user_data): 

91 """測試刪除用戶""" 

92 storage = MemoryStorage() 

93 crud = AutoCRUD(model=User, storage=storage, resource_name="users") 

94 

95 # 創建用戶 

96 created_user = crud.create(sample_user_data) 

97 user_id = created_user['id'] 

98 

99 # 確認用戶存在 

100 assert crud.exists(user_id) is True 

101 

102 # 刪除用戶 

103 deleted = crud.delete(user_id) 

104 assert deleted is True 

105 

106 # 確認用戶不存在 

107 assert crud.exists(user_id) is False 

108 assert crud.get(user_id) is None 

109 

110 def test_delete_nonexistent_user(self): 

111 """測試刪除不存在的用戶""" 

112 storage = MemoryStorage() 

113 crud = AutoCRUD(model=User, storage=storage, resource_name="users") 

114 

115 result = crud.delete("nonexistent-id") 

116 assert result is False 

117 

118 def test_list_all_users(self, sample_user_data): 

119 """測試列出所有用戶""" 

120 storage = MemoryStorage() 

121 crud = AutoCRUD(model=User, storage=storage, resource_name="users") 

122 

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) 

127 

128 # 列出所有用戶 

129 all_users = crud.list_all() 

130 

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" 

136 

137 def test_exists_user(self, sample_user_data): 

138 """測試檢查用戶是否存在""" 

139 storage = MemoryStorage() 

140 crud = AutoCRUD(model=User, storage=storage, resource_name="users") 

141 

142 # 創建用戶 

143 created_user = crud.create(sample_user_data) 

144 user_id = created_user['id'] 

145 

146 # 測試存在的用戶 

147 assert crud.exists(user_id) is True 

148 

149 # 測試不存在的用戶 

150 assert crud.exists("nonexistent-id") is False