Skip to content

Commit 37c504e

Browse files
committed
Mock cdot data provider for tests
Although cdot fetching is not currently directly used in any tests, the cdot REST data provider is imported into dcd_mapping.vrs_map. The cdot data provider uses a ChainedSeqFetcher, to which specific fasta file paths are passed in dcd_mapping.lookup. This results in a FileNotFoundError during tests, since these fasta files are not available outside of the mapper Docker container. This fix uses a fake fasta file to generate a ChainedSeqFetcher, so this change does not support actual cdot transcript fetches for future tests.
1 parent bb04c51 commit 37c504e

File tree

4 files changed

+72
-36
lines changed

4 files changed

+72
-36
lines changed

tests/conftest.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from unittest.mock import MagicMock
1919

2020
import pytest
21+
from cdot.hgvs.dataproviders import ChainedSeqFetcher, FastaSeqFetcher
2122

2223
from dcd_mapping.schemas import (
2324
AlignmentResult,
@@ -216,3 +217,18 @@ def _translate_identifier(
216217
mocker.patch("dcd_mapping.vrs_map.get_seqrepo", return_value=mock_seqrepo_access)
217218
mocker.patch("dcd_mapping.lookup.get_seqrepo", return_value=mock_seqrepo_access)
218219
return mock_seqrepo_access
220+
221+
222+
@pytest.fixture()
223+
def data_provider(fixture_data_dir: Path):
224+
"""Provide a ChainedSeqFetcher with mocked fasta files for testing.
225+
Currently, no tests actually use cdot, but a FileNotFoundError would be raised
226+
without this fixture when cdot is imported into dcd_mapping.vrs_map.
227+
"""
228+
# NOTE: This fasta file would not work for test cases that actually use cdot fetching,
229+
# it is only meant to avoid a FileNotFoundError.
230+
test_fasta_file = fixture_data_dir / "test.fasta"
231+
232+
seqfetcher = ChainedSeqFetcher(FastaSeqFetcher(test_fasta_file))
233+
234+
yield seqfetcher # noqa: PT022

tests/fixtures/test.fasta

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
>test_contig_random_sequence
2+
ATTCCATTGCTATATTGCCGGGATGCAATTTTAGCCCGAATATTTATAGCGCGCGTATGATCCTACATC

tests/fixtures/test.fasta.fai

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
test_contig_random_sequence 69 29 69 70

tests/test_vrs_map.py

Lines changed: 53 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
we're focused on remaining consistent w/ previous results.
55
* Move expected data into a separate JSON file or something?
66
"""
7+
from collections.abc import Generator
78
from pathlib import Path
8-
from unittest.mock import MagicMock
9+
from unittest.mock import MagicMock, patch
910

1011
import pytest
12+
from cdot.hgvs.dataproviders import ChainedSeqFetcher
1113
from cool_seq_tool.schemas import AnnotationLayer
1214
from ga4gh.vrs._internal.models import Allele, Haplotype
1315

@@ -88,6 +90,7 @@ def _get_fixtures(urn: str):
8890
def test_2_a_2(
8991
get_fixtures,
9092
mock_seqrepo_access: MagicMock,
93+
data_provider: Generator[ChainedSeqFetcher, None, None],
9194
):
9295
urn = "urn:mavedb:00000002-a-2"
9396
records, metadata, align_result, tx_result = get_fixtures(urn)
@@ -105,13 +108,15 @@ def test_2_a_2(
105108
}
106109

107110
mappings = {}
108-
for target_gene in metadata.target_genes:
109-
mappings[target_gene] = vrs_map(
110-
metadata=metadata.target_genes[target_gene],
111-
align_result=align_result[target_gene],
112-
records=records[target_gene],
113-
transcript=tx_result[target_gene],
114-
)
111+
with patch("dcd_mapping.lookup.seqfetcher") as mock_cdot_seqfetcher:
112+
mock_cdot_seqfetcher.return_value = data_provider
113+
for target_gene in metadata.target_genes:
114+
mappings[target_gene] = vrs_map(
115+
metadata=metadata.target_genes[target_gene],
116+
align_result=align_result[target_gene],
117+
records=records[target_gene],
118+
transcript=tx_result[target_gene],
119+
)
115120
assert mappings["hYAP65 WW domain"] is not None
116121
assert len(mappings["hYAP65 WW domain"]) == 1
117122

@@ -136,6 +141,7 @@ def test_2_a_2(
136141
def test_41_a_1(
137142
get_fixtures,
138143
mock_seqrepo_access: MagicMock,
144+
data_provider: Generator[ChainedSeqFetcher, None, None],
139145
):
140146
urn = "urn:mavedb:00000041-a-1"
141147
records, metadata, align_result, tx_result = get_fixtures(urn)
@@ -164,13 +170,15 @@ def test_41_a_1(
164170
}
165171

166172
mappings = {}
167-
for target_gene in metadata.target_genes:
168-
mappings[target_gene] = vrs_map(
169-
metadata=metadata.target_genes[target_gene],
170-
align_result=align_result[target_gene],
171-
records=records[target_gene],
172-
transcript=tx_result[target_gene],
173-
)
173+
with patch("dcd_mapping.lookup.seqfetcher") as mock_cdot_seqfetcher:
174+
mock_cdot_seqfetcher.return_value = data_provider
175+
for target_gene in metadata.target_genes:
176+
mappings[target_gene] = vrs_map(
177+
metadata=metadata.target_genes[target_gene],
178+
align_result=align_result[target_gene],
179+
records=records[target_gene],
180+
transcript=tx_result[target_gene],
181+
)
174182
assert mappings["Src catalytic domain"] is not None
175183
assert len(mappings["Src catalytic domain"]) == 5
176184

@@ -195,6 +203,7 @@ def test_41_a_1(
195203
def test_99_a_1(
196204
get_fixtures,
197205
mock_seqrepo_access: MagicMock,
206+
data_provider: Generator[ChainedSeqFetcher, None, None],
198207
):
199208
urn = "urn:mavedb:00000099-a-1"
200209
records, metadata, align_result, tx_result = get_fixtures(urn)
@@ -234,13 +243,15 @@ def test_99_a_1(
234243
},
235244
}
236245
mappings = {}
237-
for target_gene in metadata.target_genes:
238-
mappings[target_gene] = vrs_map(
239-
metadata=metadata.target_genes[target_gene],
240-
align_result=align_result[target_gene],
241-
records=records[target_gene],
242-
transcript=tx_result[target_gene],
243-
)
246+
with patch("dcd_mapping.lookup.seqfetcher") as mock_cdot_seqfetcher:
247+
mock_cdot_seqfetcher.return_value = data_provider
248+
for target_gene in metadata.target_genes:
249+
mappings[target_gene] = vrs_map(
250+
metadata=metadata.target_genes[target_gene],
251+
align_result=align_result[target_gene],
252+
records=records[target_gene],
253+
transcript=tx_result[target_gene],
254+
)
244255
assert mappings["RHO"] is not None
245256
assert len(mappings["RHO"]) == 8 # includes protein and genomic for all 4 rows
246257

@@ -265,6 +276,7 @@ def test_99_a_1(
265276
def test_103_c_1(
266277
get_fixtures,
267278
mock_seqrepo_access: MagicMock,
279+
data_provider: Generator[ChainedSeqFetcher, None, None],
268280
):
269281
urn = "urn:mavedb:00000103-c-1"
270282
records, metadata, align_result, tx_result = get_fixtures(urn)
@@ -289,13 +301,15 @@ def test_103_c_1(
289301
}
290302

291303
mappings = {}
292-
for target_gene in metadata.target_genes:
293-
mappings[target_gene] = vrs_map(
294-
metadata=metadata.target_genes[target_gene],
295-
align_result=align_result[target_gene],
296-
records=records[target_gene],
297-
transcript=tx_result[target_gene],
298-
)
304+
with patch("dcd_mapping.lookup.seqfetcher") as mock_cdot_seqfetcher:
305+
mock_cdot_seqfetcher.return_value = data_provider
306+
for target_gene in metadata.target_genes:
307+
mappings[target_gene] = vrs_map(
308+
metadata=metadata.target_genes[target_gene],
309+
align_result=align_result[target_gene],
310+
records=records[target_gene],
311+
transcript=tx_result[target_gene],
312+
)
299313
assert mappings["MAPK1"] is not None
300314
assert len(mappings["MAPK1"]) == 4
301315
for m in mappings["MAPK1"]:
@@ -315,6 +329,7 @@ def test_103_c_1(
315329
def test_1_b_2(
316330
get_fixtures,
317331
mock_seqrepo_access: MagicMock,
332+
data_provider: Generator[ChainedSeqFetcher, None, None],
318333
):
319334
urn = "urn:mavedb:00000001-b-2"
320335
records, metadata, align_result, tx_result = get_fixtures(urn)
@@ -355,13 +370,15 @@ def test_1_b_2(
355370
}
356371

357372
mappings = {}
358-
for target_gene in metadata.target_genes:
359-
mappings[target_gene] = vrs_map(
360-
metadata=metadata.target_genes[target_gene],
361-
align_result=align_result[target_gene],
362-
records=records[target_gene],
363-
transcript=tx_result[target_gene],
364-
)
373+
with patch("dcd_mapping.lookup.seqfetcher") as mock_cdot_seqfetcher:
374+
mock_cdot_seqfetcher.return_value = data_provider
375+
for target_gene in metadata.target_genes:
376+
mappings[target_gene] = vrs_map(
377+
metadata=metadata.target_genes[target_gene],
378+
align_result=align_result[target_gene],
379+
records=records[target_gene],
380+
transcript=tx_result[target_gene],
381+
)
365382
assert mappings["SUMO1"] is not None
366383
assert len(mappings["SUMO1"]) == 8
367384
for m in mappings["SUMO1"]:

0 commit comments

Comments
 (0)