Coverage for tests/test_project_history.py: 100%
107 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 peprs
2import pytest
4from pepdbagent.const import PEPHUB_SAMPLE_ID_KEY
5from pepdbagent.exceptions import HistoryNotFoundError
7from .utils import PEPDBAgentContextManager
10@pytest.mark.skipif(
11 not PEPDBAgentContextManager().db_setup(),
12 reason="DB is not setup",
13)
14class TestProjectHistory:
15 """
16 Test project methods
17 """
19 @pytest.mark.parametrize(
20 "namespace, name, sample_name",
21 [
22 ["namespace1", "amendments1", "pig_0h"],
23 ],
24 )
25 def test_get_add_history_all_annotation(self, namespace, name, sample_name):
26 with PEPDBAgentContextManager(add_data=True) as agent:
27 prj = agent.project.get(namespace, name, tag="default", with_id=True)
29 prj["samples"][0]["sample_name"] = "new_sample_name"
31 del prj["samples"][1]
32 del prj["samples"][2]
33 new_sample1 = {
34 "sample_name": "new_sample",
35 "protocol": "new_protocol",
36 PEPHUB_SAMPLE_ID_KEY: None,
37 }
38 new_sample2 = {
39 "sample_name": "new_sample2",
40 "protocol": "new_protocol2",
41 PEPHUB_SAMPLE_ID_KEY: None,
42 }
44 prj["samples"].append(new_sample1.copy())
45 prj["samples"].append(new_sample2.copy())
47 agent.project.update(
48 namespace=namespace,
49 name=name,
50 tag="default",
51 update_dict={"project": peprs.Project.from_dict(prj)},
52 )
54 project_history = agent.project.get_history(namespace, name, tag="default")
56 assert len(project_history.history) == 1
58 @pytest.mark.parametrize(
59 "namespace, name, sample_name",
60 [
61 ["namespace1", "amendments1", "pig_0h"],
62 ],
63 )
64 def test_get_add_history_all_project(self, namespace, name, sample_name):
65 with PEPDBAgentContextManager(add_data=True) as agent:
66 prj_init = agent.project.get(namespace, name, tag="default", raw=False)
67 prj = agent.project.get(namespace, name, tag="default", with_id=True)
69 # prj["samples"][0]["sample_name"] = "new_sample_name"
71 del prj["samples"][1]
72 del prj["samples"][2]
73 new_sample1 = {
74 "sample_name": "new_sample",
75 "protocol": "new_protocol",
76 PEPHUB_SAMPLE_ID_KEY: None,
77 }
78 new_sample2 = {
79 "sample_name": "new_sample2",
80 "protocol": "new_protocol2",
81 PEPHUB_SAMPLE_ID_KEY: None,
82 }
84 prj["samples"].append(new_sample1.copy())
85 prj["samples"].append(new_sample2.copy())
87 agent.project.update(
88 namespace=namespace,
89 name=name,
90 tag="default",
91 update_dict={"project": peprs.Project.from_dict(prj)},
92 )
94 history_prj = agent.project.get_project_from_history(
95 namespace, name, tag="default", history_id=1, raw=False
96 )
97 assert prj_init == history_prj
99 @pytest.mark.parametrize(
100 "namespace, name, sample_name",
101 [
102 ["namespace1", "amendments1", "pig_0h"],
103 ],
104 )
105 def test_get_history_multiple_changes(self, namespace, name, sample_name):
106 with PEPDBAgentContextManager(add_data=True) as agent:
107 prj = agent.project.get(namespace, name, tag="default", with_id=True)
109 del prj["samples"][1]
111 agent.project.update(
112 namespace=namespace,
113 name=name,
114 tag="default",
115 update_dict={"project": peprs.Project.from_dict(prj)},
116 )
118 prj = agent.project.get(namespace, name, tag="default", with_id=True)
120 new_sample1 = {
121 "sample_name": "new_sample",
122 "protocol": "new_protocol",
123 PEPHUB_SAMPLE_ID_KEY: None,
124 }
125 prj["samples"].append(new_sample1.copy())
127 agent.project.update(
128 namespace=namespace,
129 name=name,
130 tag="default",
131 update_dict={"project": peprs.Project.from_dict(prj)},
132 )
134 history = agent.project.get_history(namespace, name, tag="default")
136 assert len(history.history) == 2
138 @pytest.mark.parametrize(
139 "namespace, name, sample_name",
140 [
141 ["namespace1", "amendments1", "pig_0h"],
142 ],
143 )
144 def test_get_project_incorrect_history_id(self, namespace, name, sample_name):
145 with PEPDBAgentContextManager(add_data=True) as agent:
146 prj = agent.project.get(namespace, name, tag="default", with_id=True)
147 del prj["samples"][1]
149 agent.project.update(
150 namespace=namespace,
151 name=name,
152 tag="default",
153 update_dict={"project": peprs.Project.from_dict(prj)},
154 )
156 with pytest.raises(HistoryNotFoundError):
157 agent.project.get_project_from_history(
158 namespace, "amendments2", tag="default", history_id=1, raw=False
159 )
161 @pytest.mark.parametrize(
162 "namespace, name, sample_name",
163 [
164 ["namespace1", "amendments1", "pig_0h"],
165 ],
166 )
167 def test_get_history_none(self, namespace, name, sample_name):
168 with PEPDBAgentContextManager(add_data=True) as agent:
169 history_annot = agent.project.get_history(namespace, name, tag="default")
170 assert len(history_annot.history) == 0
172 @pytest.mark.parametrize(
173 "namespace, name, sample_name",
174 [
175 ["namespace1", "amendments1", "pig_0h"],
176 ],
177 )
178 def test_delete_all_history(self, namespace, name, sample_name):
179 with PEPDBAgentContextManager(add_data=True) as agent:
180 prj = agent.project.get(namespace, name, tag="default", with_id=True)
182 del prj["samples"][1]
184 agent.project.update(
185 namespace=namespace,
186 name=name,
187 tag="default",
188 update_dict={"project": peprs.Project.from_dict(prj)},
189 )
191 prj = agent.project.get(namespace, name, tag="default", with_id=True)
193 new_sample1 = {
194 "sample_name": "new_sample",
195 "protocol": "new_protocol",
196 PEPHUB_SAMPLE_ID_KEY: None,
197 }
198 prj["samples"].append(new_sample1.copy())
200 agent.project.update(
201 namespace=namespace,
202 name=name,
203 tag="default",
204 update_dict={"project": peprs.Project.from_dict(prj)},
205 )
207 history = agent.project.get_history(namespace, name, tag="default")
209 assert len(history.history) == 2
211 agent.project.delete_history(
212 namespace, name, tag="default", history_id=None
213 )
215 history = agent.project.get_history(namespace, name, tag="default")
216 assert len(history.history) == 0
218 project_exists = agent.project.exists(namespace, name, tag="default")
219 assert project_exists
221 @pytest.mark.parametrize(
222 "namespace, name, sample_name",
223 [
224 ["namespace1", "amendments1", "pig_0h"],
225 ],
226 )
227 def test_delete_one_history(self, namespace, name, sample_name):
228 with PEPDBAgentContextManager(add_data=True) as agent:
229 prj = agent.project.get(namespace, name, tag="default", with_id=True)
231 del prj["samples"][1]
233 agent.project.update(
234 namespace=namespace,
235 name=name,
236 tag="default",
237 update_dict={"project": peprs.Project.from_dict(prj)},
238 )
240 prj = agent.project.get(namespace, name, tag="default", with_id=True)
242 new_sample1 = {
243 "sample_name": "new_sample",
244 "protocol": "new_protocol",
245 PEPHUB_SAMPLE_ID_KEY: None,
246 }
247 prj["samples"].append(new_sample1.copy())
249 agent.project.update(
250 namespace=namespace,
251 name=name,
252 tag="default",
253 update_dict={"project": peprs.Project.from_dict(prj)},
254 )
256 history = agent.project.get_history(namespace, name, tag="default")
258 assert len(history.history) == 2
260 agent.project.delete_history(namespace, name, tag="default", history_id=1)
262 history = agent.project.get_history(namespace, name, tag="default")
264 assert len(history.history) == 1
265 assert history.history[0].change_id == 2
267 @pytest.mark.parametrize(
268 "namespace, name, sample_name",
269 [
270 ["namespace1", "amendments1", "pig_0h"],
271 ],
272 )
273 def test_restore_project(self, namespace, name, sample_name):
274 with PEPDBAgentContextManager(add_data=True) as agent:
275 prj_org = agent.project.get(namespace, name, tag="default", with_id=False)
276 prj = agent.project.get(namespace, name, tag="default", with_id=True)
278 del prj["samples"][1]
280 agent.project.update(
281 namespace=namespace,
282 name=name,
283 tag="default",
284 update_dict={"project": peprs.Project.from_dict(prj)},
285 )
287 prj = agent.project.get(namespace, name, tag="default", with_id=True)
289 new_sample1 = {
290 "sample_name": "new_sample",
291 "protocol": "new_protocol",
292 PEPHUB_SAMPLE_ID_KEY: None,
293 }
294 prj["samples"].append(new_sample1.copy())
296 agent.project.update(
297 namespace=namespace,
298 name=name,
299 tag="default",
300 update_dict={"project": peprs.Project.from_dict(prj)},
301 )
303 agent.project.restore(namespace, name, tag="default", history_id=1)
305 restored_project = agent.project.get(
306 namespace, name, tag="default", with_id=False
307 )
309 assert prj_org == restored_project