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
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-01 22:07 +0000
1import pytest
3from pepdbagent.exceptions import (
4 SampleAlreadyInView,
5 SampleNotFoundError,
6 SampleNotInViewError,
7 ViewNotFoundError,
8)
10from .utils import PEPDBAgentContextManager
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 """
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 )
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
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 )
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
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
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 )
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 )
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
209 with pytest.raises(SampleNotInViewError):
210 agent.view.remove_sample(
211 namespace, name, "default", "view1", sample_name
212 )
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)
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 )
249 assert len(snap_project.samples) == 2
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 )