sequenceserver 2.0.0.beta3 → 2.0.0.beta4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.eslintrc.json +36 -0
- data/.rubocop.yml +1 -1
- data/.travis.yml +53 -20
- data/AppImage/recipe.yml +15 -0
- data/AppImage/sequenceserver.desktop +8 -0
- data/AppImage/sequenceserver.png +0 -0
- data/AppImage/sequenceserver.sh +11 -0
- data/README.md +79 -46
- data/bin/sequenceserver +4 -4
- data/lib/sequenceserver/version.rb +1 -1
- data/package.json +2 -0
- data/public/css/grapher.css +3 -0
- data/public/css/sequenceserver.css +17 -6
- data/public/css/sequenceserver.min.css +3 -3
- data/public/js/circos.js +515 -491
- data/public/js/grapher.js +12 -6
- data/public/js/hits_overview.js +321 -308
- data/public/js/hsp.js +12 -7
- data/public/js/length_distribution.js +241 -234
- data/public/js/report.js +196 -174
- data/public/js/search.js +3 -3
- data/public/js/sequenceserver.js +9 -9
- data/public/js/utils.js +17 -10
- data/public/js/visualisation_helpers.js +77 -77
- data/public/sequenceserver-report.min.js +17 -17
- data/public/sequenceserver-search.min.js +1 -1
- data/public/vendor/github/nicgirault/circosJs@1.7.0/dist/circosJS.js +1 -5
- data/sequenceserver.gemspec +1 -2
- data/spec/blast_versions/blast_2.2.30/blast_2.2.30_spec.rb +13 -13
- data/spec/blast_versions/blast_2.2.30/import_spec_capybara_local_2.2.30.rb +555 -25
- data/spec/blast_versions/blast_2.2.31/blast_2.2.31_spec.rb +13 -13
- data/spec/blast_versions/blast_2.2.31/import_spec_capybara_local_2.2.31.rb +558 -24
- data/spec/blast_versions/blast_2.3.0/blast_2.3.0_spec.rb +13 -13
- data/spec/blast_versions/blast_2.3.0/import_spec_capybara_local_2.3.0.rb +561 -26
- data/spec/blast_versions/blast_2.4.0/blast_2.4.0_spec.rb +13 -13
- data/spec/blast_versions/blast_2.4.0/import_spec_capybara_local_2.4.0.rb +561 -25
- data/spec/blast_versions/blast_2.5.0/blast_2.5.0_spec.rb +13 -13
- data/spec/blast_versions/blast_2.5.0/import_spec_capybara_local_2.5.0.rb +558 -24
- data/spec/blast_versions/blast_2.6.0/blast_2.6.0_spec.rb +13 -13
- data/spec/blast_versions/blast_2.6.0/import_spec_capybara_local_2.6.0.rb +559 -24
- data/spec/blast_versions/blast_2.7.1/blast_2.7.1_spec.rb +13 -13
- data/spec/blast_versions/blast_2.7.1/import_spec_capybara_local_2.7.1.rb +559 -28
- data/spec/blast_versions/blast_2.8.1/blast_2.8.1_spec.rb +13 -13
- data/spec/blast_versions/blast_2.8.1/import_spec_capybara_local_2.8.1.rb +559 -27
- data/spec/blast_versions/blast_2.9.0/blast_2.9.0_spec.rb +13 -13
- data/spec/blast_versions/blast_2.9.0/import_spec_capybara_local_2.9.0.rb +557 -25
- data/spec/blast_versions/diamond_0.9.24/diamond_0.9.24_spec.rb +13 -13
- data/spec/blast_versions/diamond_0.9.24/import_spec_capybara_local_0.9.24.rb +219 -21
- data/spec/capybara_spec.rb +25 -28
- data/spec/download_helper.rb +6 -3
- data/spec/sequences/MH011443_1_gi_1486783306_gb_MH011443_1.txt +6 -0
- data/spec/sequences/MH011443_1_gi_1486783307_gb_AYF55702_1.txt +6 -0
- data/spec/sequences/MH011443_1_gi_1528997474_gb_MH447967_1.txt +30 -0
- data/spec/sequences/MH011443_1_sp_P04637_P53_HUMAN.txt +6 -0
- data/spec/sequences/alignment-35_hits_diamond_blastp.txt +210 -0
- data/spec/sequences/alignment-35_hits_diamond_blastx.txt +210 -0
- data/spec/sequences/alignment-3_hits.txt +18 -0
- data/spec/sequences/alignment-40_hits_blastn.txt +246 -0
- data/spec/sequences/alignment-40_hits_blastp.txt +240 -0
- data/spec/sequences/alignment-40_hits_blastp_2.2.30.txt +240 -0
- data/spec/sequences/alignment-40_hits_blastx.txt +240 -0
- data/spec/sequences/alignment-40_hits_tblastn.txt +240 -0
- data/spec/sequences/alignment-40_hits_tblastn_2.2.30.txt +240 -0
- data/spec/sequences/alignment-40_hits_tblastx.txt +2664 -0
- data/spec/sequences/alignment-4_hits.txt +24 -0
- data/spec/sequences/alignment-4_hits_blastn.txt +24 -0
- data/spec/sequences/alignment-4_hits_blastp.txt +24 -0
- data/spec/sequences/alignment-4_hits_blastp_2.2.30.txt +24 -0
- data/spec/sequences/alignment-4_hits_blastx.txt +24 -0
- data/spec/sequences/alignment-4_hits_diamond_blastp.txt +24 -0
- data/spec/sequences/alignment-4_hits_diamond_blastx.txt +24 -0
- data/spec/sequences/alignment-4_hits_tblastn.txt +24 -0
- data/spec/sequences/alignment-4_hits_tblastn_2.2.30.txt +24 -0
- data/spec/sequences/alignment-4_hits_tblastx.txt +318 -0
- data/spec/sequences/sp_P04637_P53_HUMAN_gi_1099170394_ref_XP_018868681_1.txt +6 -0
- data/spec/sequences/sp_P04637_P53_HUMAN_gi_120407068_ref_NP_000537_3.txt +6 -0
- data/spec/sequences/sp_P04637_P53_HUMAN_gi_1484127324_gb_MG595988_1.txt +6 -0
- data/spec/sequences/sp_P04637_P53_HUMAN_gi_395440626_gb_JQ694049_1.txt +6 -0
- data/spec/sequences/sp_P04637_P53_HUMAN_sp_P04637_P53_HUMAN.txt +6 -0
- data/spec/spec_helper.rb +3 -3
- metadata +67 -57
- data/.eslintrc +0 -213
- data/Rakefile +0 -8
- data/spec/dotdir/blast_2.4.0/blastn/TBLASTN_XML_2.4.0.xml +0 -1181
- data/spec/dotdir/blast_2.5.0/blastn/BLASTN_LONG_XML_2.5.0.xml +0 -18813
- data/spec/import_spec_capybara_local.rb +0 -61
|
@@ -33,9 +33,9 @@ module SequenceServer
|
|
|
33
33
|
no_hits_report = BLAST::Report.new(no_hits)
|
|
34
34
|
|
|
35
35
|
it 'will return queries with valid length' do
|
|
36
|
-
hits_report.queries.first.length.should be_a
|
|
36
|
+
hits_report.queries.first.length.should be_a Integer
|
|
37
37
|
hits_report.queries.first.length.should satisfy { |n| n > 0 }
|
|
38
|
-
no_hits_report.queries.first.length.should be_a
|
|
38
|
+
no_hits_report.queries.first.length.should be_a Integer
|
|
39
39
|
no_hits_report.queries.first.length.should satisfy { |n| n > 0 }
|
|
40
40
|
end
|
|
41
41
|
|
|
@@ -80,45 +80,45 @@ module SequenceServer
|
|
|
80
80
|
# Test Random HSPs to ensure that all the values from HSP struct are valid.
|
|
81
81
|
it 'have correct alignment values' do
|
|
82
82
|
hits_report.queries.last.hits.first.hsps.last.bit_score.should be_a Float
|
|
83
|
-
hits_report.queries.last.hits.first.hsps.last.score.should be_a
|
|
83
|
+
hits_report.queries.last.hits.first.hsps.last.score.should be_a Integer
|
|
84
84
|
|
|
85
85
|
hits_report.queries.first.hits.first.hsps.first.evalue.should be_a Float
|
|
86
86
|
hits_report.queries.first.hits.first.hsps.first.evalue
|
|
87
87
|
.should_not satisfy { |n| n < 0 }
|
|
88
88
|
|
|
89
|
-
hits_report.queries.first.hits.last.hsps.first.qstart.should be_a
|
|
89
|
+
hits_report.queries.first.hits.last.hsps.first.qstart.should be_a Integer
|
|
90
90
|
hits_report.queries.first.hits.last.hsps.first.qstart
|
|
91
91
|
.should_not satisfy { |n| n < 0 }
|
|
92
92
|
|
|
93
|
-
hits_report.queries.first.hits.last.hsps.first.qend.should be_a
|
|
93
|
+
hits_report.queries.first.hits.last.hsps.first.qend.should be_a Integer
|
|
94
94
|
hits_report.queries.first.hits.last.hsps.first.qend
|
|
95
95
|
.should_not satisfy { |n| n < 0 }
|
|
96
96
|
|
|
97
|
-
hits_report.queries.last.hits.last.hsps.last.sstart.should be_a
|
|
97
|
+
hits_report.queries.last.hits.last.hsps.last.sstart.should be_a Integer
|
|
98
98
|
hits_report.queries.last.hits.last.hsps.last.sstart
|
|
99
99
|
.should_not satisfy { |n| n < 0 }
|
|
100
100
|
|
|
101
|
-
hits_report.queries.first.hits.first.hsps.last.send.should be_a
|
|
101
|
+
hits_report.queries.first.hits.first.hsps.last.send.should be_a Integer
|
|
102
102
|
hits_report.queries.first.hits.first.hsps.last.send
|
|
103
103
|
.should_not satisfy { |n| n < 0 }
|
|
104
104
|
|
|
105
|
-
hits_report.queries.first.hits.first.hsps.last.qframe.should be_a
|
|
106
|
-
hits_report.queries.first.hits.first.hsps.last.sframe.should be_a
|
|
105
|
+
hits_report.queries.first.hits.first.hsps.last.qframe.should be_a Integer
|
|
106
|
+
hits_report.queries.first.hits.first.hsps.last.sframe.should be_a Integer
|
|
107
107
|
|
|
108
|
-
hits_report.queries.first.hits.first.hsps.last.identity.should be_a
|
|
108
|
+
hits_report.queries.first.hits.first.hsps.last.identity.should be_a Integer
|
|
109
109
|
hits_report.queries.first.hits.first.hsps.last.identity
|
|
110
110
|
.should_not satisfy { |n| n < 0 }
|
|
111
111
|
|
|
112
|
-
hits_report.queries.first.hits.first.hsps.last.gaps.should be_a
|
|
112
|
+
hits_report.queries.first.hits.first.hsps.last.gaps.should be_a Integer
|
|
113
113
|
hits_report.queries.first.hits.first.hsps.last.gaps
|
|
114
114
|
.should_not satisfy { |n| n < 0 }
|
|
115
115
|
|
|
116
116
|
hits_report.queries.first.hits.first.hsps.last.positives
|
|
117
|
-
.should be_a
|
|
117
|
+
.should be_a Integer
|
|
118
118
|
hits_report.queries.first.hits.first.hsps.last.positives
|
|
119
119
|
.should_not satisfy { |n| n < 0 }
|
|
120
120
|
|
|
121
|
-
hits_report.queries.first.hits.first.hsps.last.length.should be_a
|
|
121
|
+
hits_report.queries.first.hits.first.hsps.last.length.should be_a Integer
|
|
122
122
|
hits_report.queries.first.hits.first.hsps.last.length
|
|
123
123
|
.should satisfy { |n| n > 0 }
|
|
124
124
|
|
|
@@ -1,34 +1,232 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
describe 'report generated from imported XML', type: :feature, js: true do
|
|
2
|
+
# Fasta files used for testing consist of TP53 and COX41 protein/nucleotide
|
|
3
|
+
# sequences for reproducibility.
|
|
4
|
+
it 'loads diamond BLASTP xml and tests hit alignment and sidebar Alignment download' do
|
|
5
|
+
access_by_uuid('diamond_0.9.24/blastp')
|
|
6
|
+
# Click on the first Alignment download button on the page and wait for the
|
|
7
|
+
# download to finish.
|
|
8
|
+
page.execute_script("$('.download-aln:eq(0)').click()")
|
|
9
|
+
wait_for_download
|
|
10
|
+
expect(File.basename(downloaded_file)).to eq('sp_P04637_P53_HUMAN_sp_P04637_P53_HUMAN.txt')
|
|
11
|
+
expect(File.read(downloaded_file)).to eq(File.read('spec/sequences/sp_P04637_P53_HUMAN_sp_P04637_P53_HUMAN.txt'))
|
|
5
12
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
13
|
+
clear_downloads
|
|
14
|
+
|
|
15
|
+
# Click on the Alignment of all hits download and compare the downloaded
|
|
16
|
+
# content
|
|
17
|
+
|
|
18
|
+
page.click_link('Alignment of all hits')
|
|
19
|
+
wait_for_download
|
|
20
|
+
|
|
21
|
+
expect(File.basename(downloaded_file)).to eq('alignment-35_hits.txt')
|
|
22
|
+
expect(File.read(downloaded_file)).to eq(File.read('spec/sequences/alignment-35_hits_diamond_blastp.txt'))
|
|
23
|
+
clear_downloads
|
|
24
|
+
|
|
25
|
+
# Check the cheboxes of indicted hits and click on the download of Alignment
|
|
26
|
+
# of selected hits and compare the downloaded content
|
|
27
|
+
|
|
28
|
+
page.check('Query_1_hit_1_checkbox')
|
|
29
|
+
page.check('Query_1_hit_2_checkbox')
|
|
30
|
+
page.check('Query_2_hit_1_checkbox')
|
|
31
|
+
page.check('Query_2_hit_2_checkbox')
|
|
32
|
+
page.click_link('Alignment of 4 selected hit(s)')
|
|
33
|
+
wait_for_download
|
|
34
|
+
|
|
35
|
+
expect(File.basename(downloaded_file)).to eq('alignment-4_hits.txt')
|
|
36
|
+
expect(File.read(downloaded_file)).to eq(File.read('spec/sequences/alignment-4_hits_diamond_blastp.txt'))
|
|
37
|
+
page.should have_content('BLASTP')
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'loads diamond BLASTP XML and tests alignment overview and hit PNG/SVG download' do
|
|
41
|
+
access_by_uuid('diamond_0.9.24/blastp')
|
|
42
|
+
|
|
43
|
+
# Click on the PNG/SVG download button of the alignment overview and compare
|
|
44
|
+
# the downloaded content.
|
|
45
|
+
|
|
46
|
+
page.execute_script("$('.export-to-png:eq(0)').click()")
|
|
47
|
+
wait_for_download
|
|
48
|
+
expect(File.basename(downloaded_file)).to eq('Alignment-Overview-sp_P04637_P53_HUMAN.png')
|
|
49
|
+
|
|
50
|
+
clear_downloads
|
|
51
|
+
|
|
52
|
+
page.execute_script("$('.export-to-svg:eq(0)').click()")
|
|
53
|
+
wait_for_download
|
|
54
|
+
expect(File.basename(downloaded_file)).to eq('Alignment-Overview-sp_P04637_P53_HUMAN.svg')
|
|
55
|
+
|
|
56
|
+
clear_downloads
|
|
57
|
+
|
|
58
|
+
# Click on the PNG/SVG download button of the first hit available and
|
|
59
|
+
# compare the downloaded content.
|
|
60
|
+
page.execute_script("$('.export-to-png:eq(1)').click()")
|
|
61
|
+
wait_for_download
|
|
62
|
+
expect(File.basename(downloaded_file)).to eq('Kablammo-sp_P04637_P53_HUMAN-sp_P04637_P53_HUMAN.png')
|
|
9
63
|
|
|
10
|
-
|
|
11
|
-
before do |scenario|
|
|
12
|
-
Capybara.app = SequenceServer.init
|
|
13
|
-
Capybara.server = :webrick
|
|
14
|
-
Capybara.javascript_driver = :selenium
|
|
15
|
-
Capybara.default_max_wait_time = 60
|
|
64
|
+
clear_downloads
|
|
16
65
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
end
|
|
66
|
+
page.execute_script("$('.export-to-svg:eq(1)').click()")
|
|
67
|
+
wait_for_download
|
|
68
|
+
expect(File.basename(downloaded_file)).to eq('Kablammo-sp_P04637_P53_HUMAN-sp_P04637_P53_HUMAN.svg')
|
|
69
|
+
page.should have_content('BLASTP')
|
|
22
70
|
end
|
|
23
71
|
|
|
24
|
-
|
|
25
|
-
it 'loads Diamond blastp xml report' do
|
|
72
|
+
it 'loads diamond BLASTP XML and tests Circos download' do
|
|
26
73
|
access_by_uuid('diamond_0.9.24/blastp')
|
|
74
|
+
|
|
75
|
+
# Click on the Circos expanding button, wait for animation, click on the
|
|
76
|
+
# download of PNG/SVG file and test that it initiated a file download in a
|
|
77
|
+
# right format.
|
|
78
|
+
|
|
79
|
+
page.should have_content('Chord diagram: queries and their top hits')
|
|
80
|
+
page.execute_script("$('.circos > .grapher-header > h5').click()")
|
|
81
|
+
sleep 1
|
|
82
|
+
|
|
83
|
+
page.execute_script("$('.export-to-png:eq(0)').click()")
|
|
84
|
+
wait_for_download
|
|
85
|
+
expect(File.basename(downloaded_file)).to eq('Circos-visualisation.png')
|
|
86
|
+
|
|
87
|
+
clear_downloads
|
|
88
|
+
|
|
89
|
+
page.execute_script("$('.export-to-svg:eq(0)').click()")
|
|
90
|
+
wait_for_download
|
|
91
|
+
expect(File.basename(downloaded_file)).to eq('Circos-visualisation.svg')
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it 'loads BLASTP XML and tests Length distribution download' do
|
|
95
|
+
access_by_uuid('diamond_0.9.24/blastp')
|
|
96
|
+
|
|
97
|
+
# Click on the Length distribution expanding button, wait for animation,
|
|
98
|
+
# click on the download of PNG/SVG file and test that it initiated a file
|
|
99
|
+
# download in a right format.
|
|
100
|
+
|
|
101
|
+
page.should have_content('Length distribution of hits')
|
|
102
|
+
page.execute_script("$('.length-distribution > .grapher-header > h5').click()")
|
|
103
|
+
sleep 1
|
|
104
|
+
|
|
105
|
+
page.execute_script("$('.export-to-png:eq(1)').click()")
|
|
106
|
+
wait_for_download
|
|
107
|
+
expect(File.basename(downloaded_file)).to eq('length-distribution-sp_P04637_P53_HUMAN.png')
|
|
108
|
+
|
|
109
|
+
clear_downloads
|
|
110
|
+
|
|
111
|
+
page.execute_script("$('.export-to-svg:eq(1)').click()")
|
|
112
|
+
wait_for_download
|
|
113
|
+
expect(File.basename(downloaded_file)).to eq('length-distribution-sp_P04637_P53_HUMAN.svg')
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# BLASTX test scenarios
|
|
117
|
+
|
|
118
|
+
it 'loads diamond BLASTX XML and tests hit alignment and sidebar Alignment download' do
|
|
119
|
+
access_by_uuid('diamond_0.9.24/blastx')
|
|
120
|
+
|
|
121
|
+
# Click on the first Alignment download button on the page and wait for the
|
|
122
|
+
# download to finish.
|
|
123
|
+
page.execute_script("$('.download-aln:eq(0)').click()")
|
|
124
|
+
wait_for_download
|
|
125
|
+
|
|
126
|
+
expect(File.basename(downloaded_file)).to eq('MH011443_1_sp_P04637_P53_HUMAN.txt')
|
|
127
|
+
expect(File.read(downloaded_file)).to eq(File.read('spec/sequences/MH011443_1_sp_P04637_P53_HUMAN.txt'))
|
|
128
|
+
|
|
129
|
+
clear_downloads
|
|
130
|
+
|
|
131
|
+
# Click on the Alignment of all hits download and compare the downloaded
|
|
132
|
+
# content
|
|
133
|
+
|
|
134
|
+
page.click_link('Alignment of all hits')
|
|
135
|
+
wait_for_download
|
|
136
|
+
|
|
137
|
+
expect(File.basename(downloaded_file)).to eq('alignment-35_hits.txt')
|
|
138
|
+
expect(File.read(downloaded_file)).to eq(File.read('spec/sequences/alignment-35_hits_diamond_blastx.txt'))
|
|
139
|
+
clear_downloads
|
|
140
|
+
|
|
141
|
+
# Select four hit checkboxes and click on the Alignment of selected hits.
|
|
142
|
+
# Compare the downloaded content.
|
|
143
|
+
page.check('Query_1_hit_3_checkbox')
|
|
144
|
+
page.check('Query_1_hit_4_checkbox')
|
|
145
|
+
page.check('Query_2_hit_3_checkbox')
|
|
146
|
+
page.check('Query_2_hit_4_checkbox')
|
|
147
|
+
page.click_link('Alignment of 4 selected hit(s)')
|
|
148
|
+
wait_for_download
|
|
149
|
+
|
|
150
|
+
expect(File.basename(downloaded_file)).to eq('alignment-4_hits.txt')
|
|
151
|
+
expect(File.read(downloaded_file)).to eq(File.read('spec/sequences/alignment-4_hits_diamond_blastx.txt'))
|
|
152
|
+
|
|
153
|
+
page.should have_content('BLASTX')
|
|
27
154
|
end
|
|
28
155
|
|
|
29
|
-
it 'loads
|
|
156
|
+
it 'loads diamond BLASTX XML and tests alignment overview and hit PNG/SVG download' do
|
|
30
157
|
access_by_uuid('diamond_0.9.24/blastx')
|
|
158
|
+
|
|
159
|
+
# Click on the PNG/SVG download button of the alignment overview and compare
|
|
160
|
+
# the downloaded content.
|
|
161
|
+
page.execute_script("$('.export-to-png:eq(0)').click()")
|
|
162
|
+
wait_for_download
|
|
163
|
+
expect(File.basename(downloaded_file)).to eq('Alignment-Overview-MH011443_1.png')
|
|
164
|
+
|
|
165
|
+
clear_downloads
|
|
166
|
+
|
|
167
|
+
page.execute_script("$('.export-to-svg:eq(0)').click()")
|
|
168
|
+
wait_for_download
|
|
169
|
+
expect(File.basename(downloaded_file)).to eq('Alignment-Overview-MH011443_1.svg')
|
|
170
|
+
|
|
171
|
+
clear_downloads
|
|
172
|
+
# Click on the PNG/SVG download button of the first hit available and
|
|
173
|
+
# compare the downloaded content.
|
|
174
|
+
page.execute_script("$('.export-to-png:eq(1)').click()")
|
|
175
|
+
|
|
176
|
+
wait_for_download
|
|
177
|
+
expect(File.basename(downloaded_file)).to eq('Kablammo-MH011443_1-sp_P04637_P53_HUMAN.png')
|
|
178
|
+
|
|
179
|
+
clear_downloads
|
|
180
|
+
|
|
181
|
+
page.execute_script("$('.export-to-svg:eq(1)').click()")
|
|
182
|
+
wait_for_download
|
|
183
|
+
expect(File.basename(downloaded_file)).to eq('Kablammo-MH011443_1-sp_P04637_P53_HUMAN.svg')
|
|
184
|
+
page.should have_content('BLASTX')
|
|
31
185
|
end
|
|
186
|
+
|
|
187
|
+
it 'loads diamond BLASTX XML and tests Circos download' do
|
|
188
|
+
access_by_uuid('diamond_0.9.24/blastx')
|
|
189
|
+
# Click on the Circos expanding button, wait for animation, click on the
|
|
190
|
+
# download of PNG/SVG file and test that it initiated a file download in a
|
|
191
|
+
# right format.
|
|
192
|
+
|
|
193
|
+
page.should have_content('Chord diagram: queries and their top hits')
|
|
194
|
+
page.execute_script("$('.circos > .grapher-header > h5').click()")
|
|
195
|
+
sleep 1
|
|
196
|
+
|
|
197
|
+
page.execute_script("$('.export-to-png:eq(0)').click()")
|
|
198
|
+
wait_for_download
|
|
199
|
+
expect(File.basename(downloaded_file)).to eq('Circos-visualisation.png')
|
|
200
|
+
|
|
201
|
+
clear_downloads
|
|
202
|
+
|
|
203
|
+
page.execute_script("$('.export-to-svg:eq(0)').click()")
|
|
204
|
+
wait_for_download
|
|
205
|
+
expect(File.basename(downloaded_file)).to eq('Circos-visualisation.svg')
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
it 'loads diamond BLASTX XML and tests Length distribution download' do
|
|
209
|
+
access_by_uuid('diamond_0.9.24/blastx')
|
|
210
|
+
|
|
211
|
+
# Click on the Length distribution expanding button, wait for animation,
|
|
212
|
+
# click on the download of PNG/SVG file and test that it initiated a file
|
|
213
|
+
# download in a right format.
|
|
214
|
+
|
|
215
|
+
page.should have_content('Length distribution of hits')
|
|
216
|
+
page.execute_script("$('.length-distribution > .grapher-header > h5').click()")
|
|
217
|
+
sleep 1
|
|
218
|
+
|
|
219
|
+
page.execute_script("$('.export-to-png:eq(1)').click()")
|
|
220
|
+
wait_for_download
|
|
221
|
+
expect(File.basename(downloaded_file)).to eq('length-distribution-MH011443_1.png')
|
|
222
|
+
|
|
223
|
+
clear_downloads
|
|
224
|
+
|
|
225
|
+
page.execute_script("$('.export-to-svg:eq(1)').click()")
|
|
226
|
+
wait_for_download
|
|
227
|
+
expect(File.basename(downloaded_file)).to eq('length-distribution-MH011443_1.svg')
|
|
228
|
+
end
|
|
229
|
+
|
|
32
230
|
## Helpers ##
|
|
33
231
|
|
|
34
232
|
def access_by_uuid(id)
|
data/spec/capybara_spec.rb
CHANGED
|
@@ -14,51 +14,50 @@ describe 'a browser', type: :feature, js: true do
|
|
|
14
14
|
fill_in('sequence', with: nucleotide_query)
|
|
15
15
|
check(nucleotide_databases.first)
|
|
16
16
|
page.evaluate_script("$('.protein .database').first().hasClass('disabled')")
|
|
17
|
-
|
|
17
|
+
.should eq(true)
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
it 'shows a dropdown menu when other blast methods are available' do
|
|
21
21
|
visit '/'
|
|
22
22
|
fill_in('sequence', with: nucleotide_query)
|
|
23
23
|
check(nucleotide_databases.first)
|
|
24
|
-
page.save_screenshot('screenshot.png')
|
|
25
24
|
page.has_css?('button.dropdown-toggle').should eq(true)
|
|
26
25
|
end
|
|
27
26
|
|
|
28
27
|
it 'can run a simple blastn search' do
|
|
29
28
|
perform_search query: nucleotide_query,
|
|
30
|
-
|
|
29
|
+
databases: nucleotide_databases
|
|
31
30
|
page.should have_content('BLASTN')
|
|
32
31
|
end
|
|
33
32
|
|
|
34
33
|
it 'can run a simple blastp search' do
|
|
35
34
|
perform_search query: protein_query,
|
|
36
|
-
|
|
35
|
+
databases: protein_databases
|
|
37
36
|
page.should have_content('BLASTP')
|
|
38
37
|
end
|
|
39
38
|
|
|
40
39
|
it 'can run a simple blastx search' do
|
|
41
40
|
perform_search query: nucleotide_query,
|
|
42
|
-
|
|
41
|
+
databases: protein_databases
|
|
43
42
|
page.should have_content('BLASTX')
|
|
44
43
|
end
|
|
45
44
|
|
|
46
45
|
it 'can run a simple tblastx search' do
|
|
47
46
|
perform_search query: nucleotide_query,
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
databases: nucleotide_databases,
|
|
48
|
+
method: 'tblastx'
|
|
50
49
|
page.should have_content('TBLASTX')
|
|
51
50
|
end
|
|
52
51
|
|
|
53
52
|
it 'can run a simple tblastn search' do
|
|
54
53
|
perform_search query: protein_query,
|
|
55
|
-
|
|
54
|
+
databases: nucleotide_databases
|
|
56
55
|
page.should have_content('TBLASTN')
|
|
57
56
|
end
|
|
58
57
|
|
|
59
58
|
### Test aspects of the generated report.
|
|
60
59
|
|
|
61
|
-
it
|
|
60
|
+
it 'can download FASTA of each hit' do
|
|
62
61
|
# Do a BLASTP search. protein_query refers to the first two sequence in
|
|
63
62
|
# protein_databases[0], so the top hits are the query sequences themselves.
|
|
64
63
|
perform_search(query: protein_query,
|
|
@@ -70,13 +69,13 @@ describe 'a browser', type: :feature, js: true do
|
|
|
70
69
|
wait_for_download
|
|
71
70
|
|
|
72
71
|
# Test name and content of the downloaded file.
|
|
73
|
-
expect(File.basename(downloaded_file))
|
|
74
|
-
to eq('sequenceserver-SI2.2.0_06267.fa')
|
|
75
|
-
expect(File.read(downloaded_file))
|
|
76
|
-
to eq(File.read("#{__dir__}/sequences/sequenceserver-SI2.2.0_06267.fa"))
|
|
72
|
+
expect(File.basename(downloaded_file))
|
|
73
|
+
.to eq('sequenceserver-SI2.2.0_06267.fa')
|
|
74
|
+
expect(File.read(downloaded_file))
|
|
75
|
+
.to eq(File.read("#{__dir__}/sequences/sequenceserver-SI2.2.0_06267.fa"))
|
|
77
76
|
end
|
|
78
77
|
|
|
79
|
-
it
|
|
78
|
+
it 'can download FASTA of selected hits' do
|
|
80
79
|
# Do a BLASTP search. protein_query refers to the first two sequence in
|
|
81
80
|
# protein_databases[0], so the top hits are the query sequences themselves.
|
|
82
81
|
perform_search(query: protein_query,
|
|
@@ -89,10 +88,10 @@ describe 'a browser', type: :feature, js: true do
|
|
|
89
88
|
wait_for_download
|
|
90
89
|
|
|
91
90
|
expect(File.basename(downloaded_file)).to eq('sequenceserver-2_hits.fa')
|
|
92
|
-
expect(File.read(downloaded_file)).to eq(File.read(
|
|
91
|
+
expect(File.read(downloaded_file)).to eq(File.read('spec/sequences/sequenceserver-2_hits.fa'))
|
|
93
92
|
end
|
|
94
93
|
|
|
95
|
-
it
|
|
94
|
+
it 'can download FASTA of all hits' do
|
|
96
95
|
# Do a BLASTP search. protein_query refers to the first two sequence in
|
|
97
96
|
# protein_databases[0], so the top hits are the query sequences themselves.
|
|
98
97
|
perform_search(query: protein_query,
|
|
@@ -103,10 +102,10 @@ describe 'a browser', type: :feature, js: true do
|
|
|
103
102
|
wait_for_download
|
|
104
103
|
|
|
105
104
|
expect(File.basename(downloaded_file)).to eq('sequenceserver-2_hits.fa')
|
|
106
|
-
expect(File.read(downloaded_file)).to eq(File.read(
|
|
105
|
+
expect(File.read(downloaded_file)).to eq(File.read('spec/sequences/sequenceserver-2_hits.fa'))
|
|
107
106
|
end
|
|
108
107
|
|
|
109
|
-
it
|
|
108
|
+
it 'can download alignment for each hit' do
|
|
110
109
|
# Do a BLASTP search. protein_query refers to the first two sequence in
|
|
111
110
|
# protein_databases[0], so the top hits are the query sequences themselves.
|
|
112
111
|
perform_search(query: protein_query,
|
|
@@ -119,11 +118,11 @@ describe 'a browser', type: :feature, js: true do
|
|
|
119
118
|
|
|
120
119
|
# Test name and content of the downloaded file.
|
|
121
120
|
expect(File.basename(downloaded_file)).to eq('Query_1_SI2_2_0_06267.txt')
|
|
122
|
-
expect(File.read(downloaded_file))
|
|
123
|
-
to eq(File.read("#{__dir__}/sequences/Query_1_SI2_2_0_06267.txt"))
|
|
121
|
+
expect(File.read(downloaded_file))
|
|
122
|
+
.to eq(File.read("#{__dir__}/sequences/Query_1_SI2_2_0_06267.txt"))
|
|
124
123
|
end
|
|
125
124
|
|
|
126
|
-
it
|
|
125
|
+
it 'can download Alignment of selected hits' do
|
|
127
126
|
# Do a BLASTP search. protein_query refers to the first two sequence in
|
|
128
127
|
# protein_databases[0], so the top hits are the query sequences themselves.
|
|
129
128
|
perform_search(query: protein_query,
|
|
@@ -136,10 +135,10 @@ describe 'a browser', type: :feature, js: true do
|
|
|
136
135
|
wait_for_download
|
|
137
136
|
|
|
138
137
|
expect(File.basename(downloaded_file)).to eq('alignment-2_hits.txt')
|
|
139
|
-
expect(File.read(downloaded_file)).to eq(File.read(
|
|
138
|
+
expect(File.read(downloaded_file)).to eq(File.read('spec/sequences/alignment-2_hits.txt'))
|
|
140
139
|
end
|
|
141
140
|
|
|
142
|
-
it
|
|
141
|
+
it 'can download Alignment of all hits' do
|
|
143
142
|
# Do a BLASTP search. protein_query refers to the first two sequence in
|
|
144
143
|
# protein_databases[0], so the top hits are the query sequences themselves.
|
|
145
144
|
perform_search(query: protein_query,
|
|
@@ -150,7 +149,7 @@ describe 'a browser', type: :feature, js: true do
|
|
|
150
149
|
wait_for_download
|
|
151
150
|
|
|
152
151
|
expect(File.basename(downloaded_file)).to eq('alignment-2_hits.txt')
|
|
153
|
-
expect(File.read(downloaded_file)).to eq(File.read(
|
|
152
|
+
expect(File.read(downloaded_file)).to eq(File.read('spec/sequences/alignment-2_hits.txt'))
|
|
154
153
|
end
|
|
155
154
|
|
|
156
155
|
it 'can download BLAST results in XML and tabular formats' do
|
|
@@ -232,7 +231,7 @@ describe 'a browser', type: :feature, js: true do
|
|
|
232
231
|
databases: protein_databases.values_at(0))
|
|
233
232
|
|
|
234
233
|
## Check that there is a circos vis and unfold it.
|
|
235
|
-
page.should have_content('
|
|
234
|
+
page.should have_content('Chord diagram: queries and their top hits')
|
|
236
235
|
page.execute_script("$('.circos > .grapher-header > h5').click()")
|
|
237
236
|
sleep 1
|
|
238
237
|
|
|
@@ -246,7 +245,6 @@ describe 'a browser', type: :feature, js: true do
|
|
|
246
245
|
expect(File.basename(downloaded_file)).to eq('Circos-visualisation.png')
|
|
247
246
|
clear_downloads
|
|
248
247
|
|
|
249
|
-
|
|
250
248
|
## Check that there is a graphical overview of hits.
|
|
251
249
|
page.should have_content('Graphical overview of hits')
|
|
252
250
|
|
|
@@ -260,7 +258,6 @@ describe 'a browser', type: :feature, js: true do
|
|
|
260
258
|
expect(File.basename(downloaded_file)).to eq('Alignment-Overview-Query_1.png')
|
|
261
259
|
clear_downloads
|
|
262
260
|
|
|
263
|
-
|
|
264
261
|
## Check that there is a length distribution of hits.
|
|
265
262
|
page.should have_content('Length distribution of hits')
|
|
266
263
|
page.execute_script("$('.length-distribution > .grapher-header > h5').click()")
|
|
@@ -292,7 +289,7 @@ describe 'a browser', type: :feature, js: true do
|
|
|
292
289
|
|
|
293
290
|
## Helpers ##
|
|
294
291
|
|
|
295
|
-
def perform_search(query
|
|
292
|
+
def perform_search(query:, databases:, method: nil)
|
|
296
293
|
# Load search form.
|
|
297
294
|
visit '/'
|
|
298
295
|
|