quick_search-core 0.0.1.test

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +168 -0
  4. data/Rakefile +6 -0
  5. data/app/assets/images/quick_search/askus.gif +0 -0
  6. data/app/assets/images/quick_search/favicon.ico +0 -0
  7. data/app/assets/images/quick_search/greybox.png +0 -0
  8. data/app/assets/images/quick_search/homescreen-icon-64x64.png +0 -0
  9. data/app/assets/images/quick_search/ncsu-library-logo-white.png +0 -0
  10. data/app/assets/javascripts/quick_search/appstats.js +8 -0
  11. data/app/assets/javascripts/quick_search/event_tracking.js.erb +257 -0
  12. data/app/assets/javascripts/quick_search/google_analytics.js.erb +8 -0
  13. data/app/assets/javascripts/quick_search/opensearch.js +2 -0
  14. data/app/assets/javascripts/quick_search/pages.js.coffee +3 -0
  15. data/app/assets/javascripts/quick_search/quicksearch.js +33 -0
  16. data/app/assets/javascripts/quick_search/realtime.js.erb +12 -0
  17. data/app/assets/javascripts/quick_search/search.js +3 -0
  18. data/app/assets/javascripts/quick_search/xhr_search.js +82 -0
  19. data/app/assets/javascripts/quick_search.js.erb +20 -0
  20. data/app/assets/stylesheets/foundation_and_overrides.scss +1327 -0
  21. data/app/assets/stylesheets/quick_search/appstats.css.scss +7 -0
  22. data/app/assets/stylesheets/quick_search/opensearch.css.scss +3 -0
  23. data/app/assets/stylesheets/quick_search/pages.css.scss +3 -0
  24. data/app/assets/stylesheets/quick_search/quick_search.css.scss +248 -0
  25. data/app/assets/stylesheets/quick_search/search.css.scss +3 -0
  26. data/app/assets/stylesheets/quick_search.css.scss.erb +7 -0
  27. data/app/controllers/concerns/quick_search/auth.rb +22 -0
  28. data/app/controllers/concerns/quick_search/doi_trap.rb +43 -0
  29. data/app/controllers/concerns/quick_search/encode_utf8.rb +12 -0
  30. data/app/controllers/concerns/quick_search/on_campus.rb +43 -0
  31. data/app/controllers/concerns/quick_search/query_filter.rb +25 -0
  32. data/app/controllers/concerns/quick_search/query_parser.rb +54 -0
  33. data/app/controllers/concerns/quick_search/searcher_concern.rb +101 -0
  34. data/app/controllers/concerns/quick_search/searcher_config.rb +16 -0
  35. data/app/controllers/quick_search/application_controller.rb +7 -0
  36. data/app/controllers/quick_search/appstats_controller.rb +210 -0
  37. data/app/controllers/quick_search/opensearch_controller.rb +9 -0
  38. data/app/controllers/quick_search/pages_controller.rb +18 -0
  39. data/app/controllers/quick_search/search_controller.rb +250 -0
  40. data/app/helpers/quick_search/application_helper.rb +68 -0
  41. data/app/helpers/quick_search/appstats_helper.rb +2 -0
  42. data/app/helpers/quick_search/opensearch_helper.rb +2 -0
  43. data/app/helpers/quick_search/pages_helper.rb +2 -0
  44. data/app/helpers/quick_search/search_helper.rb +2 -0
  45. data/app/models/event.rb +2 -0
  46. data/app/models/search.rb +11 -0
  47. data/app/searchers/quick_search/best_bets_searcher.rb +102 -0
  48. data/app/searchers/quick_search/searcher.rb +43 -0
  49. data/app/views/layouts/quick_search/_best_bets.html.erb +18 -0
  50. data/app/views/layouts/quick_search/_common_searches.html.erb +15 -0
  51. data/app/views/layouts/quick_search/_found_types.html.erb +13 -0
  52. data/app/views/layouts/quick_search/_google_analytics.html.erb +24 -0
  53. data/app/views/layouts/quick_search/_more_options.html.erb +10 -0
  54. data/app/views/layouts/quick_search/_page_title.html.erb +8 -0
  55. data/app/views/layouts/quick_search/_related_topics.html.erb +8 -0
  56. data/app/views/layouts/quick_search/_search_form.html.erb +19 -0
  57. data/app/views/layouts/quick_search/_spelling_suggestion.html.erb +13 -0
  58. data/app/views/layouts/quick_search/_topic_snippet.html.erb +5 -0
  59. data/app/views/layouts/quick_search/application.html.erb +40 -0
  60. data/app/views/quick_search/appstats/_click_count_table.html.erb +23 -0
  61. data/app/views/quick_search/appstats/_datatables.html.erb +12 -0
  62. data/app/views/quick_search/appstats/_date_range.html.erb +15 -0
  63. data/app/views/quick_search/appstats/_menu.html.erb +16 -0
  64. data/app/views/quick_search/appstats/_top_spot_report_table.html.erb +33 -0
  65. data/app/views/quick_search/appstats/clicks_overview.html.erb +20 -0
  66. data/app/views/quick_search/appstats/index.html.erb +31 -0
  67. data/app/views/quick_search/appstats/module_click_detail.html.erb +32 -0
  68. data/app/views/quick_search/appstats/realtime.html.erb +15 -0
  69. data/app/views/quick_search/appstats/top_searches.html.erb +38 -0
  70. data/app/views/quick_search/appstats/top_spot.html.erb +14 -0
  71. data/app/views/quick_search/appstats/top_spot_detail.html.erb +35 -0
  72. data/app/views/quick_search/kaminari/_first_page.html.erb +12 -0
  73. data/app/views/quick_search/kaminari/_gap.html.erb +11 -0
  74. data/app/views/quick_search/kaminari/_last_page.html.erb +12 -0
  75. data/app/views/quick_search/kaminari/_next_page.html.erb +12 -0
  76. data/app/views/quick_search/kaminari/_page.html.erb +13 -0
  77. data/app/views/quick_search/kaminari/_paginator.html.erb +25 -0
  78. data/app/views/quick_search/kaminari/_prev_page.html.erb +11 -0
  79. data/app/views/quick_search/opensearch/opensearch.xml.builder +11 -0
  80. data/app/views/quick_search/pages/about.html.erb +9 -0
  81. data/app/views/quick_search/pages/home.html.erb +6 -0
  82. data/app/views/quick_search/pages/realtime.html.erb +15 -0
  83. data/app/views/quick_search/search/_citation.html.erb +18 -0
  84. data/app/views/quick_search/search/_module.html.erb +37 -0
  85. data/app/views/quick_search/search/_module_with_paging.html.erb +14 -0
  86. data/app/views/quick_search/search/_no_results.html.erb +11 -0
  87. data/app/views/quick_search/search/_result.html.erb +17 -0
  88. data/app/views/quick_search/search/_result_details.html.erb +45 -0
  89. data/app/views/quick_search/search/_result_no_thumbnail.html.erb +3 -0
  90. data/app/views/quick_search/search/_result_title.html.erb +4 -0
  91. data/app/views/quick_search/search/_result_with_thumbnail.html.erb +21 -0
  92. data/app/views/quick_search/search/_search_error.html.erb +9 -0
  93. data/app/views/quick_search/search/_see_all.html.erb +11 -0
  94. data/app/views/quick_search/search/_xhr_response.html.erb +15 -0
  95. data/app/views/quick_search/search/_xhr_response.json.erb +14 -0
  96. data/app/views/quick_search/search/_xhr_response_with_paging.html.erb +1 -0
  97. data/app/views/quick_search/search/index.html.erb +100 -0
  98. data/config/application.rb +25 -0
  99. data/config/best_bets.yml +86 -0
  100. data/config/boot.rb +4 -0
  101. data/config/database.yml.example +31 -0
  102. data/config/locales/en.yml +30 -0
  103. data/config/quicksearch_config.yml.example +69 -0
  104. data/config/routes.rb +81 -0
  105. data/db/migrate/20140130202859_create_events.rb +11 -0
  106. data/db/migrate/20140130202944_create_searches.rb +9 -0
  107. data/db/migrate/20140225145441_add_page_to_searches.rb +5 -0
  108. data/db/schema.rb +31 -0
  109. data/db/seeds.rb +7 -0
  110. data/lib/benchmark_logger.rb +2 -0
  111. data/lib/capistrano/tasks/access_check.cap +10 -0
  112. data/lib/generators/quick_search/install_generator.rb +49 -0
  113. data/lib/generators/quick_search/templates/kaminari.rb +5 -0
  114. data/lib/generators/quick_search/templates/post_install.txt +8 -0
  115. data/lib/generators/quick_search/templates/quick_search_config.yml +58 -0
  116. data/lib/quick_search/engine.rb +16 -0
  117. data/lib/quick_search/version.rb +3 -0
  118. data/lib/quick_search.rb +12 -0
  119. data/lib/tasks/best_bets.rake +29 -0
  120. data/test/controllers/appstats_controller_test.rb +7 -0
  121. data/test/controllers/concerns/doi_trap_test.rb +19 -0
  122. data/test/controllers/concerns/on_campus_test.rb +19 -0
  123. data/test/controllers/concerns/query_parser_test.rb +47 -0
  124. data/test/controllers/opensearch_controller_test.rb +13 -0
  125. data/test/controllers/pages_controller_test.rb +7 -0
  126. data/test/controllers/search_controller_test.rb +15 -0
  127. data/test/fixtures/events.yml +11 -0
  128. data/test/fixtures/searches.yml +7 -0
  129. data/test/helpers/appstats_helper_test.rb +4 -0
  130. data/test/helpers/opensearch_helper_test.rb +4 -0
  131. data/test/helpers/pages_helper_test.rb +4 -0
  132. data/test/helpers/search_helper_test.rb +4 -0
  133. data/test/integration/catalog_search_test.rb +8 -0
  134. data/test/integration/google_analytics_test.rb +23 -0
  135. data/test/integration/landing_page_test.rb +8 -0
  136. data/test/integration/searching_test.rb +40 -0
  137. data/test/integration/smart_subjects_test.rb +8 -0
  138. data/test/integration/website_search_test.rb +8 -0
  139. data/test/models/event_test.rb +7 -0
  140. data/test/models/search_test.rb +7 -0
  141. data/test/searcher/best_bets_test.rb +35 -0
  142. data/test/searcher/catalog_test.rb +35 -0
  143. data/test/searcher/ematrix_database_test.rb +27 -0
  144. data/test/searcher/ematrix_journal_test.rb +27 -0
  145. data/test/searcher/faq_test.rb +27 -0
  146. data/test/searcher/smart_subjects_test.rb +27 -0
  147. data/test/searcher/summon_test.rb +13 -0
  148. data/test/searcher/website_test.rb +34 -0
  149. data/test/support/vcr_test.rb +40 -0
  150. data/test/test_helper.rb +42 -0
  151. metadata +366 -0
data/config/routes.rb ADDED
@@ -0,0 +1,81 @@
1
+ QuickSearch::Engine.routes.draw do
2
+
3
+ root 'search#index'
4
+
5
+ get 'xhr_search' => 'search#xhr_search', :defaults => { :format => 'html' }
6
+ get 'log_event' => 'search#log_event'
7
+ get 'log_search' => 'search#log_search'
8
+
9
+ get 'searcher/:searcher_name' => 'search#single_searcher'
10
+ get 'searcher/:searcher_name/xhr_search' => 'search#xhr_search', :defaults => { :format => 'html' }
11
+ get 'searcher/:searcher_name/log_event' => 'search#log_event'
12
+ get 'searcher/:searcher_name/log_search' => 'search#log_search'
13
+
14
+
15
+ get 'opensearch' => 'opensearch#opensearch', :defaults => { :format => 'xml' }
16
+
17
+ get 'about' => 'pages#about'
18
+ get 'realtime' => 'pages#realtime'
19
+
20
+ match 'appstats', to: 'appstats#index', via: [:get, :post]
21
+ match 'appstats/clicks_overview', to: 'appstats#clicks_overview', as: 'clicks_overview', via: [:get, :post]
22
+ match 'appstats/top_searches', to: 'appstats#top_searches', as: 'top_searches', via: [:get, :post]
23
+ match 'appstats/top_spot', to: 'appstats#top_spot', as: 'top_spot', via: [:get, :post]
24
+ match 'appstats/detail/:ga_scope', to: 'appstats#detail', via: [:get, :post]
25
+ get 'appstats/realtime' => 'appstats#realtime'
26
+
27
+ # The priority is based upon order of creation: first created -> highest priority.
28
+ # See how all your routes lay out with "rake routes".
29
+
30
+ # You can have the root of your site routed with "root"
31
+ # root 'welcome#index'
32
+
33
+ # Example of regular route:
34
+ # get 'products/:id' => 'catalog#view'
35
+
36
+ # Example of named route that can be invoked with purchase_url(id: product.id)
37
+ # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase
38
+
39
+ # Example resource route (maps HTTP verbs to controller actions automatically):
40
+ # resources :products
41
+
42
+ # Example resource route with options:
43
+ # resources :products do
44
+ # member do
45
+ # get 'short'
46
+ # post 'toggle'
47
+ # end
48
+ #
49
+ # collection do
50
+ # get 'sold'
51
+ # end
52
+ # end
53
+
54
+ # Example resource route with sub-resources:
55
+ # resources :products do
56
+ # resources :comments, :sales
57
+ # resource :seller
58
+ # end
59
+
60
+ # Example resource route with more complex sub-resources:
61
+ # resources :products do
62
+ # resources :comments
63
+ # resources :sales do
64
+ # get 'recent', on: :collection
65
+ # end
66
+ # end
67
+
68
+ # Example resource route with concerns:
69
+ # concern :toggleable do
70
+ # post 'toggle'
71
+ # end
72
+ # resources :posts, concerns: :toggleable
73
+ # resources :photos, concerns: :toggleable
74
+
75
+ # Example resource route within a namespace:
76
+ # namespace :admin do
77
+ # # Directs /admin/products/* to Admin::ProductsController
78
+ # # (app/controllers/admin/products_controller.rb)
79
+ # resources :products
80
+ # end
81
+ end
@@ -0,0 +1,11 @@
1
+ class CreateEvents < ActiveRecord::Migration
2
+ def change
3
+ create_table :events do |t|
4
+ t.string :category
5
+ t.string :action
6
+ t.string :label
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ class CreateSearches < ActiveRecord::Migration
2
+ def change
3
+ create_table :searches do |t|
4
+ t.string :query
5
+
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ class AddPageToSearches < ActiveRecord::Migration
2
+ def change
3
+ add_column :searches, :page, :string
4
+ end
5
+ end
data/db/schema.rb ADDED
@@ -0,0 +1,31 @@
1
+ # encoding: UTF-8
2
+ # This file is auto-generated from the current state of the database. Instead
3
+ # of editing this file, please use the migrations feature of Active Record to
4
+ # incrementally modify your database, and then regenerate this schema definition.
5
+ #
6
+ # Note that this schema.rb definition is the authoritative source for your
7
+ # database schema. If you need to create the application database on another
8
+ # system, you should be using db:schema:load, not running all the migrations
9
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
11
+ #
12
+ # It's strongly recommended that you check this file into your version control system.
13
+
14
+ ActiveRecord::Schema.define(version: 20140225145441) do
15
+
16
+ create_table "events", force: true do |t|
17
+ t.string "category"
18
+ t.string "action"
19
+ t.string "label"
20
+ t.datetime "created_at"
21
+ t.datetime "updated_at"
22
+ end
23
+
24
+ create_table "searches", force: true do |t|
25
+ t.string "query"
26
+ t.datetime "created_at"
27
+ t.datetime "updated_at"
28
+ t.string "page"
29
+ end
30
+
31
+ end
data/db/seeds.rb ADDED
@@ -0,0 +1,7 @@
1
+ # This file should contain all the record creation needed to seed the database with its default values.
2
+ # The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
3
+ #
4
+ # Examples:
5
+ #
6
+ # cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
7
+ # Mayor.create(name: 'Emanuel', city: cities.first)
@@ -0,0 +1,2 @@
1
+ BenchmarkLogger = ActiveSupport::Logger.new(Rails.root.join('log/benchmark.log'))
2
+ BenchmarkLogger.formatter = Logger::Formatter.new
@@ -0,0 +1,10 @@
1
+ desc "Check that we can access everything"
2
+ task :check_write_permissions do
3
+ on roles(:all) do |host|
4
+ if test("[ -w #{fetch(:deploy_to)} ]")
5
+ info "#{fetch(:deploy_to)} is writable on #{host}"
6
+ else
7
+ error "#{fetch(:deploy_to)} is not writable on #{host}"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,49 @@
1
+ module QuickSearch
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+ desc 'insert routes'
7
+ def insert_routes
8
+ routes = <<-ROUTES
9
+ mount QuickSearch::Engine => "/"
10
+ ROUTES
11
+ insert_into_file "config/routes.rb", routes, :after => "Rails.application.routes.draw do\n"
12
+ end
13
+
14
+ desc 'create application configuration file'
15
+ def quick_search_config_yml
16
+ copy_file 'quick_search_config.yml', 'config/quick_search_config.yml'
17
+ end
18
+
19
+ desc 'create kaminari initializer'
20
+ def kaminari_initializer
21
+ copy_file 'kaminari.rb', 'config/initializers/kaminari.rb'
22
+ end
23
+
24
+ desc 'add styles'
25
+ def add_styles
26
+ remove_file 'app/assets/stylesheets/application.css'
27
+ create_file 'app/assets/stylesheets/application.css.scss', %Q|@import "quick_search";\n|
28
+ end
29
+
30
+ desc 'add javascript'
31
+ def add_javascript
32
+ gsub_file('app/assets/javascripts/application.js', '//= require_tree .', '//= require quick_search')
33
+ end
34
+
35
+ desc 'install migrations'
36
+ def install_migrations
37
+ rake "quick_search:install:migrations"
38
+ rake "db:migrate"
39
+ end
40
+
41
+ desc 'display messages about what needs to be configured'
42
+ def configuration_messages
43
+ file = File.read(File.join( File.expand_path('../templates', __FILE__), 'post_install.txt'))
44
+ say file, :green
45
+ end
46
+
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,5 @@
1
+ Kaminari.configure do |config|
2
+ # FIXME: This should be set per searcher in the main quicksearch config
3
+ config.default_per_page = 20
4
+ config.window = 3
5
+ end
@@ -0,0 +1,8 @@
1
+ QuickSearch installation complete. To add searchers:
2
+
3
+ 1. Add searcher gems (see README for list of gems) to your project's Gemfile
4
+ 2. Add a theme gem to Gemfile (see README)
5
+ 3. Add the searchers/theme to quick_search_config.yml
6
+ 4. Add render_module calls to search results view for each searcher
7
+
8
+ For more information, see README and other documentation at http://github.com/ncsu-libraries/quick_search/
@@ -0,0 +1,58 @@
1
+ defaults: &defaults
2
+ theme: 'quick_search_generic_theme'
3
+ searchers: [best_bets,arxiv,open_library,wikipedia,placeholder]
4
+ found_types: [arxiv,open_library,wikipedia,placeholder,placeholder,placeholder,placeholder]
5
+ per_page: 3
6
+ max_per_page: 50
7
+ http_timeout: 1.5
8
+ xhr_http_timeout: 15
9
+ # google_analytics_tracking_id: ""
10
+ user: "stats"
11
+ password: "stats"
12
+
13
+ on_campus:
14
+ - !ruby/regexp '/^192\.(1|168)\.\d*\.\d*$/'
15
+
16
+
17
+ common_searches: ["web of science", "google scholar", "refworks", "harvard business review", "pubmed", "ieee"]
18
+
19
+ common_website_searches: ["dissertations", "exhibits", "textbooks", "visit the libraries", "government information", "literature review", "printing"]
20
+
21
+ loaded_searches:
22
+ - name: "Google Scholar"
23
+ landing_page: "http://scholar.google.com/"
24
+ query: "https://scholar.google.com/scholar?hl=en&q="
25
+ - name: "WorldCat"
26
+ landing_page: "https://www.worldcat.org"
27
+ query: "https://www.worldcat.org/search?qt=worldcat_org_all&q="
28
+ - name: "Google"
29
+ landing_page: "https://www.google.com/"
30
+ query: "https://www.google.com/#q="
31
+
32
+ loaded_website_searches:
33
+ - name: "Books, Articles, Journals & More"
34
+ landing_page: "http://search.lib.ncsu.edu"
35
+ query: "http://search.lib.ncsu.edu/?q="
36
+
37
+ doi_loaded_link: "http://doi.org/"
38
+
39
+ best_bets:
40
+ solr_url: "http://localhost:8983/solr/bestbets/select?"
41
+
42
+ development:
43
+ <<: *defaults
44
+ # realtime_url: http://path_to_websockets_server
45
+
46
+ test:
47
+ <<: *defaults
48
+
49
+ staging:
50
+ <<: *defaults
51
+ # realtime_url: http://path_to_websockets_server
52
+ # google_analytics_tracking_id: ""
53
+
54
+
55
+ production:
56
+ <<: *defaults
57
+ # realtime_url: http://path_to_websockets_server
58
+ # Add or override config options here
@@ -0,0 +1,16 @@
1
+ module QuickSearch
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace QuickSearch
4
+
5
+ initializer :quick_search, :after => :add_view_paths do
6
+ config_file = File.join(Rails.root, "/config/quick_search_config.yml")
7
+ if File.exist?(config_file)
8
+ APP_CONFIG = YAML.load_file(config_file)[Rails.env]
9
+ ActiveSupport.on_load(:action_controller) do
10
+ theme_engine_class = "#{QuickSearch::Engine::APP_CONFIG['theme'].classify}::Engine".constantize
11
+ prepend_view_path theme_engine_class.root.join('app', 'views', QuickSearch::Engine::APP_CONFIG['theme'])
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ module QuickSearch
2
+ VERSION = "0.0.1.test"
3
+ end
@@ -0,0 +1,12 @@
1
+ require "quick_search/engine"
2
+
3
+ require "httpclient"
4
+ require "kaminari"
5
+ require "nokogiri"
6
+ require "mysql2"
7
+ require "rsolr"
8
+ require "exception_notification"
9
+ require "newrelic_rpm" #required?
10
+
11
+ module QuickSearch
12
+ end
@@ -0,0 +1,29 @@
1
+ namespace :best_bets do
2
+ desc 'Update the BestBets SOLR index from best_bets.yml'
3
+ task :update_index => :environment do
4
+ best_bets_yaml = File.join Rails.root, "/config/best_bets.yml"
5
+ best_bets = YAML.load_file(best_bets_yaml)['best_bets']
6
+
7
+ solr = RSolr.connect :url => QuickSearch::Engine::APP_CONFIG['best_bets']['solr_url']
8
+
9
+ solr.delete_by_query('*:*')
10
+
11
+ records = []
12
+
13
+ best_bets.each do |id, value|
14
+ record = {
15
+ :id => id,
16
+ :title => value['title'],
17
+ :url => value['url'],
18
+ :description => value['description'],
19
+ :keywords => value['keywords']
20
+ }
21
+ records << record
22
+ end
23
+
24
+ solr.add(records)
25
+ solr.commit
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class AppstatsControllerTest < ActionController::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end
@@ -0,0 +1,19 @@
1
+ require 'test_helper'
2
+
3
+ class DoiTrapTest < ActionController::TestCase
4
+
5
+ include DoiTrap
6
+
7
+ test "should be a doi" do
8
+ doi = '10.1016/0046-8177(95)90302-X'
9
+ is_a_doi = is_a_doi?(doi)
10
+ assert is_a_doi
11
+ end
12
+
13
+ test "should not be a doi" do
14
+ doi = '0046-8177(95)90302-X'
15
+ is_a_doi = is_a_doi?(doi)
16
+ assert_not is_a_doi
17
+ end
18
+
19
+ end
@@ -0,0 +1,19 @@
1
+ require 'test_helper'
2
+
3
+ class OnCampusTest < ActionController::TestCase
4
+
5
+ include OnCampus
6
+
7
+ test "should be on campus" do
8
+ ip = '152.14.1.1'
9
+ on_campus = on_campus?(ip)
10
+ assert on_campus
11
+ end
12
+
13
+ test "should not be on campus" do
14
+ ip = '152.2.1.1'
15
+ on_campus = on_campus?(ip)
16
+ assert_not on_campus
17
+ end
18
+
19
+ end
@@ -0,0 +1,47 @@
1
+ require 'test_helper'
2
+
3
+ class QueryParserTest < ActionController::TestCase
4
+
5
+ include QueryParser
6
+
7
+ test "should extract basic prefixed scoped query" do
8
+ full_query = 'scope:scrc libraries'
9
+
10
+ query = extracted_query(full_query)
11
+ assert_equal('libraries', query)
12
+
13
+ scope = extracted_scope(full_query)
14
+ assert_equal('scrc', scope)
15
+ end
16
+
17
+ test "should extract basic suffixed scoped query" do
18
+ full_query = 'libraries scope:scrc'
19
+
20
+ query = extracted_query(full_query)
21
+ assert_equal('libraries', query)
22
+
23
+ scope = extracted_scope(full_query)
24
+ assert_equal('scrc', scope)
25
+ end
26
+
27
+ test "should extract compound prefixed scoped query" do
28
+ full_query = 'scope:(scrc OR jobs) libraries'
29
+
30
+ query = extracted_query(full_query)
31
+ assert_equal('libraries', query)
32
+
33
+ scope = extracted_scope(full_query)
34
+ assert_equal('scrc OR jobs', scope)
35
+ end
36
+
37
+ test "should extract compound suffixed scoped query" do
38
+ full_query = 'libraries scope:(scrc OR jobs)'
39
+
40
+ query = extracted_query(full_query)
41
+ assert_equal('libraries', query)
42
+
43
+ scope = extracted_scope(full_query)
44
+ assert_equal('scrc OR jobs', scope)
45
+ end
46
+
47
+ end
@@ -0,0 +1,13 @@
1
+ require 'test_helper'
2
+
3
+ class OpensearchControllerTest < ActionController::TestCase
4
+
5
+ test "should return xml" do
6
+ @request.env['HTTP_ACCEPT'] = 'application/xml'
7
+ get :opensearch
8
+
9
+ assert_response :success
10
+ assert_select 'OpenSearchDescription'
11
+ end
12
+
13
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class PagesControllerTest < ActionController::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end
@@ -0,0 +1,15 @@
1
+ require 'test_helper'
2
+
3
+ class SearchControllerTest < ActionController::TestCase
4
+
5
+ vcr_test "should return a summon searcher" do
6
+ get :index, q: 'printing'
7
+ assert assigns(:summon)
8
+ end
9
+
10
+ test "should redirect to link resolver" do
11
+ get :index, q: 'doi:10.1002/0470841559.ch1'
12
+ assert_redirected_to 'http://js8lb8ft5y.search.serialssolutions.com/criteriarefiner/?SS_doi=10.1002/0470841559.ch1'
13
+ end
14
+
15
+ end
@@ -0,0 +1,11 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+
3
+ one:
4
+ category: MyString
5
+ action: MyString
6
+ label: MyString
7
+
8
+ two:
9
+ category: MyString
10
+ action: MyString
11
+ label: MyString
@@ -0,0 +1,7 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+
3
+ one:
4
+ query: MyString
5
+
6
+ two:
7
+ query: MyString
@@ -0,0 +1,4 @@
1
+ require 'test_helper'
2
+
3
+ class AppstatsHelperTest < ActionView::TestCase
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'test_helper'
2
+
3
+ class OpensearchHelperTest < ActionView::TestCase
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'test_helper'
2
+
3
+ class PagesHelperTest < ActionView::TestCase
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'test_helper'
2
+
3
+ class SearchHelperTest < ActionView::TestCase
4
+ end
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class CatalogSearchTest < ActionDispatch::IntegrationTest
4
+ vcr_test "should show catalog results", 'searches', cassette: 'printing' do
5
+ visit root_path(q: 'printing')
6
+ assert page.has_content?('book results')
7
+ end
8
+ end
@@ -0,0 +1,23 @@
1
+ require 'test_helper'
2
+
3
+ class GoogleAnalyticsTest < ActionDispatch::IntegrationTest
4
+
5
+ # FIXME maybe should use puffing-billy gem for this?
6
+ setup do
7
+ WebMock.disable!
8
+ Capybara.current_driver = Capybara.javascript_driver
9
+ visit root_path(q: 'printing')
10
+ end
11
+
12
+ test "should capture google analytics data for all links in module" do
13
+ within("#catalog") do
14
+ click_link('Books & Media')
15
+ end
16
+ assert page.has_content?('heading')
17
+
18
+ click_link('book results')
19
+ assert page.has_content?('see-all-results')
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class LandingPageTest < ActionDispatch::IntegrationTest
4
+ test "should have a search box" do
5
+ visit root_path
6
+ assert page.has_selector?('#main-search-form')
7
+ end
8
+ end
@@ -0,0 +1,40 @@
1
+ require 'test_helper'
2
+
3
+ class SearchingTest < ActionDispatch::IntegrationTest
4
+
5
+ vcr_test "search box should give search results", "searches", cassette: 'printing' do
6
+ visit root_path
7
+ within('#quicksearch') do
8
+ fill_in :q, with: 'printing'
9
+ click_on('Search')
10
+ assert page.has_content?('Articles')
11
+ end
12
+ end
13
+
14
+ vcr_test "should have article results", "searches", cassette: 'printing' do
15
+ visit root_path
16
+ within('#quicksearch') do
17
+ fill_in :q, with: 'printing'
18
+ click_on('Search')
19
+ assert page.has_content?('Beginning Os X Lion Apps ')
20
+ end
21
+ end
22
+
23
+ vcr_test "should present a spelling suggestion", "searches", cassette: 'speling' do
24
+ visit root_path
25
+ within('#quicksearch') do
26
+ fill_in :q, with: 'speling'
27
+ click_on('Search')
28
+ assert page.has_content?('Did you mean')
29
+ end
30
+ end
31
+
32
+ vcr_test "should have FAQ results", "searches", cassette: 'printing' do
33
+ visit root_path
34
+ within('#quicksearch') do
35
+ fill_in :q, with: 'printing'
36
+ click_on('Search')
37
+ assert page.has_content?('Where is the Makerspace in Hunt Library')
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class SmartSubjectsSearchTest < ActionDispatch::IntegrationTest
4
+ vcr_test "should show smart subjects results", 'searches', cassette: 'printing' do
5
+ visit root_path(q: 'printing')
6
+ assert page.has_content?('Textile Chemistry')
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class WebsiteSearchTest < ActionDispatch::IntegrationTest
4
+ vcr_test "should show website results", 'searches', cassette: 'printing' do
5
+ visit root_path(q: 'printing')
6
+ assert page.has_content?('Our Website')
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class EventTest < ActiveSupport::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class SearchTest < ActiveSupport::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end