forked from pydna-group/pydna
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest_module_genbank.py
161 lines (142 loc) · 5.97 KB
/
test_module_genbank.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# https://www.ncbi.nlm.nih.gov/nuccore/5
import pytest
from unittest import mock
def test_set_email():
from pydna.genbank import Genbank
with pytest.raises(ValueError):
gb = Genbank("invalidemailaddress")
with pytest.raises(ValueError):
gb = Genbank("[email protected]")
def test_repr():
from pydna.genbank import Genbank
gb = Genbank("[email protected]")
assert repr(gb) == 'GenbankConnection([email protected])'
@mock.patch('Bio.Entrez._urlopen')
def test_biopython_Entrez_efetch_whole(urlopenMock,monkeypatch):
from Bio import Entrez
urlopenMock.return_value = open("X60065.gb", "rb")
Entrez._urlopen = urlopenMock
Entrez.email = "[email protected]"
Entrez.tool = "pydna"
handle = Entrez.efetch(db="nuccore",
id="X60065.1",
rettype="gb",
retmode="text")
from Bio import SeqIO
result = SeqIO.read(handle, "genbank")
canned = SeqIO.read("X60065.gb", "genbank")
assert str(result.seq) == str(canned.seq)
@mock.patch('Bio.Entrez._urlopen')
def test_pydna_Genbank_fresh(urlopenMock,monkeypatch):
from Bio import Entrez
from pydna.genbank import Genbank
urlopenMock.return_value = open("X60065.gb", "rb")
Entrez._urlopen = urlopenMock
monkeypatch.setenv("pydna_cached_funcs", "")
gb = Genbank("[email protected]")
result = gb.nucleotide("X60065.1")
from Bio import SeqIO
canned = SeqIO.read("X60065.gb", "genbank")
assert str(result.seq) == str(canned.seq)
@mock.patch('Bio.Entrez._urlopen')
def test_pydna_Genbank_from_cache(urlopenMock,monkeypatch):
from Bio import Entrez
from pydna.genbank import Genbank
urlopenMock.return_value = open("X60065.gb", "rb")
Entrez._urlopen = urlopenMock
monkeypatch.setenv("pydna_cached_funcs", "pydna.genbank.Genbank.nucleotide")
gb = Genbank("[email protected]")
result = gb.nucleotide("X60065.1")
from Bio import SeqIO
canned = SeqIO.read("X60065.gb", "genbank")
assert str(result.seq) == str(canned.seq)
urlopenMock.return_value = None
result = gb.nucleotide("X60065.1")
assert str(result.seq) == str(canned.seq)
def test_genbank_function_set_email(monkeypatch):
from pydna.genbank import Genbank
mock_Gb = mock.MagicMock()
monkeypatch.setenv("pydna_cached_funcs", "")
monkeypatch.setenv("pydna_email", "[email protected]")
monkeypatch.setattr("pydna.genbank.Genbank", mock_Gb)
from pydna.genbank import genbank
s=genbank("X60065")
mock_Gb.assert_called_with("[email protected]")
def test_pydna_Genbank_fresh_part(monkeypatch):
monkeypatch.setenv("pydna_cached_funcs", "")
import pytest
from unittest import mock
mock_efetch = mock.MagicMock(name="mock_efetch1")
mock_efetch().read.side_effect = open("X60065-100-110.gb", "r").read
monkeypatch.setenv("pydna_email", "[email protected]")
monkeypatch.setattr("pydna.genbank._Entrez.efetch", mock_efetch)
from pydna.genbank import Genbank
gb = Genbank("[email protected]")
result = gb.nucleotide("X60065.1", seq_start=1,seq_stop=10)
assert(str(result.seq).lower() == "ctgaaacggac")
def test_pydna_Genbank_fresh_partII(monkeypatch):
monkeypatch.setenv("pydna_cached_funcs", "")
import pytest
from unittest import mock
mock_efetch = mock.MagicMock(name="mock_efetch1")
mock_efetch().read.side_effect = open("X60065-100-110.gb", "r").read
monkeypatch.setenv("pydna_email", "[email protected]")
monkeypatch.setattr("pydna.genbank._Entrez.efetch", mock_efetch)
from pydna.genbank import Genbank
gb = Genbank("[email protected]")
result = gb.nucleotide("X60065.1 REGION: 100..110")
assert(str(result.seq).lower() == "ctgaaacggac")
@mock.patch('Bio.Entrez._urlopen')
def test_pydna_Genbank_fresh_circular(urlopenMock,monkeypatch):
from Bio import Entrez
from pydna.genbank import Genbank
urlopenMock.return_value = open("pUC19.gb", "rb")
Entrez._urlopen = urlopenMock
monkeypatch.setenv("pydna_cached_funcs", "")
gb = Genbank("[email protected]")
result = gb.nucleotide("L09137.2")
from Bio import SeqIO
canned = SeqIO.read("pUC19.gb", "genbank")
assert str(result.seq) == str(canned.seq)
assert result.circular
assert not result.linear
@mock.patch('Bio.Entrez._urlopen')
def test_pydna_Genbank_set_strand(urlopenMock,monkeypatch):
from Bio import Entrez
from pydna.genbank import Genbank
urlopenMock.return_value = open("X60065.gb", "rb")
Entrez._urlopen = urlopenMock
monkeypatch.setenv("pydna_cached_funcs", "")
gb = Genbank("[email protected]")
result = gb.nucleotide("X60065.1", strand=1)
from Bio import SeqIO
canned = SeqIO.read("X60065.gb", "genbank")
assert str(result.seq) == str(canned.seq)
@mock.patch('Bio.Entrez._urlopen')
def test_pydna_Genbank_set_strand_not_valid(urlopenMock,monkeypatch):
from Bio import Entrez
from pydna.genbank import Genbank
urlopenMock.return_value = open("X60065.gb", "rb")
Entrez._urlopen = urlopenMock
monkeypatch.setenv("pydna_cached_funcs", "")
gb = Genbank("[email protected]")
result = gb.nucleotide("X60065.1", strand="notvalid")
from Bio import SeqIO
canned = SeqIO.read("X60065.gb", "genbank")
assert str(result.seq) == str(canned.seq)
@mock.patch('Bio.Entrez._urlopen')
def test_pydna_Genbank_set_strand_antisense(urlopenMock,monkeypatch):
from Bio import Entrez
from pydna.genbank import Genbank
urlopenMock.return_value = open("X60065.gb", "rb")
Entrez._urlopen = urlopenMock
monkeypatch.setenv("pydna_cached_funcs", "")
gb = Genbank("[email protected]")
result = gb.nucleotide("X60065.1", strand="antisense")
from Bio import SeqIO
canned = SeqIO.read("X60065.gb", "genbank")
assert str(result.seq) == str(canned.seq)
if __name__ == '__main__':
pytest.main([__file__, "-vv", "-s", "--cov=pydna","--cov-report=html"])