Skip to content

Commit 7a2c213

Browse files
add tests for chromosome name validation
1 parent 051c9a1 commit 7a2c213

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

tests/unit/test_types

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
"""Tests for types and validator functions found in src/anyvlm/utils/types.py"""
2+
3+
from pydantic import TypeAdapter, ValidationError
4+
import pytest
5+
from anyvlm.utils.types import ChromosomeName, _normalize_chromosome_name
6+
7+
8+
@pytest.fixture
9+
def valid_chromosomes():
10+
return [
11+
("1", "1"),
12+
("22", "22"),
13+
("X", "X"),
14+
("Y", "Y"),
15+
("MT", "MT"),
16+
("chr1", "1"),
17+
("Chr22", "22"),
18+
("cHrX", "X"),
19+
("chrMT", "MT"),
20+
]
21+
22+
@pytest.fixture
23+
def invalid_chromosomes():
24+
return [
25+
"0",
26+
"23",
27+
"chr23",
28+
"M",
29+
"chrM",
30+
"XY",
31+
"",
32+
"chr",
33+
"1a",
34+
None
35+
]
36+
37+
@pytest.fixture
38+
def chromosome_adapter():
39+
return TypeAdapter(ChromosomeName)
40+
41+
42+
### Test chromosome name normalization function ###
43+
def test_normalize_chromosome_name_valid(valid_chromosomes):
44+
for unnormalized_name, expected_name in valid_chromosomes:
45+
assert _normalize_chromosome_name(unnormalized_name) == expected_name
46+
47+
48+
def test_normalize_chromosome_name_invalid(invalid_chromosomes):
49+
for chromosome_name in invalid_chromosomes:
50+
with pytest.raises(ValueError):
51+
_normalize_chromosome_name(chromosome_name)
52+
53+
54+
### Test ChromosomeName annotated type ###
55+
def test_chromosome_name_adapter_valid(chromosome_adapter, valid_chromosomes):
56+
for raw, expected in valid_chromosomes:
57+
assert chromosome_adapter.validate_python(raw) == expected
58+
59+
60+
def test_chromosome_name_adapter_invalid(chromosome_adapter, invalid_chromosomes):
61+
for chromosome_name in invalid_chromosomes:
62+
with pytest.raises(ValidationError):
63+
chromosome_adapter.validate_python(chromosome_name)

0 commit comments

Comments
 (0)