Skip to content

Commit 195ab49

Browse files
authored
Merge pull request #442 from VariantEffect/bugfix/estelle/441/fixAddContributor
Modified add_contributor function and add two more related tests.
2 parents 0febe78 + 8fc7e8a commit 195ab49

File tree

4 files changed

+76
-2
lines changed

4 files changed

+76
-2
lines changed

tests/helpers/constants.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,17 @@
177177
"is_first_login": True,
178178
}
179179

180+
TEST_USER2 = {
181+
"username": "1111-2222-3333-4444",
182+
"first_name": "First",
183+
"last_name": "Last",
184+
"email": "[email protected]",
185+
"is_active": True,
186+
"is_staff": False,
187+
"is_superuser": False,
188+
"is_first_login": True,
189+
}
190+
180191
CONTRIBUTOR = {
181192
"orcid_id": TEST_USER["username"],
182193
"given_name": TEST_USER["first_name"],

tests/helpers/util/contributor.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ def add_contributor(db: Session, urn: str, model: Any, orcid_id: str, given_name
1212
assert item is not None
1313

1414
try:
15-
contributor = db.execute(select(Contributor).where(Contributor.orcid_id == orcid_id)).one()
15+
# scalar_one(): extract the ORM instance from the result
16+
contributor = db.execute(select(Contributor).where(Contributor.orcid_id == orcid_id)).scalar_one()
1617
except NoResultFound:
1718
contributor = Contributor(orcid_id=orcid_id, given_name=given_name, family_name=family_name)
1819
db.add(contributor)
1920

20-
item.contributors = [contributor]
21+
if contributor not in item.contributors:
22+
item.contributors.append(contributor)
2123
db.add(item)
2224
db.commit()

tests/routers/test_experiments.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
TEST_PUBMED_IDENTIFIER,
3737
TEST_PUBMED_URL_IDENTIFIER,
3838
TEST_USER,
39+
TEST_USER2,
3940
)
4041
from tests.helpers.dependency_overrider import DependencyOverrider
4142
from tests.helpers.util.contributor import add_contributor
@@ -712,6 +713,33 @@ def test_admin_can_update_other_users_private_experiment(
712713
assert (test_field, response_data[test_field]) == (test_field, test_value)
713714

714715

716+
def test_can_add_two_contributors(session, client, setup_router_db):
717+
experiment = create_experiment(client)
718+
change_ownership(session, experiment["urn"], ExperimentDbModel)
719+
add_contributor(
720+
session,
721+
experiment["urn"],
722+
ExperimentDbModel,
723+
TEST_USER["username"],
724+
TEST_USER["first_name"],
725+
TEST_USER["last_name"],
726+
)
727+
add_contributor(
728+
session,
729+
experiment["urn"],
730+
ExperimentDbModel,
731+
TEST_USER2["username"],
732+
TEST_USER2["first_name"],
733+
TEST_USER2["last_name"],
734+
)
735+
response = client.get(f"/api/v1/experiments/{experiment['urn']}")
736+
assert response.status_code == 200
737+
response_data = response.json()
738+
assert len(response_data["contributors"]) == 2
739+
assert any(c["orcidId"] == TEST_USER["username"] for c in response_data["contributors"])
740+
assert any(c["orcidId"] == TEST_USER2["username"] for c in response_data["contributors"])
741+
742+
715743
def test_can_edit_published_experiment(client, setup_router_db):
716744
pass
717745

tests/routers/test_score_set.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,39 @@ def test_anonymous_user_cannot_get_user_private_score_set(session, client, setup
467467
assert f"score set with URN '{score_set['urn']}' not found" in response_data["detail"]
468468

469469

470+
def test_can_add_contributor_in_both_experiment_and_score_set(session, client, setup_router_db):
471+
experiment = create_experiment(client)
472+
score_set = create_seq_score_set(client, experiment["urn"])
473+
change_ownership(session, score_set["urn"], ScoreSetDbModel)
474+
change_ownership(session, experiment["urn"], ExperimentDbModel)
475+
add_contributor(
476+
session,
477+
score_set["urn"],
478+
ScoreSetDbModel,
479+
TEST_USER["username"],
480+
TEST_USER["first_name"],
481+
TEST_USER["last_name"],
482+
)
483+
add_contributor(
484+
session,
485+
experiment["urn"],
486+
ExperimentDbModel,
487+
TEST_USER["username"],
488+
TEST_USER["first_name"],
489+
TEST_USER["last_name"],
490+
)
491+
score_set_response = client.get(f"/api/v1/score-sets/{score_set['urn']}")
492+
assert score_set_response.status_code == 200
493+
ss_response_data = score_set_response.json()
494+
assert len(ss_response_data["contributors"]) == 1
495+
assert any(c["orcidId"] == TEST_USER["username"] for c in ss_response_data["contributors"])
496+
experiment_response = client.get(f"/api/v1/experiments/{experiment['urn']}")
497+
assert experiment_response.status_code == 200
498+
exp_response_data = experiment_response.json()
499+
assert len(exp_response_data["contributors"]) == 1
500+
assert any(c["orcidId"] == TEST_USER["username"] for c in exp_response_data["contributors"])
501+
502+
470503
def test_contributor_can_get_other_users_private_score_set(session, client, setup_router_db):
471504
experiment = create_experiment(client)
472505
score_set = create_seq_score_set(client, experiment["urn"])

0 commit comments

Comments
 (0)