Skip to content

Commit a3977f1

Browse files
committed
Add required variant_urn property to MappedVariant models and update validation tests
1 parent 56783a9 commit a3977f1

File tree

2 files changed

+71
-5
lines changed

2 files changed

+71
-5
lines changed

src/mavedb/view_models/mapped_variant.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ class MappedVariantBase(BaseModel):
2121
mapping_api_version: str
2222
current: bool
2323

24+
# Generated via model validators. On update/create classes, the input should be
25+
# a dict. On saved classes, the input should be a model instance.
26+
variant_urn: str
27+
2428

2529
class MappedVariantUpdate(MappedVariantBase):
2630
clinical_controls: Sequence["ClinicalControlBase"]
@@ -30,8 +34,8 @@ class MappedVariantUpdate(MappedVariantBase):
3034
def generate_score_set_urn_list(cls, data: Any):
3135
if "variant_urn" not in data and "variant" in data:
3236
try:
33-
data.__setattr__("variant_urn", None if not data["variant"] else data["variant"]["urn"])
34-
except AttributeError as exc:
37+
data["variant_urn"] = None if not data["variant"] else data["variant"]["urn"]
38+
except KeyError as exc:
3539
raise ValidationError(f"Unable to create {cls.__name__} without attribute: {exc}.") # type: ignore
3640
return data
3741

Lines changed: 65 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,81 @@
1+
import pytest
2+
from pydantic import ValidationError
3+
14
from mavedb.view_models.mapped_variant import MappedVariantCreate, MappedVariant
25

36
from tests.helpers.util.common import dummy_attributed_object_from_dict
47
from tests.helpers.constants import TEST_MINIMAL_MAPPED_VARIANT, TEST_MINIMAL_MAPPED_VARIANT_CREATE, VALID_VARIANT_URN
58

69

710
def test_minimal_mapped_variant_create():
8-
mapped_variant_create = MappedVariantCreate(**TEST_MINIMAL_MAPPED_VARIANT_CREATE)
11+
mapped_variant_create = TEST_MINIMAL_MAPPED_VARIANT_CREATE.copy()
12+
mapped_variant_create["variant_urn"] = VALID_VARIANT_URN
13+
created_mapped_variant = MappedVariantCreate(**mapped_variant_create)
14+
15+
assert all(created_mapped_variant.__getattribute__(k) == v for k, v in mapped_variant_create.items())
16+
17+
18+
def test_can_use_variant_object_for_variant_urn_in_mapped_variant_create():
19+
mapped_variant_create = TEST_MINIMAL_MAPPED_VARIANT_CREATE.copy()
20+
created_mapped_variant = MappedVariantCreate(**{**mapped_variant_create, "variant": {"urn": VALID_VARIANT_URN}})
921

10-
assert all(mapped_variant_create.__getattribute__(k) == v for k, v in TEST_MINIMAL_MAPPED_VARIANT_CREATE.items())
22+
assert all(created_mapped_variant.__getattribute__(k) == v for k, v in mapped_variant_create.items())
23+
assert created_mapped_variant.variant_urn == VALID_VARIANT_URN
1124

1225

1326
def test_minimal_mapped_variant():
1427
mapped_variant = TEST_MINIMAL_MAPPED_VARIANT.copy()
1528
mapped_variant["id"] = 1
29+
mapped_variant["variant_urn"] = VALID_VARIANT_URN
30+
31+
saved_mapped_variant = MappedVariant.model_validate(dummy_attributed_object_from_dict({**mapped_variant}))
32+
33+
assert all(saved_mapped_variant.__getattribute__(k) == v for k, v in mapped_variant.items())
34+
35+
36+
def test_can_use_variant_object_for_variant_urn_in_mapped_variant():
37+
mapped_variant = TEST_MINIMAL_MAPPED_VARIANT.copy()
38+
mapped_variant["id"] = 1
1639

17-
saved_mapped_variant = MappedVariant.model_validate(dummy_attributed_object_from_dict({**mapped_variant, "variant_urn": VALID_VARIANT_URN}))
40+
saved_mapped_variant = MappedVariant.model_validate(
41+
dummy_attributed_object_from_dict(
42+
{**mapped_variant, "variant": dummy_attributed_object_from_dict({"urn": VALID_VARIANT_URN})}
43+
)
44+
)
1845

1946
assert all(saved_mapped_variant.__getattribute__(k) == v for k, v in mapped_variant.items())
47+
assert saved_mapped_variant.variant_urn == VALID_VARIANT_URN
48+
49+
50+
def test_cannot_create_mapped_variant_without_variant_urn():
51+
mapped_variant_create = TEST_MINIMAL_MAPPED_VARIANT_CREATE.copy()
52+
mapped_variant_create["variant_urn"] = None
53+
54+
with pytest.raises(ValidationError):
55+
MappedVariantCreate(**mapped_variant_create)
56+
57+
58+
def test_cannot_save_mapped_variant_without_variant_urn():
59+
mapped_variant = TEST_MINIMAL_MAPPED_VARIANT.copy()
60+
mapped_variant["id"] = 1
61+
mapped_variant["variant_urn"] = None
62+
63+
with pytest.raises(ValidationError):
64+
MappedVariant.model_validate(dummy_attributed_object_from_dict({**mapped_variant}))
65+
66+
67+
def test_cannot_create_mapped_variant_without_variant():
68+
mapped_variant_create = TEST_MINIMAL_MAPPED_VARIANT_CREATE.copy()
69+
mapped_variant_create["variant"] = {"urn": None}
70+
71+
with pytest.raises(ValidationError):
72+
MappedVariantCreate(**mapped_variant_create)
73+
74+
75+
def test_cannot_save_mapped_variant_without_variant():
76+
mapped_variant = TEST_MINIMAL_MAPPED_VARIANT.copy()
77+
mapped_variant["id"] = 1
78+
mapped_variant["variant"] = dummy_attributed_object_from_dict({"urn": None})
79+
80+
with pytest.raises(ValidationError):
81+
MappedVariant.model_validate(dummy_attributed_object_from_dict({**mapped_variant}))

0 commit comments

Comments
 (0)