Skip to content

Commit 7f0da04

Browse files
committed
Unit tests for new score set search errors.
1 parent 41a4b0f commit 7f0da04

File tree

2 files changed

+85
-5
lines changed

2 files changed

+85
-5
lines changed

src/mavedb/routers/score_sets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ def search_score_sets(
174174
):
175175
raise HTTPException(
176176
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
177-
detail="Cannot search for score sets belonging to more than 40 publication identifiers at once.",
177+
detail=f"Cannot search for score sets belonging to more than {SCORE_SET_SEARCH_MAX_PUBLICATION_IDENTIFIERS} publication identifiers at once.",
178178
)
179179

180180
score_sets, num_score_sets = _search_score_sets(db, None, search).values()

tests/routers/test_score_set.py

Lines changed: 84 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from unittest.mock import patch
99

1010
import jsonschema
11+
from mavedb.routers.score_sets import SCORE_SET_SEARCH_MAX_LIMIT, SCORE_SET_SEARCH_MAX_PUBLICATION_IDENTIFIERS
1112
import pytest
1213
from humps import camelize
1314
from 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+
18411921
def 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

Comments
 (0)