Skip to content

Commit dc882b2

Browse files
committed
add test to filter by circuit properties in sim-campaign
1 parent 6a8c1e2 commit dc882b2

File tree

1 file changed

+233
-1
lines changed

1 file changed

+233
-1
lines changed

tests/test_simulation_campaign.py

Lines changed: 233 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import pytest
22

3-
from app.db.model import Simulation, SimulationCampaign
3+
from app.db.model import Circuit, CircuitBuildCategory, CircuitScale, Simulation, SimulationCampaign
44
from app.db.types import EntityType
55

66
from .utils import (
@@ -125,3 +125,235 @@ def test_filtering(client, models, simulation_json_data, person_id):
125125
client.get, url=ROUTE, params={"simulation__name": simulation_json_data["name"]}
126126
).json()["data"]
127127
assert len(data) == 3
128+
129+
130+
@pytest.fixture
131+
def multiple_circuits(db, brain_atlas_id, subject_id, brain_region_id, license_id, person_id):
132+
circuits_data = [
133+
{
134+
"name": "micro-circuit-1",
135+
"description": "Micro Circuit 1",
136+
"has_morphologies": True,
137+
"has_point_neurons": False,
138+
"has_electrical_cell_models": True,
139+
"has_spines": False,
140+
"number_neurons": 100,
141+
"number_synapses": 1000,
142+
"number_connections": 50,
143+
"scale": CircuitScale.microcircuit,
144+
"build_category": CircuitBuildCategory.computational_model,
145+
"atlas_id": brain_atlas_id,
146+
"subject_id": subject_id,
147+
"brain_region_id": brain_region_id,
148+
"license_id": license_id,
149+
"authorized_public": False,
150+
"created_by_id": person_id,
151+
"updated_by_id": person_id,
152+
"authorized_project_id": PROJECT_ID,
153+
},
154+
{
155+
"name": "micro-circuit-2",
156+
"description": "Micro Circuit 2",
157+
"has_morphologies": False,
158+
"has_point_neurons": True,
159+
"has_electrical_cell_models": False,
160+
"has_spines": True,
161+
"number_neurons": 1000,
162+
"number_synapses": 10000,
163+
"number_connections": 200,
164+
"scale": CircuitScale.microcircuit,
165+
"build_category": CircuitBuildCategory.em_reconstruction,
166+
"atlas_id": brain_atlas_id,
167+
"subject_id": subject_id,
168+
"brain_region_id": brain_region_id,
169+
"license_id": license_id,
170+
"authorized_public": False,
171+
"created_by_id": person_id,
172+
"updated_by_id": person_id,
173+
"authorized_project_id": PROJECT_ID,
174+
},
175+
{
176+
"name": "pair-circuit-1",
177+
"description": "Pair Circuit 1",
178+
"has_morphologies": True,
179+
"has_point_neurons": True,
180+
"has_electrical_cell_models": True,
181+
"has_spines": True,
182+
"number_neurons": 10000,
183+
"number_synapses": 100000,
184+
"number_connections": 500,
185+
"scale": CircuitScale.pair,
186+
"build_category": CircuitBuildCategory.computational_model,
187+
"atlas_id": brain_atlas_id,
188+
"subject_id": subject_id,
189+
"brain_region_id": brain_region_id,
190+
"license_id": license_id,
191+
"authorized_public": False,
192+
"created_by_id": person_id,
193+
"updated_by_id": person_id,
194+
"authorized_project_id": PROJECT_ID,
195+
},
196+
]
197+
198+
circuits = [add_db(db, Circuit(**circuit_data)) for circuit_data in circuits_data]
199+
return circuits
200+
201+
202+
@pytest.fixture
203+
def campaigns_with_different_circuits(
204+
db, json_data, person_id, simulation_json_data, multiple_circuits
205+
):
206+
campaigns = []
207+
208+
for i, circuit in enumerate(multiple_circuits):
209+
campaign = add_db(
210+
db,
211+
MODEL(
212+
**(
213+
json_data
214+
| {
215+
"name": f"campaign-circuit-{i}",
216+
"description": f"Campaign for circuit {i}",
217+
"created_by_id": person_id,
218+
"updated_by_id": person_id,
219+
"authorized_project_id": PROJECT_ID,
220+
}
221+
)
222+
),
223+
)
224+
campaigns.append(campaign)
225+
226+
add_db(
227+
db,
228+
Simulation(
229+
**simulation_json_data
230+
| {
231+
"name": f"simulation-circuit-{i}",
232+
"simulation_campaign_id": campaign.id,
233+
"entity_id": circuit.id,
234+
"created_by_id": person_id,
235+
"updated_by_id": person_id,
236+
"authorized_project_id": PROJECT_ID,
237+
}
238+
),
239+
)
240+
241+
return campaigns
242+
243+
244+
def test_filter_by_circuit_id(client, campaigns_with_different_circuits, multiple_circuits): # noqa: ARG001
245+
first_circuit_id = str(multiple_circuits[0].id)
246+
data = assert_request(client.get, url=ROUTE, params={"circuit__id": first_circuit_id}).json()[
247+
"data"
248+
]
249+
250+
assert len(data) == 1
251+
assert data[0]["name"] == "campaign-circuit-0"
252+
253+
second_circuit_id = str(multiple_circuits[1].id)
254+
data = assert_request(client.get, url=ROUTE, params={"circuit__id": second_circuit_id}).json()[
255+
"data"
256+
]
257+
258+
assert len(data) == 1
259+
assert data[0]["name"] == "campaign-circuit-1"
260+
261+
262+
def test_filter_by_circuit_name(client, campaigns_with_different_circuits, multiple_circuits): # noqa: ARG001
263+
data = assert_request(
264+
client.get, url=ROUTE, params={"circuit__name": "micro-circuit-1"}
265+
).json()["data"]
266+
267+
assert len(data) == 1
268+
assert data[0]["name"] == "campaign-circuit-0"
269+
270+
data = assert_request(
271+
client.get, url=ROUTE, params={"circuit__name__in": "micro-circuit-2"}
272+
).json()["data"]
273+
274+
assert len(data) == 1
275+
assert data[0]["name"] == "campaign-circuit-1"
276+
277+
278+
def test_filter_by_circuit_scale(client, campaigns_with_different_circuits, multiple_circuits): # noqa: ARG001
279+
data = assert_request(
280+
client.get, url=ROUTE, params={"circuit__scale": CircuitScale.microcircuit}
281+
).json()["data"]
282+
283+
assert len(data) == 2
284+
285+
data = assert_request(
286+
client.get, url=ROUTE, params={"circuit__scale": CircuitScale.pair}
287+
).json()["data"]
288+
289+
assert len(data) == 1
290+
291+
292+
def test_filter_by_circuit_scale_empty(
293+
client,
294+
campaigns_with_different_circuits, # noqa: ARG001
295+
multiple_circuits, # noqa: ARG001
296+
):
297+
data = assert_request(
298+
client.get, url=ROUTE, params={"circuit__scale": CircuitScale.small}
299+
).json()["data"]
300+
301+
assert len(data) == 0
302+
303+
304+
def test_filter_by_circuit_scale_in(client, campaigns_with_different_circuits, multiple_circuits): # noqa: ARG001
305+
data = assert_request(
306+
client.get,
307+
url=ROUTE,
308+
params={"circuit__scale__in": [CircuitScale.microcircuit, CircuitScale.pair]},
309+
).json()["data"]
310+
311+
assert len(data) == 3
312+
campaign_names = {campaign["name"] for campaign in data}
313+
assert campaign_names == {"campaign-circuit-0", "campaign-circuit-1", "campaign-circuit-2"}
314+
315+
316+
def test_filter_by_circuit_build_category(
317+
client,
318+
campaigns_with_different_circuits, # noqa: ARG001
319+
multiple_circuits, # noqa: ARG001
320+
):
321+
data = assert_request(
322+
client.get,
323+
url=ROUTE,
324+
params={"circuit__build_category": CircuitBuildCategory.computational_model},
325+
).json()["data"]
326+
327+
assert len(data) == 2
328+
campaign_names = {campaign["name"] for campaign in data}
329+
assert campaign_names == {"campaign-circuit-0", "campaign-circuit-2"}
330+
331+
data = assert_request(
332+
client.get,
333+
url=ROUTE,
334+
params={"circuit__build_category": CircuitBuildCategory.em_reconstruction},
335+
).json()["data"]
336+
337+
assert len(data) == 1
338+
assert data[0]["name"] == "campaign-circuit-1"
339+
340+
341+
def test_filter_by_circuit_build_category_in(
342+
client,
343+
campaigns_with_different_circuits, # noqa: ARG001
344+
multiple_circuits, # noqa: ARG001
345+
):
346+
data = assert_request(
347+
client.get,
348+
url=ROUTE,
349+
params={
350+
"circuit__build_category__in": [
351+
CircuitBuildCategory.computational_model,
352+
CircuitBuildCategory.em_reconstruction,
353+
],
354+
},
355+
).json()["data"]
356+
357+
assert len(data) == 3
358+
campaign_names = {campaign["name"] for campaign in data}
359+
assert campaign_names == {"campaign-circuit-0", "campaign-circuit-1", "campaign-circuit-2"}

0 commit comments

Comments
 (0)