Coverage for tests/test_views.py: 100%

73 statements  

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

1import pytest 

2 

3from pepdbagent.exceptions import ( 

4 SampleAlreadyInView, 

5 SampleNotFoundError, 

6 SampleNotInViewError, 

7 ViewNotFoundError, 

8) 

9 

10from .utils import PEPDBAgentContextManager 

11 

12 

13@pytest.mark.skipif( 

14 not PEPDBAgentContextManager().db_setup(), 

15 reason="DB is not setup", 

16) 

17class TestViews: 

18 """ 

19 Test function within view class 

20 """ 

21 

22 @pytest.mark.parametrize( 

23 "namespace, name, sample_name, view_name", 

24 [ 

25 ["namespace1", "amendments1", "pig_0h", "view1"], 

26 ], 

27 ) 

28 def test_create_view(self, namespace, name, sample_name, view_name): 

29 with PEPDBAgentContextManager(add_data=True) as agent: 

30 agent.view.create( 

31 view_name, 

32 { 

33 "project_namespace": namespace, 

34 "project_name": name, 

35 "project_tag": "default", 

36 "sample_list": [sample_name, "pig_1h"], 

37 }, 

38 ) 

39 

40 project = agent.project.get(namespace, name, raw=False) 

41 view_project = agent.view.get( 

42 namespace, name, "default", view_name, raw=False 

43 ) 

44 assert len(view_project.samples) == 2 

45 assert view_project != project 

46 

47 @pytest.mark.parametrize( 

48 "namespace, name, sample_name, view_name", 

49 [ 

50 ["namespace1", "amendments1", "pig_0h", "view1"], 

51 ], 

52 ) 

53 def test_create_view_with_incorrect_sample( 

54 self, namespace, name, sample_name, view_name 

55 ): 

56 with PEPDBAgentContextManager(add_data=True) as agent: 

57 with pytest.raises(SampleNotFoundError): 

58 agent.view.create( 

59 "view1", 

60 { 

61 "project_namespace": "namespace1", 

62 "project_name": "amendments1", 

63 "project_tag": "default", 

64 "sample_list": ["pig_0h", "pig_1h", "pig_2h"], 

65 }, 

66 ) 

67 

68 @pytest.mark.parametrize( 

69 "namespace, name, sample_name, view_name", 

70 [ 

71 ["namespace1", "amendments1", "pig_0h", "view1"], 

72 ], 

73 ) 

74 def test_create_view_with_incorrect_sample_no_fail( 

75 self, namespace, name, sample_name, view_name 

76 ): 

77 with PEPDBAgentContextManager(add_data=True) as agent: 

78 agent.view.create( 

79 "view1", 

80 { 

81 "project_namespace": "namespace1", 

82 "project_name": "amendments1", 

83 "project_tag": "default", 

84 "sample_list": ["pig_0h", "pig_1h", "pig_2h"], 

85 }, 

86 no_fail=True, 

87 ) 

88 project = agent.project.get(namespace, name, raw=False) 

89 view_project = agent.view.get( 

90 namespace, name, "default", view_name, raw=False 

91 ) 

92 assert len(view_project.samples) == 2 

93 assert view_project != project 

94 

95 @pytest.mark.parametrize( 

96 "namespace, name, sample_name", 

97 [ 

98 ["namespace1", "amendments1", "pig_0h"], 

99 ], 

100 ) 

101 def test_delete_view(self, namespace, name, sample_name): 

102 with PEPDBAgentContextManager(add_data=True) as agent: 

103 agent.view.create( 

104 "view1", 

105 { 

106 "project_namespace": namespace, 

107 "project_name": name, 

108 "project_tag": "default", 

109 "sample_list": [sample_name, "pig_1h"], 

110 }, 

111 ) 

112 assert ( 

113 len( 

114 agent.view.get( 

115 namespace, name, "default", "view1", raw=False 

116 ).samples 

117 ) 

118 == 2 

119 ) 

120 agent.view.delete(namespace, name, "default", "view1") 

121 with pytest.raises(ViewNotFoundError): 

122 agent.view.get(namespace, name, "default", "view1", raw=False) 

123 assert len(agent.project.get(namespace, name, raw=False).samples) == 4 

124 

125 @pytest.mark.parametrize( 

126 "namespace, name, sample_name", 

127 [ 

128 ["namespace1", "amendments1", "pig_0h"], 

129 ], 

130 ) 

131 def test_add_sample_to_view(self, namespace, name, sample_name): 

132 with PEPDBAgentContextManager(add_data=True) as agent: 

133 agent.view.create( 

134 "view1", 

135 { 

136 "project_namespace": namespace, 

137 "project_name": name, 

138 "project_tag": "default", 

139 "sample_list": [sample_name], 

140 }, 

141 ) 

142 agent.view.add_sample(namespace, name, "default", "view1", "pig_1h") 

143 assert ( 

144 len( 

145 agent.view.get( 

146 namespace, name, "default", "view1", raw=False 

147 ).samples 

148 ) 

149 == 2 

150 ) 

151 

152 @pytest.mark.parametrize( 

153 "namespace, name, sample_name", 

154 [ 

155 ["namespace1", "amendments1", "pig_0h"], 

156 ], 

157 ) 

158 def test_add_multiple_samples_to_view(self, namespace, name, sample_name): 

159 with PEPDBAgentContextManager(add_data=True) as agent: 

160 agent.view.create( 

161 "view1", 

162 { 

163 "project_namespace": namespace, 

164 "project_name": name, 

165 "project_tag": "default", 

166 "sample_list": [sample_name], 

167 }, 

168 ) 

169 agent.view.add_sample( 

170 namespace, name, "default", "view1", ["pig_1h", "frog_0h"] 

171 ) 

172 assert ( 

173 len( 

174 agent.view.get( 

175 namespace, name, "default", "view1", raw=False 

176 ).samples 

177 ) 

178 == 3 

179 ) 

180 

181 @pytest.mark.parametrize( 

182 "namespace, name, sample_name", 

183 [ 

184 ["namespace1", "amendments1", "pig_0h"], 

185 ], 

186 ) 

187 def test_remove_sample_from_view(self, namespace, name, sample_name): 

188 with PEPDBAgentContextManager(add_data=True) as agent: 

189 agent.view.create( 

190 "view1", 

191 { 

192 "project_namespace": namespace, 

193 "project_name": name, 

194 "project_tag": "default", 

195 "sample_list": [sample_name, "pig_1h"], 

196 }, 

197 ) 

198 agent.view.remove_sample(namespace, name, "default", "view1", sample_name) 

199 assert ( 

200 len( 

201 agent.view.get( 

202 namespace, name, "default", "view1", raw=False 

203 ).samples 

204 ) 

205 == 1 

206 ) 

207 assert len(agent.project.get(namespace, name, raw=False).samples) == 4 

208 

209 with pytest.raises(SampleNotInViewError): 

210 agent.view.remove_sample( 

211 namespace, name, "default", "view1", sample_name 

212 ) 

213 

214 @pytest.mark.parametrize( 

215 "namespace, name, sample_name", 

216 [ 

217 ["namespace1", "amendments1", "pig_0h"], 

218 ], 

219 ) 

220 def test_add_existing_sample_in_view(self, namespace, name, sample_name): 

221 with PEPDBAgentContextManager(add_data=True) as agent: 

222 agent.view.create( 

223 "view1", 

224 { 

225 "project_namespace": namespace, 

226 "project_name": name, 

227 "project_tag": "default", 

228 "sample_list": [sample_name, "pig_1h"], 

229 }, 

230 ) 

231 with pytest.raises(SampleAlreadyInView): 

232 agent.view.add_sample(namespace, name, "default", "view1", sample_name) 

233 

234 @pytest.mark.parametrize( 

235 "namespace, name, sample_name, view_name", 

236 [ 

237 ["namespace1", "amendments1", "pig_0h", "view1"], 

238 ], 

239 ) 

240 def test_get_snap_view(self, namespace, name, sample_name, view_name): 

241 with PEPDBAgentContextManager(add_data=True) as agent: 

242 snap_project = agent.view.get_snap_view( 

243 namespace=namespace, 

244 name=name, 

245 tag="default", 

246 sample_name_list=[sample_name, "pig_1h"], 

247 ) 

248 

249 assert len(snap_project.samples) == 2 

250 

251 @pytest.mark.parametrize( 

252 "namespace, name, sample_name, view_name", 

253 [ 

254 ["namespace1", "amendments1", "pig_0h", "view1"], 

255 ], 

256 ) 

257 def test_get_view_list_from_project(self, namespace, name, sample_name, view_name): 

258 with PEPDBAgentContextManager(add_data=True) as agent: 

259 assert ( 

260 len(agent.view.get_views_annotation(namespace, name, "default").views) 

261 == 0 

262 ) 

263 agent.view.create( 

264 "view1", 

265 { 

266 "project_namespace": namespace, 

267 "project_name": name, 

268 "project_tag": "default", 

269 "sample_list": [sample_name, "pig_1h"], 

270 }, 

271 ) 

272 assert ( 

273 len(agent.view.get_views_annotation(namespace, name, "default").views) 

274 == 1 

275 )