@@ -420,6 +420,64 @@ def test_has_coordinates_images(auth_client, session):
420420 assert base_study_2 .has_images is False
421421
422422
423+ def test_filter_by_is_oa (auth_client , session ):
424+ base_true = BaseStudy (
425+ name = "Open Access Study" ,
426+ doi = "10.1234/oa-study" ,
427+ pmid = "111111" ,
428+ is_oa = True ,
429+ public = True ,
430+ level = "group" ,
431+ )
432+ base_false = BaseStudy (
433+ name = "Closed Access Study" ,
434+ doi = "10.1234/closed-study" ,
435+ pmid = "222222" ,
436+ is_oa = False ,
437+ public = True ,
438+ level = "group" ,
439+ )
440+ base_unknown = BaseStudy (
441+ name = "Unknown Access Study" ,
442+ doi = "10.1234/unknown-study" ,
443+ pmid = "333333" ,
444+ is_oa = None ,
445+ public = True ,
446+ level = "group" ,
447+ )
448+ session .add_all ([base_true , base_false , base_unknown ])
449+ session .commit ()
450+
451+ assert session .query (BaseStudy ).count () == 3
452+
453+ all_resp = auth_client .get ("/api/base-studies/" )
454+ assert all_resp .status_code == 200
455+ all_names = {result ["name" ] for result in all_resp .json ()["results" ]}
456+ assert {
457+ "Open Access Study" ,
458+ "Closed Access Study" ,
459+ "Unknown Access Study" ,
460+ }.issubset (all_names )
461+
462+ true_resp = auth_client .get ("/api/base-studies/?is_oa=true" )
463+ assert true_resp .status_code == 200
464+ true_results = true_resp .json ()["results" ]
465+ assert all (result ["is_oa" ] is True for result in true_results )
466+ true_names = {result ["name" ] for result in true_results }
467+ assert "Open Access Study" in true_names
468+ assert "Closed Access Study" not in true_names
469+ assert "Unknown Access Study" not in true_names
470+
471+ false_resp = auth_client .get ("/api/base-studies/?is_oa=false" )
472+ assert false_resp .status_code == 200
473+ false_results = false_resp .json ()["results" ]
474+ assert all (result ["is_oa" ] is False for result in false_results )
475+ false_names = {result ["name" ] for result in false_results }
476+ assert "Closed Access Study" in false_names
477+ assert "Open Access Study" not in false_names
478+ assert "Unknown Access Study" not in false_names
479+
480+
423481def test_config_and_feature_filters (auth_client , ingest_demographic_features , session ):
424482 """Test filtering by both config args and feature results with version specification"""
425483 # Test combined feature and config filtering
0 commit comments