Skip to content

Commit 7642328

Browse files
committed
Add recordType Property to Collection View Models
1 parent 2ec050c commit 7642328

File tree

3 files changed

+49
-21
lines changed

3 files changed

+49
-21
lines changed

src/mavedb/view_models/collection.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from pydantic import Field
55
from pydantic.types import Optional
66

7-
from mavedb.view_models import UserContributionRoleGetter
7+
from mavedb.view_models import UserContributionRoleGetter, record_type_validator, set_record_type
88
from mavedb.view_models.base.base import BaseModel
99
from mavedb.view_models.contributor import ContributorCreate
1010
from mavedb.view_models.user import SavedUser, User
@@ -68,12 +68,24 @@ class AddUserToCollectionRoleRequest(BaseModel):
6868

6969
# Properties shared by models stored in DB
7070
class SavedCollection(CollectionBase):
71+
record_type: str = None # type: ignore
7172
urn: str
73+
7274
created_by: Optional[SavedUser]
7375
modified_by: Optional[SavedUser]
76+
77+
experiment_urns: list[str]
78+
score_set_urns: list[str]
79+
80+
admins: list[SavedUser]
81+
viewers: list[SavedUser]
82+
editors: list[SavedUser]
83+
7484
creation_date: date
7585
modification_date: date
7686

87+
_record_type_factory = record_type_validator()(set_record_type)
88+
7789
class Config:
7890
orm_mode = True
7991
getter_dict = CollectionGetter
@@ -82,8 +94,9 @@ class Config:
8294
# Properties to return to non-admin clients
8395
# NOTE: Coupled to ContributionRole enum
8496
class Collection(SavedCollection):
85-
experiment_urns: list[str]
86-
score_set_urns: list[str]
97+
created_by: Optional[User]
98+
modified_by: Optional[User]
99+
87100
admins: list[User]
88101
viewers: list[User]
89102
editors: list[User]

tests/helpers/constants.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,15 +707,18 @@
707707

708708

709709
TEST_COLLECTION_RESPONSE = {
710+
"recordType": "Collection",
710711
"name": "Test collection",
711712
# "description": None,
712713
"private": True,
713714
"createdBy": {
715+
"recordType": "User",
714716
"firstName": TEST_USER["first_name"],
715717
"lastName": TEST_USER["last_name"],
716718
"orcidId": TEST_USER["username"],
717719
},
718720
"modifiedBy": {
721+
"recordType": "User",
719722
"firstName": TEST_USER["first_name"],
720723
"lastName": TEST_USER["last_name"],
721724
"orcidId": TEST_USER["username"],
@@ -726,6 +729,7 @@
726729
"scoreSetUrns": [],
727730
"admins": [
728731
{
732+
"recordType": "User",
729733
"firstName": TEST_USER["first_name"],
730734
"lastName": TEST_USER["last_name"],
731735
"orcidId": TEST_USER["username"],

tests/routers/test_collections.py

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import pytest
66

77
from mavedb.lib.validation.urn_re import MAVEDB_COLLECTION_URN_RE
8-
from mavedb.models.enums.contribution_role import ContributionRole
8+
from mavedb.models.enums.contribution_role import ContributionRole
99
from mavedb.view_models.collection import Collection
1010
from tests.helpers.constants import (
1111
EXTRA_USER,
@@ -50,14 +50,13 @@ def test_create_public_collection(client, setup_router_db):
5050
assert (key, expected_response[key]) == (key, response_data[key])
5151

5252

53-
@pytest.mark.parametrize(
54-
"role",
55-
ContributionRole._member_names_
56-
)
53+
@pytest.mark.parametrize("role", ContributionRole._member_names_)
5754
def test_add_collection_user_to_collection_role(role, client, setup_router_db):
5855
collection = create_collection(client, {"private": True})
5956

60-
response = client.post(f"/api/v1/collections/{collection['urn']}/admins", json={"orcid_id": EXTRA_USER["username"]})
57+
response = client.post(
58+
f"/api/v1/collections/{collection['urn']}/{role}s", json={"orcid_id": EXTRA_USER["username"]}
59+
)
6160
assert response.status_code == 200
6261
response_data = response.json()
6362
expected_response = deepcopy(TEST_COLLECTION_RESPONSE)
@@ -66,20 +65,18 @@ def test_add_collection_user_to_collection_role(role, client, setup_router_db):
6665
"urn": collection["urn"],
6766
"badgeName": None,
6867
"description": None,
69-
"admins": [
70-
{
71-
"firstName": TEST_USER["first_name"],
72-
"lastName": TEST_USER["last_name"],
73-
"orcidId": TEST_USER["username"],
74-
},
75-
{
76-
"firstName": EXTRA_USER["first_name"],
77-
"lastName": EXTRA_USER["last_name"],
78-
"orcidId": EXTRA_USER["username"],
79-
},
80-
],
8168
}
8269
)
70+
expected_response[f"{role}s"].extend(
71+
[
72+
{
73+
"recordType": "User",
74+
"firstName": EXTRA_USER["first_name"],
75+
"lastName": EXTRA_USER["last_name"],
76+
"orcidId": EXTRA_USER["username"],
77+
},
78+
]
79+
)
8380
assert sorted(expected_response.keys()) == sorted(response_data.keys())
8481
for key in expected_response:
8582
assert (key, expected_response[key]) == (key, response_data[key])
@@ -113,11 +110,13 @@ def test_admin_can_read_private_collection(session, client, setup_router_db, ext
113110
"urn": response_data["urn"],
114111
"admins": [
115112
{
113+
"recordType": "User",
116114
"firstName": TEST_USER["first_name"],
117115
"lastName": TEST_USER["last_name"],
118116
"orcidId": TEST_USER["username"],
119117
},
120118
{
119+
"recordType": "User",
121120
"firstName": EXTRA_USER["first_name"],
122121
"lastName": EXTRA_USER["last_name"],
123122
"orcidId": EXTRA_USER["username"],
@@ -145,6 +144,7 @@ def test_editor_can_read_private_collection(session, client, setup_router_db, ex
145144
"urn": response_data["urn"],
146145
"editors": [
147146
{
147+
"recordType": "User",
148148
"firstName": EXTRA_USER["first_name"],
149149
"lastName": EXTRA_USER["last_name"],
150150
"orcidId": EXTRA_USER["username"],
@@ -172,6 +172,7 @@ def test_viewer_can_read_private_collection(session, client, setup_router_db, ex
172172
"urn": response_data["urn"],
173173
"viewers": [
174174
{
175+
"recordType": "User",
175176
"firstName": EXTRA_USER["first_name"],
176177
"lastName": EXTRA_USER["last_name"],
177178
"orcidId": EXTRA_USER["username"],
@@ -246,17 +247,20 @@ def test_admin_can_add_experiment_to_collection(
246247
"badgeName": None,
247248
"description": None,
248249
"modifiedBy": {
250+
"recordType": "User",
249251
"firstName": EXTRA_USER["first_name"],
250252
"lastName": EXTRA_USER["last_name"],
251253
"orcidId": EXTRA_USER["username"],
252254
},
253255
"admins": [
254256
{
257+
"recordType": "User",
255258
"firstName": TEST_USER["first_name"],
256259
"lastName": TEST_USER["last_name"],
257260
"orcidId": TEST_USER["username"],
258261
},
259262
{
263+
"recordType": "User",
260264
"firstName": EXTRA_USER["first_name"],
261265
"lastName": EXTRA_USER["last_name"],
262266
"orcidId": EXTRA_USER["username"],
@@ -297,12 +301,14 @@ def test_editor_can_add_experiment_to_collection(
297301
"badgeName": None,
298302
"description": None,
299303
"modifiedBy": {
304+
"recordType": "User",
300305
"firstName": EXTRA_USER["first_name"],
301306
"lastName": EXTRA_USER["last_name"],
302307
"orcidId": EXTRA_USER["username"],
303308
},
304309
"editors": [
305310
{
311+
"recordType": "User",
306312
"firstName": EXTRA_USER["first_name"],
307313
"lastName": EXTRA_USER["last_name"],
308314
"orcidId": EXTRA_USER["username"],
@@ -407,17 +413,20 @@ def test_admin_can_add_score_set_to_collection(
407413
"badgeName": None,
408414
"description": None,
409415
"modifiedBy": {
416+
"recordType": "User",
410417
"firstName": EXTRA_USER["first_name"],
411418
"lastName": EXTRA_USER["last_name"],
412419
"orcidId": EXTRA_USER["username"],
413420
},
414421
"admins": [
415422
{
423+
"recordType": "User",
416424
"firstName": TEST_USER["first_name"],
417425
"lastName": TEST_USER["last_name"],
418426
"orcidId": TEST_USER["username"],
419427
},
420428
{
429+
"recordType": "User",
421430
"firstName": EXTRA_USER["first_name"],
422431
"lastName": EXTRA_USER["last_name"],
423432
"orcidId": EXTRA_USER["username"],
@@ -457,12 +466,14 @@ def test_editor_can_add_score_set_to_collection(
457466
"badgeName": None,
458467
"description": None,
459468
"modifiedBy": {
469+
"recordType": "User",
460470
"firstName": EXTRA_USER["first_name"],
461471
"lastName": EXTRA_USER["last_name"],
462472
"orcidId": EXTRA_USER["username"],
463473
},
464474
"editors": [
465475
{
476+
"recordType": "User",
466477
"firstName": EXTRA_USER["first_name"],
467478
"lastName": EXTRA_USER["last_name"],
468479
"orcidId": EXTRA_USER["username"],

0 commit comments

Comments
 (0)