|
11 | 11 | ScoreCalibrationCreate, |
12 | 12 | ScoreCalibrationWithScoreSetUrn, |
13 | 13 | ) |
14 | | - |
15 | 14 | from tests.helpers.constants import ( |
16 | | - TEST_FUNCTIONAL_RANGE_NORMAL, |
| 15 | + TEST_BRNICH_SCORE_CALIBRATION, |
17 | 16 | TEST_FUNCTIONAL_RANGE_ABNORMAL, |
18 | | - TEST_FUNCTIONAL_RANGE_NOT_SPECIFIED, |
19 | | - TEST_FUNCTIONAL_RANGE_INCLUDING_POSITIVE_INFINITY, |
20 | 17 | TEST_FUNCTIONAL_RANGE_INCLUDING_NEGATIVE_INFINITY, |
21 | | - TEST_BRNICH_SCORE_CALIBRATION, |
| 18 | + TEST_FUNCTIONAL_RANGE_INCLUDING_POSITIVE_INFINITY, |
| 19 | + TEST_FUNCTIONAL_RANGE_NORMAL, |
| 20 | + TEST_FUNCTIONAL_RANGE_NOT_SPECIFIED, |
22 | 21 | TEST_PATHOGENICITY_SCORE_CALIBRATION, |
23 | 22 | TEST_SAVED_BRNICH_SCORE_CALIBRATION, |
24 | 23 | TEST_SAVED_PATHOGENICITY_SCORE_CALIBRATION, |
25 | 24 | ) |
26 | 25 | from tests.helpers.util.common import dummy_attributed_object_from_dict |
27 | 26 |
|
28 | | - |
29 | 27 | ############################################################################## |
30 | 28 | # Tests for FunctionalRange view models |
31 | 29 | ############################################################################## |
@@ -260,22 +258,43 @@ def test_can_create_valid_score_calibration_without_functional_ranges(valid_cali |
260 | 258 | assert sc.calibration_metadata is None |
261 | 259 |
|
262 | 260 |
|
263 | | -def test_cannot_create_score_calibration_when_ranges_overlap(): |
| 261 | +def test_cannot_create_score_calibration_when_classification_ranges_overlap(): |
264 | 262 | invalid_data = deepcopy(TEST_BRNICH_SCORE_CALIBRATION) |
265 | 263 | # Make the first two ranges overlap |
266 | 264 | invalid_data["functional_ranges"][0]["range"] = [1.0, 3.0] |
267 | 265 | invalid_data["functional_ranges"][1]["range"] = [2.0, 4.0] |
268 | | - with pytest.raises(ValidationError, match="Score ranges may not overlap; `"): |
| 266 | + with pytest.raises(ValidationError, match="Classified score ranges may not overlap; `"): |
269 | 267 | ScoreCalibrationCreate.model_validate(invalid_data) |
270 | 268 |
|
271 | 269 |
|
| 270 | +def test_can_create_score_calibration_when_unclassified_ranges_overlap_with_classified_ranges(): |
| 271 | + valid_data = deepcopy(TEST_BRNICH_SCORE_CALIBRATION) |
| 272 | + # Make the first two ranges overlap, one being 'not_specified' |
| 273 | + valid_data["functional_ranges"][0]["range"] = [1.5, 3.0] |
| 274 | + valid_data["functional_ranges"][1]["range"] = [2.0, 4.0] |
| 275 | + valid_data["functional_ranges"][0]["classification"] = "not_specified" |
| 276 | + sc = ScoreCalibrationCreate.model_validate(valid_data) |
| 277 | + assert len(sc.functional_ranges) == len(valid_data["functional_ranges"]) |
| 278 | + |
| 279 | + |
| 280 | +def test_can_create_score_calibration_when_unclassified_ranges_overlap_with_each_other(): |
| 281 | + valid_data = deepcopy(TEST_BRNICH_SCORE_CALIBRATION) |
| 282 | + # Make the first two ranges overlap, both being 'not_specified' |
| 283 | + valid_data["functional_ranges"][0]["range"] = [1.5, 3.0] |
| 284 | + valid_data["functional_ranges"][1]["range"] = [2.0, 4.0] |
| 285 | + valid_data["functional_ranges"][0]["classification"] = "not_specified" |
| 286 | + valid_data["functional_ranges"][1]["classification"] = "not_specified" |
| 287 | + sc = ScoreCalibrationCreate.model_validate(valid_data) |
| 288 | + assert len(sc.functional_ranges) == len(valid_data["functional_ranges"]) |
| 289 | + |
| 290 | + |
272 | 291 | def test_cannot_create_score_calibration_when_ranges_touch_with_inclusive_ranges(): |
273 | 292 | invalid_data = deepcopy(TEST_BRNICH_SCORE_CALIBRATION) |
274 | 293 | # Make the first two ranges touch |
275 | 294 | invalid_data["functional_ranges"][0]["range"] = [1.0, 2.0] |
276 | 295 | invalid_data["functional_ranges"][1]["range"] = [2.0, 4.0] |
277 | 296 | invalid_data["functional_ranges"][0]["inclusive_upper_bound"] = True |
278 | | - with pytest.raises(ValidationError, match="Score ranges may not overlap; `"): |
| 297 | + with pytest.raises(ValidationError, match="Classified score ranges may not overlap; `"): |
279 | 298 | ScoreCalibrationCreate.model_validate(invalid_data) |
280 | 299 |
|
281 | 300 |
|
|
0 commit comments