sequenceserver 0.8.9 → 1.0.0.pre.1
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 +4 -4
- data/{README.txt → README.md} +2 -0
- data/bin/sequenceserver +255 -55
- data/config.ru +2 -4
- data/lib/sequenceserver.rb +293 -447
- data/lib/sequenceserver/blast.rb +464 -64
- data/lib/sequenceserver/database.rb +185 -19
- data/lib/sequenceserver/links.rb +114 -0
- data/lib/sequenceserver/logger.rb +27 -0
- data/lib/sequenceserver/sequence.rb +141 -0
- data/public/css/bootstrap.min.css +8 -413
- data/public/css/custom.css +363 -122
- data/public/css/font-awesome.min.css +4 -0
- data/public/fonts/FontAwesome.otf +0 -0
- data/public/fonts/fontawesome-webfont.eot +0 -0
- data/public/fonts/fontawesome-webfont.svg +565 -0
- data/public/fonts/fontawesome-webfont.ttf +0 -0
- data/public/fonts/fontawesome-webfont.woff +0 -0
- data/public/fonts/fontawesome-webfont.woff2 +0 -0
- data/public/js/bootstrap.min.js +11 -0
- data/public/js/d3.v3.min.js +5 -0
- data/public/js/html5shiv.min.js +4 -0
- data/public/js/jquery.scrollspy.js +74 -0
- data/public/js/jquery.t.js +353 -0
- data/public/js/sequence.js +2419 -0
- data/public/js/sequenceserver.blast.js +29 -30
- data/public/js/sequenceserver.js +544 -120
- data/public/js/underscore.min.js +6 -0
- data/public/js/webshims/polyfiller.js +1 -0
- data/public/js/webshims/shims/FlashCanvas/canvas2png.js +1 -0
- data/public/js/webshims/shims/FlashCanvas/flashcanvas.js +1 -0
- data/public/js/webshims/shims/FlashCanvas/flashcanvas.swf +0 -0
- data/public/js/webshims/shims/FlashCanvasPro/canvas2png.js +1 -0
- data/public/js/webshims/shims/FlashCanvasPro/flash10canvas.swf +0 -0
- data/public/js/webshims/shims/FlashCanvasPro/flash9canvas.swf +0 -0
- data/public/js/webshims/shims/FlashCanvasPro/flashcanvas.js +1 -0
- data/public/js/webshims/shims/canvas-blob.js +1 -0
- data/public/js/webshims/shims/color-picker.js +2 -0
- data/public/js/webshims/shims/combos/1.js +6 -0
- data/public/js/webshims/shims/combos/10.js +2 -0
- data/public/js/webshims/shims/combos/11.js +2 -0
- data/public/js/webshims/shims/combos/12.js +6 -0
- data/public/js/webshims/shims/combos/13.js +1 -0
- data/public/js/webshims/shims/combos/14.js +1 -0
- data/public/js/webshims/shims/combos/15.js +2 -0
- data/public/js/webshims/shims/combos/16.js +7 -0
- data/public/js/webshims/shims/combos/17.js +2 -0
- data/public/js/webshims/shims/combos/18.js +3 -0
- data/public/js/webshims/shims/combos/2.js +7 -0
- data/public/js/webshims/shims/combos/21.js +2 -0
- data/public/js/webshims/shims/combos/22.js +1 -0
- data/public/js/webshims/shims/combos/23.js +6 -0
- data/public/js/webshims/shims/combos/25.js +2 -0
- data/public/js/webshims/shims/combos/27.js +1 -0
- data/public/js/webshims/shims/combos/28.js +1 -0
- data/public/js/webshims/shims/combos/29.js +1 -0
- data/public/js/webshims/shims/combos/3.js +1 -0
- data/public/js/webshims/shims/combos/30.js +2 -0
- data/public/js/webshims/shims/combos/31.js +1 -0
- data/public/js/webshims/shims/combos/33.js +1 -0
- data/public/js/webshims/shims/combos/34.js +1 -0
- data/public/js/webshims/shims/combos/4.js +1 -0
- data/public/js/webshims/shims/combos/5.js +2 -0
- data/public/js/webshims/shims/combos/6.js +2 -0
- data/public/js/webshims/shims/combos/7.js +7 -0
- data/public/js/webshims/shims/combos/8.js +7 -0
- data/public/js/webshims/shims/combos/9.js +2 -0
- data/public/js/webshims/shims/combos/97.js +1 -0
- data/public/js/webshims/shims/combos/98.js +1 -0
- data/public/js/webshims/shims/combos/99.js +1 -0
- data/public/js/webshims/shims/details.js +1 -0
- data/public/js/webshims/shims/dom-extend.js +1 -0
- data/public/js/webshims/shims/es5.js +1 -0
- data/public/js/webshims/shims/es6.js +1 -0
- data/public/js/webshims/shims/excanvas.js +1 -0
- data/public/js/webshims/shims/filereader-xhr.js +1 -0
- data/public/js/webshims/shims/form-combat.js +1 -0
- data/public/js/webshims/shims/form-core.js +1 -0
- data/public/js/webshims/shims/form-datalist-lazy.js +1 -0
- data/public/js/webshims/shims/form-datalist.js +1 -0
- data/public/js/webshims/shims/form-fixrangechange.js +1 -0
- data/public/js/webshims/shims/form-inputmode.js +1 -0
- data/public/js/webshims/shims/form-message.js +1 -0
- data/public/js/webshims/shims/form-native-extend.js +1 -0
- data/public/js/webshims/shims/form-number-date-api.js +1 -0
- data/public/js/webshims/shims/form-number-date-ui.js +1 -0
- data/public/js/webshims/shims/form-shim-extend.js +1 -0
- data/public/js/webshims/shims/form-shim-extend2.js +1 -0
- data/public/js/webshims/shims/form-validation.js +1 -0
- data/public/js/webshims/shims/form-validators.js +1 -0
- data/public/js/webshims/shims/forms-picker.js +1 -0
- data/public/js/webshims/shims/geolocation.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-ar.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-ch-CN.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-cs.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-de.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-el.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-en.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-es.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-fa.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-fr.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-he.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-hi.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-hu.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-it.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-ja.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-lt.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-nl.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-pl.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-pt-BR.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-pt-PT.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-pt.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-ru.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-sv.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-zh-CN.js +1 -0
- data/public/js/webshims/shims/i18n/formcfg-zh-TW.js +1 -0
- data/public/js/webshims/shims/jme/alternate-media.js +1 -0
- data/public/js/webshims/shims/jme/base.js +1 -0
- data/public/js/webshims/shims/jme/controls.css +1 -0
- data/public/js/webshims/shims/jme/jme.eot +0 -0
- data/public/js/webshims/shims/jme/jme.svg +36 -0
- data/public/js/webshims/shims/jme/jme.ttf +0 -0
- data/public/js/webshims/shims/jme/jme.woff +0 -0
- data/public/js/webshims/shims/jme/mediacontrols-lazy.js +1 -0
- data/public/js/webshims/shims/jme/mediacontrols.js +1 -0
- data/public/js/webshims/shims/jme/playlist.js +1 -0
- data/public/js/webshims/shims/jpicker/images/AlphaBar.png +0 -0
- data/public/js/webshims/shims/jpicker/images/Bars.png +0 -0
- data/public/js/webshims/shims/jpicker/images/Maps.png +0 -0
- data/public/js/webshims/shims/jpicker/images/NoColor.png +0 -0
- data/public/js/webshims/shims/jpicker/images/bar-opacity.png +0 -0
- data/public/js/webshims/shims/jpicker/images/map-opacity.png +0 -0
- data/public/js/webshims/shims/jpicker/images/mappoint.gif +0 -0
- data/public/js/webshims/shims/jpicker/images/picker.gif +0 -0
- data/public/js/webshims/shims/jpicker/images/preview-opacity.png +0 -0
- data/public/js/webshims/shims/jpicker/images/rangearrows.gif +0 -0
- data/public/js/webshims/shims/jpicker/jpicker.css +1 -0
- data/public/js/webshims/shims/matchMedia.js +3 -0
- data/public/js/webshims/shims/mediacapture-picker.js +1 -0
- data/public/js/webshims/shims/mediacapture.js +1 -0
- data/public/js/webshims/shims/mediaelement-core.js +1 -0
- data/public/js/webshims/shims/mediaelement-debug.js +1 -0
- data/public/js/webshims/shims/mediaelement-jaris.js +1 -0
- data/public/js/webshims/shims/mediaelement-native-fix.js +1 -0
- data/public/js/webshims/shims/mediaelement-yt.js +1 -0
- data/public/js/webshims/shims/moxie/flash/Moxie.cdn.swf +0 -0
- data/public/js/webshims/shims/moxie/flash/Moxie.min.swf +0 -0
- data/public/js/webshims/shims/moxie/js/moxie-html4.js +3 -0
- data/public/js/webshims/shims/moxie/js/moxie-swf.js +2 -0
- data/public/js/webshims/shims/picture.js +1 -0
- data/public/js/webshims/shims/plugins/jquery.ui.position.js +11 -0
- data/public/js/webshims/shims/range-ui.js +1 -0
- data/public/js/webshims/shims/sizzle.js +11 -0
- data/public/js/webshims/shims/sticky.js +1 -0
- data/public/js/webshims/shims/styles/color-picker.png +0 -0
- data/public/js/webshims/shims/styles/forms-ext.css +1 -0
- data/public/js/webshims/shims/styles/forms-picker.css +1 -0
- data/public/js/webshims/shims/styles/progress.gif +0 -0
- data/public/js/webshims/shims/styles/progress.png +0 -0
- data/public/js/webshims/shims/styles/shim-ext.css +1 -0
- data/public/js/webshims/shims/styles/shim.css +1 -0
- data/public/js/webshims/shims/styles/transparent.png +0 -0
- data/public/js/webshims/shims/styles/widget.eot +0 -0
- data/public/js/webshims/shims/styles/widget.svg +12 -0
- data/public/js/webshims/shims/styles/widget.ttf +0 -0
- data/public/js/webshims/shims/styles/widget.woff +0 -0
- data/public/js/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
- data/public/js/webshims/shims/swfmini-embed.js +1 -0
- data/public/js/webshims/shims/swfmini.js +6 -0
- data/public/js/webshims/shims/track-ui.js +1 -0
- data/public/js/webshims/shims/track.js +1 -0
- data/public/js/webshims/shims/url.js +1 -0
- data/public/js/webshims/shims/usermedia-core.js +1 -0
- data/public/js/webshims/shims/usermedia-shim.js +1 -0
- data/sequenceserver.gemspec +16 -13
- data/views/400.erb +28 -0
- data/views/500.erb +35 -19
- data/views/_options.erb +6 -15
- data/views/result.erb +218 -0
- data/views/search.erb +354 -151
- metadata +254 -62
- data/example.config.yml +0 -39
- data/lib/sequenceserver/customisation.rb +0 -60
- data/lib/sequenceserver/database_formatter.rb +0 -190
- data/lib/sequenceserver/helpers.rb +0 -136
- data/lib/sequenceserver/sequencehelpers.rb +0 -93
- data/lib/sequenceserver/sinatralikeloggerformatter.rb +0 -12
- data/lib/sequenceserver/version.rb +0 -9
- data/public/css/beige.css.css +0 -254
- data/public/css/bootstrap.dropdown.css +0 -29
- data/public/css/bootstrap.icons.css +0 -155
- data/public/css/bootstrap.modal.css +0 -28
- data/public/js/bootstrap.dropdown.js +0 -92
- data/public/js/bootstrap.modal.js +0 -7
- data/public/js/bootstrap.transition.js +0 -7
- data/public/js/jquery-scrollspy.js +0 -98
- data/public/js/jquery.activity.js +0 -10
- data/public/js/jquery.enablePlaceholder.min.js +0 -10
- data/public/js/store.min.js +0 -2
- data/public/sequence.html +0 -28
- data/tests/database/nucleotide/Sinvicta2-2-3.cdna.subset.fasta +0 -5486
- data/tests/database/nucleotide/Sinvicta2-2-3.cdna.subset.fasta.nhr +0 -0
- data/tests/database/nucleotide/Sinvicta2-2-3.cdna.subset.fasta.nin +0 -0
- data/tests/database/nucleotide/Sinvicta2-2-3.cdna.subset.fasta.nsq +0 -0
- data/tests/database/protein/Sinvicta2-2-3.prot.subset.fasta +0 -6449
- data/tests/database/protein/Sinvicta2-2-3.prot.subset.fasta.phr +0 -0
- data/tests/database/protein/Sinvicta2-2-3.prot.subset.fasta.pin +0 -0
- data/tests/database/protein/Sinvicta2-2-3.prot.subset.fasta.psq +0 -0
- data/tests/run +0 -26
- data/tests/test_sequencehelpers.rb +0 -77
- data/tests/test_sequenceserver_blast.rb +0 -60
- data/tests/test_ui.rb +0 -104
- data/tests/ui.specs.todo +0 -10
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/tests/run
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
# Usage:
|
|
3
|
-
#
|
|
4
|
-
# run all test suites
|
|
5
|
-
#
|
|
6
|
-
# $ tests/run
|
|
7
|
-
#
|
|
8
|
-
# run a particular test suite
|
|
9
|
-
#
|
|
10
|
-
# $ tests/run tests/test_sequencehelpers.rb
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
-
# script dir
|
|
14
|
-
dir = File.dirname(__FILE__)
|
|
15
|
-
|
|
16
|
-
# setup load path
|
|
17
|
-
require 'rubygems'
|
|
18
|
-
$LOAD_PATH.unshift(File.join(dir, '..', 'lib'))
|
|
19
|
-
|
|
20
|
-
# user specified or glob all?
|
|
21
|
-
files = ARGV.empty? ? Dir[File.join(dir, 'test_*.rb')] : ARGV
|
|
22
|
-
|
|
23
|
-
# run!
|
|
24
|
-
files.each do |file|
|
|
25
|
-
require File.expand_path(file)
|
|
26
|
-
end
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
require 'sequenceserver'
|
|
2
|
-
require 'sequenceserver/sequencehelpers'
|
|
3
|
-
require 'test/unit'
|
|
4
|
-
|
|
5
|
-
class Tester < Test::Unit::TestCase
|
|
6
|
-
include SequenceServer::SequenceHelpers
|
|
7
|
-
def test_guess_sequence_type_nucleotide
|
|
8
|
-
#must 'correctly detect nucleotide sequence, even when it includes crap' do
|
|
9
|
-
['AAAAAAAAAAAAAAAAAAAAAT',
|
|
10
|
-
' CAGATGCRRCAAAGCAAACGGCAA 34523453 652352',
|
|
11
|
-
'ACCNNNNNNXXXXCAUUUUUU',
|
|
12
|
-
"ACGT\n\t\t\nACCACGGACCACGAAAGCG" ].each do |seq|
|
|
13
|
-
assert_equal(:nucleotide, guess_sequence_type(seq), message="for #{seq}")
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def test_guess_sequence_type_aminoacid
|
|
18
|
-
#must 'correctly detect aminoacid sequence, even when it includes a lot of crap' do
|
|
19
|
-
['ADSACGHKSJLFCVMGTL',
|
|
20
|
-
' 345 KSSYPHYSPPPPHS 345 23453 652352',
|
|
21
|
-
'GEYSNLNNNNNNXXXXSSSSSSSSSSSSSSSSSSSSSSS',
|
|
22
|
-
"EE\n\t\t\n \t\t\EEQRRQQSARTSRRQR" ].each do |seq|
|
|
23
|
-
assert_equal(:protein, guess_sequence_type(seq) , message="for #{seq}")
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def test_guess_sequence_type_impossible
|
|
28
|
-
assert_equal(nil, guess_sequence_type('ACSFGT'), message='too little sequence')
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
## Tests for type_of_sequences (multi-fasta kind of thing the user would enter)
|
|
32
|
-
def test_type_of_sequences
|
|
33
|
-
aa_multifasta = ">SDFDSF\nACGTGSDLKJGNLDKSJFLSDKJFLSDKOIU\n>asdfas\nasfasdfffffffffffffffffffff\n>alksjflkasdj slakdjf\nasdfasdfasdfljaslkdjf"
|
|
34
|
-
aa_multifasta_including_short_seq_missing_lead = "ACGTGSDLKJGNLDKSJFLSDKJFLSDKOIU\n>asdfas\nasf\n>alksjflkasdj slakdjf\nasdfasdfasdfljaslkdjf"
|
|
35
|
-
aa_singlesequence = "ACGTGSDLKJGNLDKSJFLSDKJFLSDKOIU\n"
|
|
36
|
-
nt_multifasta = ">asdf\nAAAAAAAAAAAAAAAAAAAAT\n>sfaslkj\nCAGATGCRRCAAAGCAAACGGCAA\n>asssssjlkj\nACCCANNNNNNXXXXCAUUUUUU"
|
|
37
|
-
aa_nt_mix = ">alksjflkasdj slakdjf\nasdfasdfasdfljaslkdjf\n>ffffffassdf\nACGCNAGTGCCCCCCCCGANATGGGTGGTTXXXXXGGTG"
|
|
38
|
-
|
|
39
|
-
assert_equal(:protein, type_of_sequences(aa_multifasta), 'aa_multifasta')
|
|
40
|
-
assert_equal(:protein, type_of_sequences(aa_multifasta_including_short_seq_missing_lead ), 'aa_multifasta_short_seq_and_no_>')
|
|
41
|
-
assert_equal(:protein, type_of_sequences(aa_singlesequence), 'single AA sequence')
|
|
42
|
-
assert_equal(:nucleotide, type_of_sequences(nt_multifasta), 'nt_multifasta')
|
|
43
|
-
assert_raise(ArgumentError, 'mixed aa and nt should raise') { type_of_sequences(aa_nt_mix) }
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def test_composition
|
|
47
|
-
expected_comp = {"a"=>2, "d"=>3, "f"=>7, "s"=>3, "A"=>1}
|
|
48
|
-
assert_equal(expected_comp, composition('asdfasdfffffAsdf'))
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def test_construct_standard_sequence_hyperlink
|
|
52
|
-
assert_equal "/get_sequence/?id=one&db=abc def", construct_standard_sequence_hyperlink({:sequence_id => 'one', :databases => %w(abc def)})
|
|
53
|
-
assert_equal nil, construct_standard_sequence_hyperlink({:sequence_id => ' one', :databases => %w(abc def)})
|
|
54
|
-
assert_equal "/get_sequence/?id=MAL13P1.218&db=abc def", construct_standard_sequence_hyperlink({:sequence_id => 'lcl|MAL13P1.218', :databases => %w(abc def)})
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
class AppTester < Test::Unit::TestCase
|
|
59
|
-
def test_process_advanced_blast_options
|
|
60
|
-
app = SequenceServer::App.new!
|
|
61
|
-
|
|
62
|
-
assert_nothing_raised {app.validate_advanced_parameters('')}
|
|
63
|
-
assert_nothing_raised {app.validate_advanced_parameters('-word_size 5')}
|
|
64
|
-
assert_raise(ArgumentError, 'security advanced option parser'){app.validate_advanced_parameters('-word_size 5; rm -rf /')}
|
|
65
|
-
assert_raise(ArgumentError, 'conflicting advanced option'){app.validate_advanced_parameters('-db roar')}
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
class SystemHelpersTester < Test::Unit::TestCase
|
|
70
|
-
include SequenceServer::Helpers::SystemHelpers
|
|
71
|
-
|
|
72
|
-
def test_multipart_database_name?
|
|
73
|
-
assert_equal true, multipart_database_name?('/home/ben/pd.ben/sequenceserver/db/nr.00')
|
|
74
|
-
assert_equal false, multipart_database_name?('/home/ben/pd.ben/sequenceserver/db/nr')
|
|
75
|
-
assert_equal true, multipart_database_name?('/home/ben/pd.ben/sequenceserver/db/img3.5.finished.faa.01')
|
|
76
|
-
end
|
|
77
|
-
end
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
require 'sequenceserver'
|
|
2
|
-
require 'minitest/spec'
|
|
3
|
-
require 'minitest/autorun'
|
|
4
|
-
require 'rack/test'
|
|
5
|
-
|
|
6
|
-
ENV['RACK_ENV'] = 'test'
|
|
7
|
-
|
|
8
|
-
module SequenceServer
|
|
9
|
-
describe "App" do
|
|
10
|
-
include Rack::Test::Methods
|
|
11
|
-
|
|
12
|
-
def app
|
|
13
|
-
App
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def setup
|
|
17
|
-
@params = {'method' => 'blastn', 'sequence' => 'AGCTAGCTAGCT', 'databases' => ['123']}
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
it 'returns Bad Request (400) if no blast method is provided' do
|
|
21
|
-
@params.delete('method')
|
|
22
|
-
post '/', @params
|
|
23
|
-
last_response.status.must_equal 400
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
it 'returns Bad Request (400) if no input sequence is provided' do
|
|
27
|
-
@params.delete('sequence')
|
|
28
|
-
post '/', @params
|
|
29
|
-
last_response.status.must_equal 400
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it 'returns Bad Request (400) if no database id is provided' do
|
|
33
|
-
@params.delete('databases')
|
|
34
|
-
post '/', @params
|
|
35
|
-
last_response.status.must_equal 400
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it 'returns Bad Request (400) if an empty database list is provided' do
|
|
39
|
-
@params['databases'].pop
|
|
40
|
-
|
|
41
|
-
# ensure the list of databases is empty
|
|
42
|
-
@params['databases'].length.must_equal 0
|
|
43
|
-
|
|
44
|
-
post '/', @params
|
|
45
|
-
last_response.status.must_equal 400
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
it 'returns Bad Request (400) if an incorrect blast method is supplied' do
|
|
49
|
-
@params['method'] = 'foo'
|
|
50
|
-
post '/', @params
|
|
51
|
-
last_response.status.must_equal 400
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it 'returns Bad Request (400) if incorrect advanced params are supplied' do
|
|
55
|
-
@params['advanced'] = '-word_size 5; rm -rf /'
|
|
56
|
-
post '/', @params
|
|
57
|
-
last_response.status.must_equal 400
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
data/tests/test_ui.rb
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
require 'rspec'
|
|
2
|
-
require 'watir-webdriver'
|
|
3
|
-
require 'headless'
|
|
4
|
-
|
|
5
|
-
# These shared examples should work for
|
|
6
|
-
shared_examples_for 'a browser' do
|
|
7
|
-
let(:seqserv_url){'http://localhost:4567'}
|
|
8
|
-
|
|
9
|
-
it 'should simply go the seqserv webpage' do
|
|
10
|
-
b.goto seqserv_url
|
|
11
|
-
b.url.gsub(/\/$/,'').should eq(seqserv_url)
|
|
12
|
-
b.ready_state.should eq('complete')
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it 'should do a simple blastp' do
|
|
16
|
-
b.goto seqserv_url
|
|
17
|
-
|
|
18
|
-
# Nucleotide database should be available
|
|
19
|
-
b.checkbox(:value => 'ed4250adc44601256f6bbbd4ab5cc80c').enabled?.should eq(true)
|
|
20
|
-
|
|
21
|
-
# First up the blast button should be disabled
|
|
22
|
-
b.button(:id => 'method').text.should eq('BLAST')
|
|
23
|
-
b.button(:id => 'method').enabled?.should eq(false)
|
|
24
|
-
|
|
25
|
-
# Pick a protein blast database
|
|
26
|
-
b.checkbox(:value => 'b9a05001b93ca2587b447dacb9906f2a').set
|
|
27
|
-
b.checkbox(:value => 'b9a05001b93ca2587b447dacb9906f2a').checked?.should eq(true)
|
|
28
|
-
|
|
29
|
-
# nuc dbs now disabled
|
|
30
|
-
b.checkbox(:value => 'ed4250adc44601256f6bbbd4ab5cc80c').enabled?.should eq(false)
|
|
31
|
-
|
|
32
|
-
# The blast button should still be disabled
|
|
33
|
-
b.button(:id => 'method').text.should eq('BLAST')
|
|
34
|
-
b.button(:id => 'method').enabled?.should eq(false)
|
|
35
|
-
|
|
36
|
-
# Give a sequence we know should hit
|
|
37
|
-
b.textarea(:name => 'sequence').set 'YTLPPPPTKLYSAPISCRKNKTGHWMDDILSIKTGESCPVNNYLHSGFLA'
|
|
38
|
-
|
|
39
|
-
#blast butn now active
|
|
40
|
-
b.button(:id => 'method').text.should eq('BLASTP')
|
|
41
|
-
b.button(:id => 'method').enabled?.should eq(true)
|
|
42
|
-
|
|
43
|
-
# Run the blast
|
|
44
|
-
b.button(:id => 'method').click
|
|
45
|
-
|
|
46
|
-
while b.div(:id => 'result').text.include?('Waiting for BLAST to be run')
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# blast should have worked
|
|
50
|
-
b.div(:id => 'result').text.include?('FASTA of 11 retrievable').should eq(true)
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
#####################################################################################
|
|
55
|
-
#+++++++++++ Below is admin code, hopefully not necessary to mess around with to test new UI specs
|
|
56
|
-
|
|
57
|
-
# NOT thread-safe, at least because of the interaction with headless
|
|
58
|
-
class BrowserAdmin
|
|
59
|
-
def self.setup_browser(type)
|
|
60
|
-
case type
|
|
61
|
-
when :firefox then
|
|
62
|
-
Watir::Browser.new :firefox
|
|
63
|
-
when :chrome then
|
|
64
|
-
Watir::Browser.new :chrome
|
|
65
|
-
when :headless_firefox then
|
|
66
|
-
@headless = Headless.new
|
|
67
|
-
@headless.start
|
|
68
|
-
Watir::Browser.new :firefox
|
|
69
|
-
when :headless_chrome then
|
|
70
|
-
@headless = Headless.new
|
|
71
|
-
@headless.start
|
|
72
|
-
Watir::Browser.new :chrome
|
|
73
|
-
else
|
|
74
|
-
raise "Unknown browser type asked for: #{type.inspect}"
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def self.teardown_browser(browser)
|
|
79
|
-
browser.close
|
|
80
|
-
|
|
81
|
-
# Re-head again, but maybe this makes no difference
|
|
82
|
-
@headless.destroy unless @headless.nil?
|
|
83
|
-
@headless = nil
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
describe 'ui' do
|
|
89
|
-
[:firefox, :chrome, :headless_firefox, :headless_chrome].each do |bro|
|
|
90
|
-
context bro.to_s do
|
|
91
|
-
it_behaves_like 'a browser' do
|
|
92
|
-
browser = nil
|
|
93
|
-
before do
|
|
94
|
-
browser = BrowserAdmin.setup_browser bro
|
|
95
|
-
end
|
|
96
|
-
after do
|
|
97
|
-
BrowserAdmin.teardown_browser browser
|
|
98
|
-
end
|
|
99
|
-
let(:b){browser}
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
|
data/tests/ui.specs.todo
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
it "should automatically focus sequence input box" do
|
|
2
|
-
# when the page loads, check that sequence input box is focussed
|
|
3
|
-
#
|
|
4
|
-
# NOTE: unless #75 is resolved, make sure to test this functionality only if
|
|
5
|
-
# HTML5 autofocus attribute is supported
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
it "should ensure spell checking is disabled for sequence input box" do
|
|
9
|
-
# NOTE: only if the browser supports it
|
|
10
|
-
end
|