Skip to content

Commit 8107044

Browse files
adds tests for validation code in 'VlmResponse'
1 parent b55f3e7 commit 8107044

File tree

2 files changed

+95
-1
lines changed

2 files changed

+95
-1
lines changed

src/anyvlm/schemas/vlm.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,12 @@ def validate_resultset_ids(self) -> Self:
129129
]
130130

131131
for result_set in self.response.resultSets:
132-
node_id, zygosity = result_set.id.split(" ")
132+
node_id, zygosity = None, None
133+
try:
134+
node_id, zygosity = result_set.id.split(" ")
135+
except ValueError as e:
136+
error_message = f"Invalid ResultSet id - ids must be in form '<node_id> <zygosity>', but provided id of {result_set.id} contains invalid formatting"
137+
raise ValueError(error_message) from e
133138

134139
if node_id not in handover_ids:
135140
error_message = f"Invalid ResultSet id - ids must be in form '<node_id> <zygosity>', but provided node_id of {node_id} does not match any `handoverType.id` provided in `self.beaconHandovers`"

tests/unit/test_schemas.py

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
"""Test schema validation functionality"""
2+
3+
import pytest
4+
5+
from anyvlm.schemas.vlm import (
6+
RESULT_ENTITY_TYPE,
7+
HandoverType,
8+
ResponseField,
9+
ResponseSummary,
10+
ResultSet,
11+
VlmResponse,
12+
)
13+
from anyvlm.utils.types import Zygosity
14+
15+
16+
@pytest.fixture(scope="module")
17+
def valid_handover_id() -> str:
18+
return HandoverType().id
19+
20+
21+
@pytest.fixture(scope="module")
22+
def response_summary() -> ResponseSummary:
23+
return ResponseSummary(exists=False, numTotalResults=0)
24+
25+
26+
@pytest.fixture(scope="module")
27+
def responses_with_invalid_resultset_ids(valid_handover_id) -> list[ResponseField]:
28+
return [
29+
ResponseField(
30+
resultSets=[
31+
ResultSet(
32+
exists=True,
33+
id=f"invalid_handover_id {Zygosity.HOMOZYGOUS}",
34+
resultsCount=0,
35+
setType=RESULT_ENTITY_TYPE,
36+
)
37+
]
38+
),
39+
ResponseField(
40+
resultSets=[
41+
ResultSet(
42+
exists=True,
43+
id=f"{valid_handover_id} invalid_zygosity",
44+
resultsCount=0,
45+
setType=RESULT_ENTITY_TYPE,
46+
)
47+
]
48+
),
49+
ResponseField(
50+
resultSets=[
51+
ResultSet(
52+
exists=True,
53+
id=f"{Zygosity.HOMOZYGOUS}-{valid_handover_id}", # incorrect order/formatting
54+
resultsCount=0,
55+
setType=RESULT_ENTITY_TYPE,
56+
)
57+
]
58+
),
59+
]
60+
61+
62+
def test_valid_resultset_id(response_summary, valid_handover_id):
63+
response = ResponseField(
64+
resultSets=[
65+
ResultSet(
66+
exists=True,
67+
id=f"{valid_handover_id} {Zygosity.HOMOZYGOUS}",
68+
resultsCount=0,
69+
setType=RESULT_ENTITY_TYPE,
70+
)
71+
]
72+
)
73+
74+
# Should NOT raise an error
75+
vlm_response = VlmResponse(responseSummary=response_summary, response=response)
76+
77+
assert (
78+
vlm_response.response.resultSets[0].id
79+
== f"{valid_handover_id} {Zygosity.HOMOZYGOUS}"
80+
)
81+
82+
83+
def test_invalid_resultset_ids(response_summary, responses_with_invalid_resultset_ids):
84+
for response in responses_with_invalid_resultset_ids:
85+
with pytest.raises(
86+
ValueError,
87+
match=r"^Invalid ResultSet id - ids must be in form '<node_id> <zygosity>'",
88+
):
89+
VlmResponse(responseSummary=response_summary, response=response)

0 commit comments

Comments
 (0)