88from unittest .mock import patch
99
1010import jsonschema
11+ from mavedb .routers .score_sets import SCORE_SET_SEARCH_MAX_LIMIT , SCORE_SET_SEARCH_MAX_PUBLICATION_IDENTIFIERS
1112import pytest
1213from humps import camelize
1314from sqlalchemy import select
@@ -1838,6 +1839,85 @@ def test_search_public_score_sets_match(session, data_provider, client, setup_ro
18381839 assert response .json ()["scoreSets" ][0 ]["title" ] == score_set ["title" ]
18391840
18401841
1842+ def test_cannot_search_public_score_sets_with_published_false (
1843+ session , data_provider , client , setup_router_db , data_files
1844+ ):
1845+ experiment = create_experiment (client , {"title" : "Experiment 1" })
1846+ score_set = create_seq_score_set (client , experiment ["urn" ], update = {"title" : "Test Fnord Score Set" })
1847+ score_set = mock_worker_variant_insertion (client , session , data_provider , score_set , data_files / "scores.csv" )
1848+
1849+ with patch .object (arq .ArqRedis , "enqueue_job" , return_value = None ) as worker_queue :
1850+ publish_score_set (client , score_set ["urn" ])
1851+ worker_queue .assert_called_once ()
1852+
1853+ search_payload = {"text" : "fnord" , "published" : "false" }
1854+ response = client .post ("/api/v1/score-sets/search" , json = search_payload )
1855+ response_data = response .json ()
1856+ assert response .status_code == 422
1857+ assert (
1858+ "Cannot search for private score sets except in the context of the current user's data."
1859+ in response_data ["detail" ]
1860+ )
1861+
1862+
1863+ def test_search_public_score_sets_invalid_limit (session , data_provider , client , setup_router_db , data_files ):
1864+ experiment = create_experiment (client , {"title" : "Experiment 1" })
1865+ score_set = create_seq_score_set (client , experiment ["urn" ], update = {"title" : "Test Fnord Score Set" })
1866+ score_set = mock_worker_variant_insertion (client , session , data_provider , score_set , data_files / "scores.csv" )
1867+
1868+ with patch .object (arq .ArqRedis , "enqueue_job" , return_value = None ) as worker_queue :
1869+ publish_score_set (client , score_set ["urn" ])
1870+ worker_queue .assert_called_once ()
1871+
1872+ search_payload = {"text" : "fnord" , "limit" : SCORE_SET_SEARCH_MAX_LIMIT + 1 }
1873+ response = client .post ("/api/v1/score-sets/search" , json = search_payload )
1874+ response_data = response .json ()
1875+ assert response .status_code == 422
1876+ assert (
1877+ f"Cannot search for more than { SCORE_SET_SEARCH_MAX_LIMIT } score sets at a time. Please use the offset and limit parameters to run a paginated search."
1878+ in response_data ["detail" ]
1879+ )
1880+
1881+
1882+ def test_search_public_score_sets_valid_limit (session , data_provider , client , setup_router_db , data_files ):
1883+ experiment = create_experiment (client , {"title" : "Experiment 1" })
1884+ score_set = create_seq_score_set (client , experiment ["urn" ], update = {"title" : "Test Fnord Score Set" })
1885+ score_set = mock_worker_variant_insertion (client , session , data_provider , score_set , data_files / "scores.csv" )
1886+
1887+ with patch .object (arq .ArqRedis , "enqueue_job" , return_value = None ) as worker_queue :
1888+ publish_score_set (client , score_set ["urn" ])
1889+ worker_queue .assert_called_once ()
1890+
1891+ search_payload = {"text" : "fnord" , "limit" : SCORE_SET_SEARCH_MAX_LIMIT }
1892+ response = client .post ("/api/v1/score-sets/search" , json = search_payload )
1893+ assert response .status_code == 200
1894+ assert response .json ()["numScoreSets" ] == 1
1895+ assert len (response .json ()["scoreSets" ]) == 1
1896+ assert response .json ()["scoreSets" ][0 ]["title" ] == score_set ["title" ]
1897+
1898+
1899+ def test_search_public_score_sets_too_many_publication_identifiers (
1900+ session , data_provider , client , setup_router_db , data_files
1901+ ):
1902+ experiment = create_experiment (client , {"title" : "Experiment 1" })
1903+ score_set = create_seq_score_set (client , experiment ["urn" ], update = {"title" : "Test Fnord Score Set" })
1904+ score_set = mock_worker_variant_insertion (client , session , data_provider , score_set , data_files / "scores.csv" )
1905+
1906+ with patch .object (arq .ArqRedis , "enqueue_job" , return_value = None ) as worker_queue :
1907+ publish_score_set (client , score_set ["urn" ])
1908+ worker_queue .assert_called_once ()
1909+
1910+ publication_identifier_search = [str (20711194 + i ) for i in range (SCORE_SET_SEARCH_MAX_PUBLICATION_IDENTIFIERS + 1 )]
1911+ search_payload = {"text" : "fnord" , "publication_identifiers" : publication_identifier_search }
1912+ response = client .post ("/api/v1/score-sets/search" , json = search_payload )
1913+ response_data = response .json ()
1914+ assert response .status_code == 422
1915+ assert (
1916+ f"Cannot search for score sets belonging to more than { SCORE_SET_SEARCH_MAX_PUBLICATION_IDENTIFIERS } publication identifiers at once."
1917+ in response_data ["detail" ]
1918+ )
1919+
1920+
18411921def test_search_public_score_sets_urn_with_space_match (session , data_provider , client , setup_router_db , data_files ):
18421922 experiment = create_experiment (client , {"title" : "Experiment 1" })
18431923 score_set = create_seq_score_set (client , experiment ["urn" ], update = {"title" : "Score Set 1" })
@@ -1932,9 +2012,8 @@ def test_search_others_public_score_sets_urn_with_space_match(
19322012 assert len (response .json ()["scoreSets" ]) == 1
19332013 assert response .json ()["scoreSets" ][0 ]["urn" ] == published_score_set ["urn" ]
19342014
1935- def test_cannot_search_private_score_sets (
1936- session , data_provider , client , setup_router_db , data_files
1937- ):
2015+
2016+ def test_cannot_search_private_score_sets (session , data_provider , client , setup_router_db , data_files ):
19382017 experiment = create_experiment (client , {"title" : "Experiment 1" })
19392018 score_set_1 = create_seq_score_set (client , experiment ["urn" ], update = {"title" : "Score Set 1" })
19402019 score_set_1 = mock_worker_variant_insertion (client , session , data_provider , score_set_1 , data_files / "scores.csv" )
@@ -1951,7 +2030,8 @@ def test_cannot_search_private_score_sets(
19512030
19522031 response_data = response .json ()
19532032 assert (
1954- "Cannot search for private score sets except in the context of the current user's data." in response_data ["detail" ]
2033+ "Cannot search for private score sets except in the context of the current user's data."
2034+ in response_data ["detail" ]
19552035 )
19562036
19572037
0 commit comments