|
| 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