Coverage for tests/test_annotation.py: 100%

103 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-01 22:07 +0000

1import datetime 

2 

3import pytest 

4 

5from pepdbagent.exceptions import FilterError, ProjectNotFoundError 

6 

7from .utils import PEPDBAgentContextManager 

8 

9 

10@pytest.mark.skipif( 

11 not PEPDBAgentContextManager().db_setup(), 

12 reason="DB is not setup", 

13) 

14class TestAnnotation: 

15 """ 

16 Test function within annotation class 

17 """ 

18 

19 @pytest.mark.parametrize( 

20 "namespace, name", 

21 [ 

22 ["namespace1", "amendments1"], 

23 ["namespace1", "amendments2"], 

24 ["namespace2", "derive"], 

25 ["namespace2", "imply"], 

26 ["namespace3", "subtable1"], 

27 ], 

28 ) 

29 def test_annotation_of_one_project(self, namespace, name): 

30 with PEPDBAgentContextManager(add_data=True) as agent: 

31 result = agent.annotation.get( 

32 namespace=namespace, 

33 name=name, 

34 tag="default", 

35 ) 

36 assert result.results[0].namespace == namespace 

37 

38 @pytest.mark.parametrize( 

39 "namespace, name", 

40 [ 

41 ["namespace6", "amendments1"], 

42 ], 

43 ) 

44 def test_annotation_of_one_non_existing_project(self, namespace, name): 

45 with PEPDBAgentContextManager(add_data=True) as agent: 

46 with pytest.raises(ProjectNotFoundError): 

47 agent.annotation.get( 

48 namespace=namespace, 

49 name=name, 

50 tag="default", 

51 ) 

52 

53 @pytest.mark.parametrize( 

54 "namespace, n_projects", 

55 [ 

56 ["namespace1", 6], 

57 ["namespace2", 8], 

58 ["namespace3", 10], 

59 ["private", 0], 

60 ["private_test", 0], 

61 ], 

62 ) 

63 def test_annotation_all(self, namespace, n_projects): 

64 with PEPDBAgentContextManager(add_data=True) as agent: 

65 result = agent.annotation.get( 

66 namespace=namespace, 

67 ) 

68 assert result.count == n_projects 

69 assert len(result.results) == n_projects 

70 

71 @pytest.mark.parametrize( 

72 "namespace, n_projects", 

73 [ 

74 ["namespace1", 6], 

75 ["namespace2", 8], 

76 ["namespace3", 10], 

77 ["private", 0], 

78 ["private_test", 6], 

79 ], 

80 ) 

81 @pytest.mark.parametrize("admin", ("private_test", ["private_test", "bbb"])) 

82 def test_annotation_all_private(self, namespace, n_projects, admin): 

83 with PEPDBAgentContextManager(add_data=True) as agent: 

84 result = agent.annotation.get(namespace=namespace, admin=admin) 

85 assert result.count == n_projects 

86 assert len(result.results) == n_projects 

87 

88 @pytest.mark.parametrize( 

89 "namespace, limit, n_projects", 

90 [ 

91 ["namespace1", 3, 6], 

92 ["namespace2", 2, 8], 

93 ["namespace3", 8, 10], 

94 ["private", 0, 0], 

95 ["private_test", 5, 6], 

96 ], 

97 ) 

98 @pytest.mark.parametrize("admin", ("private_test", ["private_test", "bbb"])) 

99 def test_annotation_limit(self, namespace, limit, admin, n_projects): 

100 with PEPDBAgentContextManager(add_data=True) as agent: 

101 result = agent.annotation.get(namespace=namespace, admin=admin, limit=limit) 

102 assert result.count == n_projects 

103 assert len(result.results) == limit 

104 

105 @pytest.mark.parametrize( 

106 "namespace, order_by, first_name", 

107 [ 

108 ["namespace1", "name", "amendments1"], 

109 ["namespace2", "name", "biocproject_exceptions"], 

110 ["namespace3", "name", "node_alias"], 

111 ["private_test", "name", "amendments1"], 

112 ], 

113 ) 

114 @pytest.mark.parametrize("admin", ["private_test"]) 

115 def test_order_by(self, namespace, admin, order_by, first_name): 

116 with PEPDBAgentContextManager(add_data=True) as agent: 

117 result = agent.annotation.get( 

118 namespace=namespace, admin=admin, order_by=order_by 

119 ) 

120 assert result.results[0].name == first_name 

121 

122 @pytest.mark.parametrize( 

123 "namespace, order_by, last_name", 

124 [ 

125 ["namespace1", "name", "biocproject"], 

126 ["namespace2", "name", "imports"], 

127 ["namespace3", "name", "subtables"], 

128 ["private_test", "name", "subtable3"], 

129 ], 

130 ) 

131 @pytest.mark.parametrize("admin", ["private_test"]) 

132 def test_order_by_desc(self, namespace, admin, order_by, last_name): 

133 with PEPDBAgentContextManager(add_data=True) as agent: 

134 result = agent.annotation.get( 

135 namespace=namespace, 

136 admin=admin, 

137 order_by=order_by, 

138 order_desc=True, 

139 ) 

140 assert result.results[0].name == last_name 

141 

142 @pytest.mark.parametrize( 

143 "namespace, query, found_number", 

144 [ 

145 ["namespace1", "ame", 2], 

146 ["namespace2", "proj", 2], 

147 ["namespace3", "ABLE", 6], 

148 ["private_test", "a", 0], 

149 [None, "re", 2], 

150 ], 

151 ) 

152 def test_name_search(self, namespace, query, found_number): 

153 with PEPDBAgentContextManager(add_data=True) as agent: 

154 result = agent.annotation.get(namespace=namespace, query=query) 

155 assert len(result.results) == found_number 

156 

157 @pytest.mark.parametrize( 

158 "namespace, query, found_number", 

159 [ 

160 ["namespace1", "ame", 2], 

161 ["namespace2", "proj", 2], 

162 ["namespace3", "ABLE", 6], 

163 ["private_test", "b", 2], 

164 [None, "re", 3], 

165 ], 

166 ) 

167 def test_name_search_private(self, namespace, query, found_number): 

168 with PEPDBAgentContextManager(add_data=True) as agent: 

169 result = agent.annotation.get( 

170 namespace=namespace, query=query, admin="private_test" 

171 ) 

172 assert len(result.results) == found_number 

173 

174 @pytest.mark.parametrize( 

175 "namespace, name", 

176 [ 

177 ["namespace1", "amendments1"], 

178 ["namespace1", "amendments2"], 

179 ["namespace2", "derive"], 

180 ["namespace2", "imply"], 

181 ["namespace3", "subtable1"], 

182 ], 

183 ) 

184 def test_all_annotations_are_returned(self, namespace, name): 

185 with PEPDBAgentContextManager(add_data=True) as agent: 

186 result = agent.annotation.get( 

187 namespace=namespace, 

188 name=name, 

189 tag="default", 

190 ) 

191 assert result.results[0].model_fields_set == { 

192 "is_private", 

193 "tag", 

194 "namespace", 

195 "digest", 

196 "description", 

197 "number_of_samples", 

198 "name", 

199 "last_update_date", 

200 "submission_date", 

201 "pep_schema", 

202 "pop", 

203 "stars_number", 

204 "forked_from", 

205 } 

206 

207 @pytest.mark.parametrize( 

208 "namespace, query, found_number", 

209 [ 

210 ["namespace1", "ame", 2], 

211 [None, "re", 3], 

212 ], 

213 ) 

214 def test_search_filter_success(self, namespace, query, found_number): 

215 with PEPDBAgentContextManager(add_data=True) as agent: 

216 date_now = datetime.datetime.now() + datetime.timedelta(days=1) 

217 date_old = datetime.datetime.now() - datetime.timedelta(days=5) 

218 result = agent.annotation.get( 

219 namespace=namespace, 

220 query=query, 

221 admin="private_test", 

222 filter_by="submission_date", 

223 filter_start_date=date_old.strftime("%Y/%m/%d"), 

224 filter_end_date=date_now.strftime("%Y/%m/%d"), 

225 ) 

226 assert len(result.results) == found_number 

227 

228 @pytest.mark.parametrize( 

229 "namespace, query, found_number", 

230 [ 

231 ["namespace1", "ame", 0], 

232 [None, "re", 0], 

233 ], 

234 ) 

235 def test_search_filter_zero_prj(self, namespace, query, found_number): 

236 with PEPDBAgentContextManager(add_data=True) as agent: 

237 date_now = datetime.datetime.now() - datetime.timedelta(days=2) 

238 date_old = date_now - datetime.timedelta(days=2) 

239 result = agent.annotation.get( 

240 namespace=namespace, 

241 query=query, 

242 admin="private_test", 

243 filter_by="submission_date", 

244 filter_start_date=date_old.strftime("%Y/%m/%d"), 

245 filter_end_date=date_now.strftime("%Y/%m/%d"), 

246 ) 

247 assert len(result.results) == found_number 

248 

249 @pytest.mark.parametrize( 

250 "namespace, query, found_number", 

251 [ 

252 ["namespace1", "ame", 2], 

253 ], 

254 ) 

255 def test_search_incorrect_filter_by_string(self, namespace, query, found_number): 

256 with PEPDBAgentContextManager(add_data=True) as agent: 

257 date_now = datetime.datetime.now() - datetime.timedelta(days=2) 

258 date_old = date_now - datetime.timedelta(days=2) 

259 with pytest.raises(FilterError): 

260 agent.annotation.get( 

261 namespace=namespace, 

262 query=query, 

263 admin="private_test", 

264 filter_by="incorrect", 

265 filter_start_date=date_old.strftime("%Y/%m/%d"), 

266 filter_end_date=date_now.strftime("%Y/%m/%d"), 

267 ) 

268 

269 @pytest.mark.parametrize( 

270 "rp_list, admin, found_number", 

271 [ 

272 [ 

273 [ 

274 "namespace1/amendments1:default", 

275 "namespace1/amendments2:default", 

276 "namespace2/derive:default", 

277 "private_test/amendments1:default", 

278 ], 

279 "namespace1", 

280 4, 

281 ], 

282 [ 

283 [ 

284 "namespace1/amendments1:default", 

285 "namespace1/amendments2:default", 

286 "namespace2/derive:default", 

287 "private_test/amendments1:default", 

288 ], 

289 "private_test", 

290 4, 

291 ], 

292 ], 

293 ) 

294 def test_get_annotation_by_rp_list(self, rp_list, admin, found_number): 

295 with PEPDBAgentContextManager(add_data=True) as agent: 

296 result = agent.annotation.get_by_rp_list(rp_list) 

297 assert len(result.results) == found_number 

298 

299 def test_get_annotation_by_rp_enpty_list(self): 

300 with PEPDBAgentContextManager(add_data=True) as agent: 

301 result = agent.annotation.get_by_rp_list([]) 

302 assert len(result.results) == 0 

303 

304 @pytest.mark.parametrize( 

305 "namespace, query, found_number", 

306 [ 

307 ["namespace1", "ame", 2], 

308 ], 

309 ) 

310 def test_search_incorrect_incorrect_pep_type(self, namespace, query, found_number): 

311 with PEPDBAgentContextManager(add_data=True) as agent: 

312 with pytest.raises(ValueError): 

313 agent.annotation.get(namespace=namespace, pep_type="incorrect") 

314 

315 @pytest.mark.parametrize( 

316 "namespace, query, found_number", 

317 [ 

318 ["namespace1", "ame", 2], 

319 ], 

320 ) 

321 def test_project_list_without_annotation(self, namespace, query, found_number): 

322 with PEPDBAgentContextManager(add_data=True) as agent: 

323 result = agent.annotation.get_projects_list( 

324 namespace=namespace, 

325 search_str=query, 

326 ) 

327 assert len(result) == found_number