sequenceserver 1.1.0.beta2 → 1.1.0.beta3

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.

Potentially problematic release.


This version of sequenceserver might be problematic. Click here for more details.

Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +16 -5
  3. data/README.md +3 -0
  4. data/lib/sequenceserver/api_errors.rb +67 -0
  5. data/lib/sequenceserver/blast/constants.rb +1 -1
  6. data/lib/sequenceserver/blast/formatter.rb +4 -2
  7. data/lib/sequenceserver/blast/job.rb +17 -62
  8. data/lib/sequenceserver/blast/report.rb +15 -2
  9. data/lib/sequenceserver/blast.rb +1 -0
  10. data/lib/sequenceserver/exceptions.rb +2 -3
  11. data/lib/sequenceserver/job.rb +72 -44
  12. data/lib/sequenceserver/routes.rb +29 -25
  13. data/lib/sequenceserver/version.rb +1 -1
  14. data/lib/sequenceserver.rb +32 -20
  15. data/public/js/errormodal.js +55 -0
  16. data/public/js/report.js +6 -2
  17. data/public/js/sequenceserver.js +0 -12
  18. data/public/sequenceserver-report.min.js +15 -15
  19. data/public/sequenceserver-search.min.js +3 -3
  20. data/sequenceserver.gemspec +2 -1
  21. data/spec/capybara_spec.rb +120 -21
  22. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nhd +8 -0
  23. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nhi +0 -0
  24. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nhr +0 -0
  25. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nin +0 -0
  26. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nog +0 -0
  27. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nsd +16 -0
  28. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nsi +0 -0
  29. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nsq +0 -0
  30. data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.txt +8 -0
  31. data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.phd +9140 -0
  32. data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.phi +0 -0
  33. data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.phr +0 -0
  34. data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.pin +0 -0
  35. data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.pog +0 -0
  36. data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.psd +18280 -0
  37. data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.psi +0 -0
  38. data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.psq +0 -0
  39. data/spec/database/sample/proteins/uniprot/URL +1 -0
  40. data/spec/nucleotide_query.fa +21 -0
  41. data/spec/protein_query.fa +21 -0
  42. data/spec/routes_spec.rb +2 -0
  43. data/spec/sample_reports/blastn_sample/job.yaml +1 -0
  44. data/spec/sample_reports/blastn_sample/{rfile → stdout} +0 -0
  45. data/spec/sample_reports/blastp_sample/job.yaml +1 -0
  46. data/spec/sample_reports/blastp_sample/{rfile → stdout} +0 -0
  47. data/spec/sample_reports/blastx_sample/job.yaml +1 -0
  48. data/spec/sample_reports/blastx_sample/{rfile → stdout} +0 -0
  49. data/spec/sample_reports/no_hits_sample/job.yaml +1 -0
  50. data/spec/sample_reports/no_hits_sample/{rfile → stdout} +0 -0
  51. data/spec/sample_reports/tblastn_sample/job.yaml +1 -0
  52. data/spec/sample_reports/tblastn_sample/{rfile → stdout} +0 -0
  53. data/spec/sample_reports/tblastx_sample/job.yaml +1 -0
  54. data/spec/sample_reports/tblastx_sample/{rfile → stdout} +0 -0
  55. data/spec/sample_reports/with_hits_sample/job.yaml +1 -0
  56. data/spec/sample_reports/with_hits_sample/{rfile → stdout} +0 -0
  57. data/spec/sequenceserver_spec.rb +1 -1
  58. data/spec/spec_helper.rb +2 -16
  59. data/views/layout.erb +0 -45
  60. metadata +55 -16
  61. data/lib/sequenceserver/blast/exceptions.rb +0 -27
  62. data/views/400.erb +0 -29
  63. data/views/500.erb +0 -41
@@ -28,8 +28,9 @@ DESC
28
28
  s.add_development_dependency('rspec', '~> 3.7', '>= 3.7.0')
29
29
  s.add_development_dependency('capybara', '~> 2.18', '>= 2.18.0')
30
30
  s.add_development_dependency('rack-test', '~> 1.0', '>= 1.0.0')
31
+ s.add_development_dependency('sauce_whisk', '~> 0.0', '>= 0.0.19')
31
32
  s.add_development_dependency('selenium-webdriver', '~> 3.11', '>= 3.11.0')
32
- s.add_development_dependency('codeclimate-test-reporter', '~> 0.6', '>= 0.6.0')
33
+ s.add_development_dependency('codeclimate-test-reporter', '~> 1.0', '>= 1.0.8')
33
34
 
34
35
  # gem
35
36
  s.files = `git ls-files`.split("\n") - ['Gemfile', 'Gemfile.lock']
@@ -1,51 +1,150 @@
1
1
  require 'spec_helper'
2
+ require 'sauce_whisk'
3
+ require 'capybara/rspec'
4
+ require 'selenium-webdriver'
2
5
 
3
- # Cause the test to fail if Capybara is not available
4
- exit! unless $capybara_available
6
+ RSpec.configure do |config|
7
+ config.include Capybara::DSL
8
+ end
5
9
 
6
10
  describe 'a browser', :js => true do
7
- sequence = 'ATCGATCAGCTACGATCAGCATCGACTAGCATCGACTACGA'
8
- sample_nucl_db = 'Sinvicta 2-2-3 cdna subset'
9
- # sample_prot_db = 'Sinvicta2-2-3.prot'
10
-
11
- before do
11
+ before do |scenario|
12
12
  Capybara.app = SequenceServer.init
13
13
  Capybara.javascript_driver = :selenium
14
+
15
+ Capybara.register_driver :selenium do |app|
16
+ capabilities = {
17
+ name: scenario.full_description,
18
+ platform: ENV['platform'],
19
+ browserName: ENV['browserName'],
20
+ browserVersion: ENV['browserVersion'],
21
+ build: ENV['TRAVIS_BUILD_NUMBER'],
22
+ 'tunnel-identifier': ENV['TRAVIS_JOB_NUMBER']
23
+ }
24
+ url = "https://#{ENV['SAUCE_USERNAME']}:#{ENV['SAUCE_ACCESS_KEY']}" \
25
+ "@ondemand.saucelabs.com:443/wd/hub".strip
26
+
27
+ Capybara::Selenium::Driver.new(app, browser: :remote, url: url,
28
+ desired_capabilities: capabilities)
29
+ end
14
30
  end
15
31
 
16
- it 'runs a simple blastn search' do
17
- visit '/'
18
- fill_in('sequence', with: sequence, wait: 5)
19
- check(sample_nucl_db)
20
- click_button('method')
21
- # switch to new window because link opens in new window
22
- page.driver.browser.switch_to.window(page.driver.browser.window_handles.last)
23
- page.should have_content('Query', wait: 5)
32
+ before :each do |scenario|
33
+ jobname = scenario.full_description
34
+ Capybara.session_name = "#{jobname} - #{ENV['platform']} - " +
35
+ "#{ENV['browserName']} - #{ENV['browserVersion']}"
36
+
37
+ @driver = Capybara.current_session.driver
38
+
39
+ # Output sessionId and jobname to std out for Sauce OnDemand Plugin to
40
+ # display embeded results
41
+ @session_id = @driver.browser.session_id
42
+ puts "SauceOnDemandSessionID=#{@session_id} job-name=#{jobname}"
24
43
  end
25
44
 
26
45
  it 'properly controls blast button' do
27
46
  visit '/'
28
47
 
29
- fill_in('sequence', :with => sequence)
48
+ fill_in('sequence', with: nucleotide_query, wait: 5)
30
49
  page.evaluate_script("$('#method').is(':disabled')").should eq(true)
31
50
 
32
- check(sample_nucl_db)
51
+ check(nucleotide_databases.first)
33
52
  page.evaluate_script("$('#method').is(':disabled')").should eq(false)
34
53
  end
35
54
 
36
55
  it 'properly controls interaction with database listing' do
37
56
  visit '/'
38
- fill_in('sequence', :with => sequence)
39
- check(sample_nucl_db)
57
+ fill_in('sequence', with: nucleotide_query, wait: 5)
58
+ check(nucleotide_databases.first)
40
59
  page.evaluate_script("$('.protein .database').first().hasClass('disabled')")
41
60
  .should eq(true)
42
61
  end
43
62
 
44
63
  it 'shows a dropdown menu when other blast methods are available' do
45
64
  visit '/'
46
- fill_in('sequence', :with => sequence)
47
- check(sample_nucl_db)
65
+ fill_in('sequence', with: nucleotide_query, wait: 5)
66
+ check(nucleotide_databases.first)
48
67
  page.save_screenshot('screenshot.png')
49
68
  page.has_css?('button.dropdown-toggle').should eq(true)
50
69
  end
70
+
71
+ it 'can run a simple blastn search' do
72
+ perform_search query: nucleotide_query,
73
+ databases: nucleotide_databases
74
+ end
75
+
76
+ it 'can run a simple blastp search' do
77
+ perform_search query: protein_query,
78
+ databases: protein_databases
79
+ end
80
+
81
+ it 'can run a simple blastx search' do
82
+ perform_search query: nucleotide_query,
83
+ databases: protein_databases
84
+ end
85
+
86
+ it 'can run a simple tblastx search' do
87
+ perform_search query: nucleotide_query,
88
+ databases: nucleotide_databases,
89
+ method: 'tblastx'
90
+ end
91
+
92
+ it 'can run a simple tblastn search' do
93
+ perform_search query: protein_query,
94
+ databases: nucleotide_databases
95
+ end
96
+
97
+ after :each do |scenario|
98
+ @driver.quit
99
+ Capybara.use_default_driver
100
+ if scenario.exception
101
+ SauceWhisk::Jobs.fail_job @session_id
102
+ else
103
+ SauceWhisk::Jobs.pass_job @session_id
104
+ end
105
+ end
106
+
107
+ ## Helpers ##
108
+
109
+ def perform_search(query: , databases: , method: nil)
110
+ # Load search form.
111
+ visit '/'
112
+
113
+ # Fill in query, select databases, submit form.
114
+ fill_in('sequence', with: query, wait: 5)
115
+ databases.each { |db| check db }
116
+ if method == 'tblastx'
117
+ find('.dropdown-toggle').click
118
+ find('.dropdown-menu li').click
119
+ end
120
+ click_button('method')
121
+
122
+ # switch to new window because link opens in new window
123
+ page.driver.browser.switch_to.window(page.driver.browser.window_handles.last)
124
+
125
+ # Check that results loaded.
126
+ page.should have_content('Query', wait: 10)
127
+ end
128
+
129
+ def nucleotide_query
130
+ File.read File.join __dir__, 'nucleotide_query.fa'
131
+ end
132
+
133
+ def protein_query
134
+ File.read File.join __dir__, 'protein_query.fa'
135
+ end
136
+
137
+ def nucleotide_databases
138
+ [
139
+ 'Solenopsis invicta gnG subset',
140
+ 'Sinvicta 2-2-3 cdna subset'
141
+ ]
142
+ end
143
+
144
+ def protein_databases
145
+ [
146
+ 'Sinvicta 2-2-3 prot subset',
147
+ '2018-04 Swiss-Prot insecta'
148
+ ]
149
+ end
51
150
  end
@@ -0,0 +1,8 @@
1
+ 20800950682
2
+ 27659162461
3
+ 32306292125
4
+ 32590696114
5
+ 36652027840
6
+ 36720233313
7
+ 5917078937
8
+ 7230465466
@@ -0,0 +1,16 @@
1
+ nw_0117949335
2
+ nw_011794933.15
3
+ nw_0117952763
4
+ nw_011795276.13
5
+ nw_0117968480
6
+ nw_011796848.10
7
+ nw_0117969511
8
+ nw_011796951.11
9
+ nw_0117981057
10
+ nw_011798105.17
11
+ nw_0117982564
12
+ nw_011798256.14
13
+ nw_0118003602
14
+ nw_011800360.12
15
+ nw_0118046886
16
+ nw_011804688.16
@@ -0,0 +1,8 @@
1
+ NW_011796848.1 6355204
2
+ NW_011796951.1 6173698
3
+ NW_011800360.1 5918258
4
+ NW_011795276.1 5092386
5
+ NW_011798256.1 4342353
6
+ NW_011794933.1 4234449
7
+ NW_011804688.1 3708818
8
+ NW_011798105.1 3360376