blacklight_range_limit 6.3.0 → 6.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8a27e85542c4335df749cb76a165762c5cdc38fe
4
- data.tar.gz: 6e60a7ef7cb7d86647e8ebb3be7646ac12239016
2
+ SHA256:
3
+ metadata.gz: 454aced55fe12cf920d7f33fc5338f40707ae450e78f3863f2d99a7721c9dc40
4
+ data.tar.gz: 19b80f76873f3a1a3e59ffaa7291c1f8d2f7af680a7979a8e3f3655adf716296
5
5
  SHA512:
6
- metadata.gz: 070e7fc8c3e8da294713841515bf16390538f2b2cad2065f38bb91135aac23f02a858f13b8e4123108321508f91711ff1fa0696c62d2f1c8bdeb634b3cb66831
7
- data.tar.gz: 2814645e160bdd0f2af637c7409eaad5b495d77b90a70d3d005d067bfe67f2f3fd82f4a2f219cdd5d0812eb9d79b61478206819f8e6c3e751e873e10a79dbcb0
6
+ metadata.gz: d8e45fed92431f1f46db61c9c76986f4552a7c01aba77aa1f85890cae4a8fc0dee42812ef4c4de0a11473653fceb1dc1e8a4f07588ae67761ecae6fa52410bab
7
+ data.tar.gz: 2bf5fccb09e9f21de9c7a783e4f0e426d1eb5299010a0cea108619c30182d11d20e1df0ba58110d0f7ac036828fcdbd16e6dd243f50d8a1078a783f05317a049
@@ -1,6 +1,7 @@
1
1
  # Place any default configuration for solr_wrapper here
2
2
  port: 8983
3
3
  verbose: true
4
+ version: 7.7.2
4
5
  collection:
5
6
  dir: solr/conf/
6
7
  name: blacklight-core
@@ -4,10 +4,11 @@ notifications:
4
4
  language: ruby
5
5
  sudo: false
6
6
  rvm:
7
- - 2.3.1
7
+ - 2.5.8
8
+ - 2.6.5
8
9
 
9
10
  before_install:
10
- - gem install bundler
11
+ - google-chrome-stable --headless --disable-gpu --remote-debugging-port=9222 http://localhost &
11
12
 
12
13
  notifications:
13
14
  irc: "irc.freenode.org#blacklight"
@@ -17,4 +18,4 @@ notifications:
17
18
  global_env:
18
19
  - NOKOGIRI_USE_SYSTEM_LIBRARIES=true
19
20
 
20
- jdk: oraclejdk8
21
+ jdk: oraclejdk9
data/Gemfile CHANGED
@@ -36,3 +36,7 @@ else
36
36
  end
37
37
  end
38
38
  # END ENGINE_CART BLOCK
39
+
40
+ if File.exists?('spec/test_app_templates/Gemfile.extra')
41
+ eval File.read('spec/test_app_templates/Gemfile.extra'), nil, 'spec/test_app_templates/Gemfile.extra'
42
+ end
data/Rakefile CHANGED
@@ -6,8 +6,6 @@ require 'rspec/core/rake_task'
6
6
  require 'engine_cart/rake_task'
7
7
  require 'solr_wrapper'
8
8
 
9
- EngineCart.fingerprint_proc = EngineCart.rails_fingerprint_proc
10
-
11
9
  task :default => :ci
12
10
 
13
11
  desc "Run specs"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 6.3.0
1
+ 6.5.0
@@ -37,7 +37,7 @@ Blacklight.onLoad(function() {
37
37
  var container = $(event.target).filter(".facet-content").find(".chart_js");
38
38
 
39
39
  // only if it doesn't already have a canvas, it isn't already drawn
40
- if (container && container.find("canvas").size() == 0) {
40
+ if (container && container.find("canvas").length == 0) {
41
41
  // be willing to wait up to 1100ms for container to
42
42
  // have width -- right away on show.bs is too soon, but
43
43
  // shown.bs is later than we want, we want to start rendering
@@ -44,6 +44,15 @@ $(".range_limit .profile .range.slider_js").each(function() {
44
44
  slider_el.css("width", "100%");
45
45
  }
46
46
  }
47
+
48
+ // Slider change should update text input values.
49
+ var parent = $(this).parent();
50
+ var form = $(parent).closest(".limit_content").find("form.range_limit");
51
+ $(parent).closest(".limit_content").find(".profile .range").on("slide", function(event, ui) {
52
+ var values = $(event.target).data("slider").getValue();
53
+ form.find("input.range_begin").val(values[0]);
54
+ form.find("input.range_end").val(values[1]);
55
+ });
47
56
  }
48
57
 
49
58
  begin_el.val(min);
@@ -62,8 +62,12 @@ module RangeLimitHelper
62
62
  @response["stats"]["stats_fields"][solr_field] if @response["stats"] && @response["stats"]["stats_fields"]
63
63
  end
64
64
 
65
+ def stats_for_field?(solr_field)
66
+ stats_for_field(solr_field).present?
67
+ end
68
+
65
69
  def add_range_missing(solr_field, my_params = params)
66
- my_params = Blacklight::SearchState.new(my_params, blacklight_config).to_h
70
+ my_params = Blacklight::SearchState.new(my_params.except(:page), blacklight_config).to_h
67
71
  my_params["range"] ||= {}
68
72
  my_params["range"][solr_field] ||= {}
69
73
  my_params["range"][solr_field]["missing"] = "true"
@@ -77,7 +81,7 @@ module RangeLimitHelper
77
81
  end
78
82
 
79
83
  def add_range(solr_field, from, to, my_params = params)
80
- my_params = Blacklight::SearchState.new(my_params, blacklight_config).to_h
84
+ my_params = Blacklight::SearchState.new(my_params.except(:page), blacklight_config).to_h
81
85
  my_params["range"] ||= {}
82
86
  my_params["range"][solr_field] ||= {}
83
87
 
@@ -94,4 +98,18 @@ module RangeLimitHelper
94
98
  return my_params
95
99
  end
96
100
 
101
+ def has_selected_range_limit?(solr_field)
102
+ params["range"] &&
103
+ params["range"][solr_field] &&
104
+ (
105
+ params["range"][solr_field]["begin"].present? ||
106
+ params["range"][solr_field]["end"].present? ||
107
+ params["range"][solr_field]["missing"]
108
+ )
109
+ end
110
+
111
+ def selected_missing_for_range_limit?(solr_field)
112
+ params["range"] && params["range"][solr_field] && params["range"][solr_field]["missing"]
113
+ end
114
+
97
115
  end
@@ -7,12 +7,8 @@
7
7
  maxlength = field_config[:maxlength]
8
8
  -%>
9
9
 
10
- <div class="limit_content range_limit">
11
- <% if params["range"] &&
12
- params["range"][solr_field] &&
13
- ( (! params["range"][solr_field]["begin"].blank?) ||
14
- (! params["range"][solr_field]["end"].blank?) ||
15
- params["range"][solr_field]["missing"]) %>
10
+ <div class="limit_content range_limit">
11
+ <% if has_selected_range_limit?(solr_field) %>
16
12
  <ul class="current list-unstyled facet-values">
17
13
  <li class="selected">
18
14
  <span class="facet-label">
@@ -28,9 +24,9 @@
28
24
 
29
25
  <% end %>
30
26
 
31
- <% unless params["range"] && params["range"][solr_field] && params["range"][solr_field]["missing"] %>
27
+ <% unless selected_missing_for_range_limit?(solr_field) %>
32
28
  <%= form_tag search_action_path, :method => :get, class: [BlacklightRangeLimit.classes[:form], "range_#{solr_field}"].join(' ') do %>
33
- <%= render_hash_as_hidden_fields(search_state.params_for_search) %>
29
+ <%= render_hash_as_hidden_fields(search_state.params_for_search.except(:page)) %>
34
30
 
35
31
  <!-- we need to include a dummy search_field parameter if none exists,
36
32
  to trick blacklight into displaying actual search results instead
@@ -46,11 +42,14 @@
46
42
  <% end %>
47
43
 
48
44
  <!-- no results profile if missing is selected -->
49
- <% unless params["range"] && params["range"][solr_field] && params["range"][solr_field]["missing"] %>
45
+ <% unless selected_missing_for_range_limit?(solr_field) %>
50
46
  <!-- you can hide this if you want, but it has to be on page if you want
51
47
  JS slider and calculated facets to show up, JS sniffs it. -->
52
48
  <div class="profile">
53
-
49
+ <% if stats_for_field?(solr_field) %>
50
+ <!-- No stats information found for field in search response -->
51
+ <% end %>
52
+
54
53
  <% if (min = range_results_endpoint(solr_field, :min)) &&
55
54
  (max = range_results_endpoint(solr_field, :max)) %>
56
55
  <p class="range subsection <%= "slider_js" unless field_config[:slider_js] == false %>">
@@ -17,15 +17,18 @@ Gem::Specification.new do |s|
17
17
 
18
18
  s.license = 'Apache 2.0'
19
19
 
20
- s.add_dependency 'rails', '>= 3.0'
20
+ s.add_dependency 'rails', '>= 4.2', '< 6'
21
21
  s.add_dependency 'jquery-rails' # our JS needs jquery_rails
22
- s.add_dependency 'blacklight', '>= 6.0.2'
22
+ s.add_dependency 'blacklight', '~> 6.10'
23
23
 
24
+ s.add_development_dependency 'chromedriver-helper'
24
25
  s.add_development_dependency 'rspec', '~> 3.0'
25
26
  s.add_development_dependency 'rspec-rails'
26
27
  s.add_development_dependency 'capybara'
27
28
  s.add_development_dependency 'sqlite3'
28
29
  s.add_development_dependency 'launchy'
29
- s.add_development_dependency 'solr_wrapper', '~> 0.14'
30
- s.add_development_dependency 'engine_cart', '~> 1.0'
30
+ s.add_development_dependency 'selenium-webdriver'
31
+ s.add_development_dependency 'solr_wrapper', '~> 2.2'
32
+ s.add_development_dependency 'engine_cart', '~> 2.0'
33
+ s.add_development_dependency 'webdrivers'
31
34
  end
@@ -37,7 +37,7 @@ module BlacklightRangeLimit
37
37
  def self.range_config(blacklight_config, solr_field)
38
38
  field = blacklight_config.facet_fields[solr_field.to_s]
39
39
 
40
- return false unless field.range
40
+ return false unless field && field.range
41
41
 
42
42
  config = field.range
43
43
  config = { partial: field.partial } if config === true
@@ -9,6 +9,7 @@ module BlacklightRangeLimit
9
9
  included do
10
10
  helper BlacklightRangeLimit::ViewHelperOverride
11
11
  helper RangeLimitHelper
12
+ helper_method :has_range_limit_parameters?
12
13
  end
13
14
 
14
15
  # Action method of our own!
@@ -28,5 +29,18 @@ module BlacklightRangeLimit
28
29
 
29
30
  render('blacklight_range_limit/range_segments', :locals => {:solr_field => params[:range_field]}, :layout => !request.xhr?)
30
31
  end
32
+
33
+ # over-ride, call super, but make sure our range limits count too
34
+ def has_search_parameters?
35
+ super || has_range_limit_parameters?
36
+ end
37
+
38
+ def has_range_limit_parameters?(my_params = params)
39
+ my_params[:range] &&
40
+ my_params[:range].to_unsafe_h.any? do |key, v|
41
+ v.present? && v.respond_to?(:'[]') &&
42
+ (v["begin"].present? || v["end"].present? || v["missing"].present?)
43
+ end
44
+ end
31
45
  end
32
46
  end
@@ -1,6 +1,7 @@
1
1
  require 'blacklight'
2
2
  require 'blacklight_range_limit'
3
3
  require 'rails'
4
+ require 'jquery-rails'
4
5
 
5
6
  module BlacklightRangeLimit
6
7
  class Engine < Rails::Engine
@@ -12,46 +12,48 @@ module BlacklightRangeLimit
12
12
 
13
13
  # Method added to to fetch proper things for date ranges.
14
14
  def add_range_limit_params(solr_params)
15
- ranged_facet_configs =
16
- blacklight_config.facet_fields.select { |key, config| config.range }
15
+ ranged_facet_configs =
16
+ blacklight_config.facet_fields.select { |key, config| config.range }
17
17
  # In ruby 1.8, hash.select returns an array of pairs, in ruby 1.9
18
- # it returns a hash. Turn it into a hash either way.
18
+ # it returns a hash. Turn it into a hash either way.
19
19
  ranged_facet_configs = Hash[ ranged_facet_configs ] unless ranged_facet_configs.kind_of?(Hash)
20
-
20
+
21
21
  ranged_facet_configs.each_pair do |solr_field, config|
22
22
  solr_params["stats"] = "true"
23
23
  solr_params["stats.field"] ||= []
24
- solr_params["stats.field"] << solr_field
25
-
24
+ solr_params["stats.field"] << solr_field
25
+
26
+ range_config = BlacklightRangeLimit.range_config(blacklight_config, config.field)
27
+
26
28
  hash = blacklight_params["range"] && blacklight_params["range"][solr_field] ?
27
29
  blacklight_params["range"][solr_field] :
28
30
  {}
29
-
31
+
30
32
  if !hash["missing"].blank?
31
33
  # missing specified in request params
32
34
  solr_params[:fq] ||= []
33
35
  solr_params[:fq] << "-#{solr_field}:[* TO *]"
34
-
36
+
35
37
  elsif !(hash["begin"].blank? && hash["end"].blank?)
36
38
  # specified in request params, begin and/or end, might just have one
37
39
  start = hash["begin"].blank? ? "*" : hash["begin"]
38
40
  finish = hash["end"].blank? ? "*" : hash["end"]
39
-
41
+
40
42
  solr_params[:fq] ||= []
41
43
  solr_params[:fq] << "#{solr_field}: [#{start} TO #{finish}]"
42
-
43
- if (config.segments != false && start != "*" && finish != "*")
44
+
45
+ if (range_config[:segments] != false && start != "*" && finish != "*")
44
46
  # Add in our calculated segments, can only do with both boundaries.
45
47
  add_range_segments_to_solr!(solr_params, solr_field, start.to_i, finish.to_i)
46
48
  end
47
-
48
- elsif (config.segments != false &&
49
- boundaries = config.assumed_boundaries)
49
+
50
+ elsif (range_config[:segments] != false &&
51
+ boundaries = range_config[:assumed_boundaries])
50
52
  # assumed_boundaries in config
51
53
  add_range_segments_to_solr!(solr_params, solr_field, boundaries[0], boundaries[1])
52
54
  end
53
55
  end
54
-
56
+
55
57
  return solr_params
56
58
  end
57
59
 
@@ -59,10 +61,10 @@ module BlacklightRangeLimit
59
61
  # Another processing method, this one is NOT included in default processing chain,
60
62
  # it is specifically swapped in *instead of* add_range_limit_params for
61
63
  # certain ajax requests that only want to fetch range limit segments for
62
- # ONE field.
64
+ # ONE field.
63
65
  #
64
66
  # It turns off facetting and sets rows to 0 as well, only results for
65
- # single specified field are needed.
67
+ # single specified field are needed.
66
68
  #
67
69
  # Specified field and parameters are specified in incoming parameters
68
70
  # range_field, range_start, range_end
@@ -72,13 +74,13 @@ module BlacklightRangeLimit
72
74
  finish = blacklight_params[:range_end].to_i
73
75
 
74
76
  add_range_segments_to_solr!(solr_params, solr_field, start, finish )
75
-
77
+
76
78
  # Remove all field faceting for efficiency, we won't be using it.
77
79
  solr_params.delete("facet.field")
78
80
  solr_params.delete("facet.field".to_sym)
79
81
 
80
82
  # We don't need any actual rows either
81
- solr_params[:rows] = 0
83
+ solr_params[:rows] = 0
82
84
 
83
85
  return solr_params
84
86
  end
@@ -16,6 +16,8 @@ module BlacklightRangeLimit
16
16
 
17
17
  field_config = BlacklightRangeLimit.range_config(blacklight_config, solr_field)
18
18
 
19
+ return solr_params unless field_config
20
+
19
21
  solr_params[:"facet.query"] ||= []
20
22
 
21
23
  boundaries = boundaries_for_range_facets(min, max, (field_config[:num_segments] || 10) )
@@ -28,7 +30,7 @@ module BlacklightRangeLimit
28
30
  solr_params[:"facet.query"] << "#{solr_field}:[#{first} TO #{last}]"
29
31
  end
30
32
 
31
- return solr_params
33
+ solr_params
32
34
  end
33
35
 
34
36
  # returns an array of 'boundaries' for producing approx num_div
@@ -11,19 +11,6 @@
11
11
  super
12
12
  end
13
13
 
14
- def has_range_limit_parameters?(my_params = params)
15
- my_params[:range] &&
16
- my_params[:range].to_unsafe_h.any? do |key, v|
17
- v.present? && v.respond_to?(:'[]') &&
18
- (v["begin"].present? || v["end"].present? || v["missing"].present?)
19
- end
20
- end
21
-
22
- # over-ride, call super, but make sure our range limits count too
23
- def has_search_parameters?
24
- super || has_range_limit_parameters?
25
- end
26
-
27
14
  def query_has_constraints?(my_params = params)
28
15
  super || has_range_limit_parameters?(my_params)
29
16
  end
@@ -42,39 +29,26 @@
42
29
  end
43
30
 
44
31
  def render_constraints_filters(my_params = params)
45
- content = super(my_params)
46
32
  # add a constraint for ranges?
47
- unless my_params[:range].blank?
48
- my_params[:range].each_pair do |solr_field, hash|
49
-
50
- next unless hash["missing"] || (!hash["begin"].blank?) || (!hash["end"].blank?)
51
- content << render_constraint_element(
52
- facet_field_label(solr_field),
53
- range_display(solr_field, my_params),
54
- :escape_value => false,
55
- :remove => remove_range_param(solr_field, my_params)
56
- )
57
- end
33
+ range_params(my_params).keys.each_with_object(super) do |solr_field, content|
34
+ content << render_constraint_element(
35
+ facet_field_label(solr_field),
36
+ range_display(solr_field, my_params),
37
+ escape_value: false,
38
+ remove: remove_range_param(solr_field, my_params)
39
+ )
58
40
  end
59
- return content
60
41
  end
61
42
 
62
43
  def render_search_to_s_filters(my_params)
63
- content = super(my_params)
64
44
  # add a constraint for ranges?
65
- unless my_params[:range].blank?
66
- my_params[:range].each_pair do |solr_field, hash|
67
- next unless hash["missing"] || (!hash["begin"].blank?) || (! hash["end"].blank?)
68
-
69
- content << render_search_to_s_element(
70
- facet_field_label(solr_field),
71
- range_display(solr_field, my_params),
72
- :escape_value => false
73
- )
74
-
75
- end
45
+ range_params(my_params).keys.each_with_object(super) do |solr_field, content|
46
+ content << render_search_to_s_element(
47
+ facet_field_label(solr_field),
48
+ range_display(solr_field, my_params),
49
+ escape_value: false
50
+ )
76
51
  end
77
- return content
78
52
  end
79
53
 
80
54
  def remove_range_param(solr_field, my_params = params)
@@ -110,4 +84,17 @@
110
84
  BlacklightRangeLimit.range_config(blacklight_config, solr_field)
111
85
  end
112
86
 
87
+ private
88
+
89
+ def range_params(my_params = params)
90
+ return {} unless my_params[:range].is_a?(ActionController::Parameters) || my_params[:range].is_a?(Hash)
91
+
92
+ my_params[:range].select do |_solr_field, range_options|
93
+ next unless range_options
94
+
95
+ [range_options['missing'].presence,
96
+ range_options['begin'].presence,
97
+ range_options['end'].presence].any?
98
+ end
99
+ end
113
100
  end
@@ -9,7 +9,7 @@ module BlacklightRangeLimit
9
9
  end
10
10
 
11
11
  def install_catalog_controller_mixin
12
- inject_into_class 'app/controllers/catalog_controller.rb', CatalogController do
12
+ inject_into_file 'app/controllers/catalog_controller.rb', after: /include Blacklight::Catalog.*$/ do
13
13
  "\n include BlacklightRangeLimit::ControllerOverride\n"
14
14
  end
15
15
  end
@@ -544,12 +544,6 @@
544
544
  -->
545
545
  <uniqueKey>id</uniqueKey>
546
546
 
547
- <!-- field for the QueryParser to use when an explicit fieldname is absent -->
548
- <defaultSearchField>text</defaultSearchField>
549
-
550
- <!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
551
- <solrQueryParser defaultOperator="OR"/>
552
-
553
547
  <!-- copyField commands copy one field to another at the time a document
554
548
  is added to the index. It's used either to index the same field differently,
555
549
  or to add multiple fields to the same field for easier/faster searching. -->
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe 'JavaScript', js: true do
6
+ context 'when assumed boundaries configured' do
7
+ before do
8
+ CatalogController.blacklight_config.facet_fields['pub_date_sort'].range = {
9
+ assumed_boundaries: [1990, 2000]
10
+ }
11
+ end
12
+
13
+ after do
14
+ CatalogController.blacklight_config.facet_fields['pub_date_sort'].range = true
15
+ end
16
+
17
+ it 'should show the range limit with set boundaries' do
18
+ visit '/catalog'
19
+
20
+ click_link 'Publication Date Sort'
21
+ expect(page).to have_field :range_pub_date_sort_begin, with: '1990'
22
+ expect(page).to have_field :range_pub_date_sort_end, with: '2000'
23
+ end
24
+ end
25
+ end
@@ -24,7 +24,23 @@ describe "Blacklight Range Limit" do
24
24
  click_link 'View distribution'
25
25
  click_link '2000 to 2008'
26
26
 
27
- expect(page).to have_content "2000 to 2008 [remove] 12"
27
+ within '.blacklight-pub_date_sort' do
28
+ expect(page).to have_content "2000 to 2008 [remove] 12"
29
+ end
30
+
31
+ within '#appliedParams' do
32
+ expect(page).to have_content '2000 to 2008'
33
+ end
34
+
35
+ expect(page).to have_content '1 - 10 of 12'
36
+ end
37
+
38
+ it "should not include page parameter" do
39
+ visit search_catalog_path(page: 2)
40
+ click_link 'View distribution'
41
+ click_link '2000 to 2008'
42
+ click_button 'Limit'
43
+ expect(page.current_url).not_to include('page')
28
44
  end
29
45
 
30
46
  context 'when I18n translation is available' do
@@ -53,9 +69,9 @@ describe "Blacklight Range Limit with configured input labels" do
53
69
  maxlength: 6
54
70
  }
55
71
  config.default_solr_params[:'facet.field'] = config.facet_fields.keys
56
- end
57
- end
58
-
72
+ end
73
+ end
74
+
59
75
  it "should show the range limit facet with configured labels and maxlength" do
60
76
  visit '/catalog'
61
77
  expect(page).to have_selector 'label.sr-only[for="range_pub_date_sort_begin"]', :text => 'from publication date'
@@ -16,4 +16,22 @@ describe "Blacklight Range Limit Helper" do
16
16
  expect(html_maxlength_6).to have_css 'input.form-control.range_begin#range_pub_date_begin[maxlength="6"]'
17
17
  end
18
18
 
19
+ context "when building requests" do
20
+ let(:config) { Blacklight::Configuration.new }
21
+ before do
22
+ allow(helper).to receive(:blacklight_config).and_return(config)
23
+ end
24
+
25
+ it "should exclude page when adding a range" do
26
+ params = { q: '', page: '2' }
27
+ updated_params = helper.add_range('test', '1900', '1995', params)
28
+ expect(updated_params).not_to include(:page)
29
+ end
30
+
31
+ it "should exclude page when adding a missing range" do
32
+ params = { q: '', page: '2' }
33
+ updated_params = helper.add_range_missing('test', params)
34
+ expect(updated_params).not_to include(:page)
35
+ end
36
+ end
19
37
  end
@@ -4,6 +4,10 @@ RSpec.describe BlacklightRangeLimit::SegmentCalculation do
4
4
  let(:dummy_class) do
5
5
  Class.new do
6
6
  include BlacklightRangeLimit::SegmentCalculation
7
+
8
+ def blacklight_config
9
+ Blacklight::Configuration.new
10
+ end
7
11
  end
8
12
  end
9
13
 
@@ -45,5 +49,15 @@ RSpec.describe BlacklightRangeLimit::SegmentCalculation do
45
49
  'The min date must be before the max date'
46
50
  end
47
51
  end
52
+
53
+ context 'when a field that does not exist is passed in' do
54
+ let(:min) { 100 }
55
+ let(:max) { 800 }
56
+ let(:solr_field) { 'i_am_not_real' }
57
+
58
+ it 'returns the original solr_params (and does not raise an error)' do
59
+ expect(subject).to eq({})
60
+ end
61
+ end
48
62
  end
49
63
  end
@@ -0,0 +1,127 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe BlacklightRangeLimit::ViewHelperOverride, type: :helper do
4
+ describe '#render_constraints_filters' do
5
+ before do
6
+ allow(helper).to receive_messages(
7
+ facet_field_label: 'Date Range',
8
+ remove_range_param: '/remove'
9
+ )
10
+ end
11
+
12
+ it 'does not return any content when the range parameter invalid' do
13
+ params = ActionController::Parameters.new(range: 'garbage')
14
+
15
+ expect(helper.render_constraints_filters(params)).to eq ''
16
+ end
17
+
18
+ it 'renders a constraint for the given data in the range param' do
19
+ params = ActionController::Parameters.new(
20
+ range: { range_field: { 'begin' => 1900, 'end' => 2000 } }
21
+ )
22
+ constraints = helper.render_constraints_filters(params)
23
+
24
+ expect(constraints).to have_css(
25
+ '.constraint .filterName', text: 'Date Range'
26
+ )
27
+ expect(constraints).to have_css(
28
+ '.constraint .filterValue', text: '1900 to 2000'
29
+ )
30
+ end
31
+ end
32
+
33
+ describe 'render_search_to_s_filters' do
34
+ before do
35
+ allow(helper).to receive_messages(facet_field_label: 'Date Range')
36
+ end
37
+
38
+ it 'does not return any content when the range parameter invalid' do
39
+ params = ActionController::Parameters.new(range: 'garbage')
40
+
41
+ expect(helper.render_search_to_s_filters(params)).to eq ''
42
+ end
43
+
44
+ it 'renders a constraint for the given data in the range param' do
45
+ params = ActionController::Parameters.new(
46
+ range: { range_field: { 'begin' => 1900, 'end' => 2000 } }
47
+ )
48
+ constraints = helper.render_search_to_s_filters(params)
49
+
50
+ expect(constraints).to have_css(
51
+ '.constraint .filterName', text: 'Date Range:'
52
+ )
53
+ expect(constraints).to have_css(
54
+ '.constraint .filterValues', text: '1900 to 2000'
55
+ )
56
+ end
57
+ end
58
+
59
+ describe '#range_params' do
60
+ it 'handles no range input' do
61
+ expect(
62
+ helper.send(:range_params, ActionController::Parameters.new(q: 'blah'))
63
+ ).to eq({})
64
+ end
65
+
66
+ it 'handles non-compliant range input' do
67
+ expect(
68
+ helper.send(:range_params, ActionController::Parameters.new(range: 'blah'))
69
+ ).to eq({})
70
+
71
+ expect(
72
+ helper.send(:range_params, ActionController::Parameters.new(range: ['blah']))
73
+ ).to eq({})
74
+
75
+ expect(
76
+ helper.send(:range_params, ActionController::Parameters.new(range: { 'wrong' => 'data' }))
77
+ ).to eq({})
78
+
79
+ expect(
80
+ helper.send(
81
+ :range_params,
82
+ ActionController::Parameters.new(range: { field_name: { 'wrong' => 'data' } })
83
+ )
84
+ ).to eq({})
85
+
86
+ expect(
87
+ helper.send(
88
+ :range_params,
89
+ ActionController::Parameters.new(range: { field_name: { 'begin' => '', 'end' => '' } })
90
+ )
91
+ ).to eq({})
92
+ end
93
+
94
+ it 'returns the range parameters that are present' do
95
+ expect(
96
+ helper.send(
97
+ :range_params,
98
+ ActionController::Parameters.new(range: { field_name: { 'missing' => true } })
99
+ ).permit!.to_h
100
+ ).to eq({ 'field_name' => { 'missing' => true } })
101
+
102
+ expect(
103
+ helper.send(
104
+ :range_params,
105
+ ActionController::Parameters.new(range: { field_name: { 'begin' => '1800', 'end' => '1900' } })
106
+ ).permit!.to_h
107
+ ).to eq({ 'field_name' => { 'begin' => '1800', 'end' => '1900' } })
108
+
109
+ expect(
110
+ helper.send(
111
+ :range_params,
112
+ ActionController::Parameters.new(
113
+ range: {
114
+ field_name: { 'begin' => '1800', 'end' => '1900' },
115
+ field_name2: { 'begin' => '1800', 'end' => '1900' }
116
+ }
117
+ )
118
+ ).permit!.to_h
119
+ ).to eq(
120
+ {
121
+ 'field_name' => { 'begin' => '1800', 'end' => '1900' },
122
+ 'field_name2' => { 'begin' => '1800', 'end' => '1900' }
123
+ }
124
+ )
125
+ end
126
+ end
127
+ end
@@ -5,6 +5,21 @@ EngineCart.load_application!
5
5
 
6
6
  require 'rspec/rails'
7
7
  require 'capybara/rspec'
8
+ require 'selenium-webdriver'
9
+ require 'webdrivers'
10
+
11
+ Capybara.javascript_driver = :headless_chrome
12
+
13
+ Capybara.register_driver :headless_chrome do |app|
14
+ Capybara::Selenium::Driver.load_selenium
15
+ browser_options = ::Selenium::WebDriver::Chrome::Options.new.tap do |opts|
16
+ opts.args << '--headless'
17
+ opts.args << '--disable-gpu'
18
+ opts.args << '--no-sandbox'
19
+ opts.args << '--window-size=1280,1696'
20
+ end
21
+ Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
22
+ end
8
23
 
9
24
  RSpec.configure do |config|
10
25
  # rspec-rails 3 will no longer automatically infer an example group's spec type
@@ -0,0 +1 @@
1
+ gem 'sprockets', '< 4'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blacklight_range_limit
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.3.0
4
+ version: 6.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Rochkind
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-12-07 00:00:00.000000000 Z
12
+ date: 2020-06-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -17,14 +17,20 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '3.0'
20
+ version: '4.2'
21
+ - - "<"
22
+ - !ruby/object:Gem::Version
23
+ version: '6'
21
24
  type: :runtime
22
25
  prerelease: false
23
26
  version_requirements: !ruby/object:Gem::Requirement
24
27
  requirements:
25
28
  - - ">="
26
29
  - !ruby/object:Gem::Version
27
- version: '3.0'
30
+ version: '4.2'
31
+ - - "<"
32
+ - !ruby/object:Gem::Version
33
+ version: '6'
28
34
  - !ruby/object:Gem::Dependency
29
35
  name: jquery-rails
30
36
  requirement: !ruby/object:Gem::Requirement
@@ -43,16 +49,30 @@ dependencies:
43
49
  name: blacklight
44
50
  requirement: !ruby/object:Gem::Requirement
45
51
  requirements:
46
- - - ">="
52
+ - - "~>"
47
53
  - !ruby/object:Gem::Version
48
- version: 6.0.2
54
+ version: '6.10'
49
55
  type: :runtime
50
56
  prerelease: false
51
57
  version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '6.10'
62
+ - !ruby/object:Gem::Dependency
63
+ name: chromedriver-helper
64
+ requirement: !ruby/object:Gem::Requirement
52
65
  requirements:
53
66
  - - ">="
54
67
  - !ruby/object:Gem::Version
55
- version: 6.0.2
68
+ version: '0'
69
+ type: :development
70
+ prerelease: false
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
56
76
  - !ruby/object:Gem::Dependency
57
77
  name: rspec
58
78
  requirement: !ruby/object:Gem::Requirement
@@ -123,34 +143,62 @@ dependencies:
123
143
  - - ">="
124
144
  - !ruby/object:Gem::Version
125
145
  version: '0'
146
+ - !ruby/object:Gem::Dependency
147
+ name: selenium-webdriver
148
+ requirement: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ type: :development
154
+ prerelease: false
155
+ version_requirements: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
126
160
  - !ruby/object:Gem::Dependency
127
161
  name: solr_wrapper
128
162
  requirement: !ruby/object:Gem::Requirement
129
163
  requirements:
130
164
  - - "~>"
131
165
  - !ruby/object:Gem::Version
132
- version: '0.14'
166
+ version: '2.2'
133
167
  type: :development
134
168
  prerelease: false
135
169
  version_requirements: !ruby/object:Gem::Requirement
136
170
  requirements:
137
171
  - - "~>"
138
172
  - !ruby/object:Gem::Version
139
- version: '0.14'
173
+ version: '2.2'
140
174
  - !ruby/object:Gem::Dependency
141
175
  name: engine_cart
142
176
  requirement: !ruby/object:Gem::Requirement
143
177
  requirements:
144
178
  - - "~>"
145
179
  - !ruby/object:Gem::Version
146
- version: '1.0'
180
+ version: '2.0'
147
181
  type: :development
148
182
  prerelease: false
149
183
  version_requirements: !ruby/object:Gem::Requirement
150
184
  requirements:
151
185
  - - "~>"
152
186
  - !ruby/object:Gem::Version
153
- version: '1.0'
187
+ version: '2.0'
188
+ - !ruby/object:Gem::Dependency
189
+ name: webdrivers
190
+ requirement: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ type: :development
196
+ prerelease: false
197
+ version_requirements: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
154
202
  description:
155
203
  email:
156
204
  - blacklight-development@googlegroups.com
@@ -214,11 +262,14 @@ files:
214
262
  - solr/conf/xslt/example_rss.xsl
215
263
  - solr/conf/xslt/luke.xsl
216
264
  - solr/sample_solr_documents.yml
265
+ - spec/features/a_javascript_spec.rb
217
266
  - spec/features/blacklight_range_limit_spec.rb
218
267
  - spec/fixtures/solr_documents/zero_year.yml
219
268
  - spec/helpers/blacklight_range_limit_helper_spec.rb
220
269
  - spec/lib/blacklight_range_limit/segment_calculation_spec.rb
270
+ - spec/lib/blacklight_range_limit/view_helper_override_helper_spec.rb
221
271
  - spec/spec_helper.rb
272
+ - spec/test_app_templates/Gemfile.extra
222
273
  - spec/test_app_templates/lib/generators/test_app_generator.rb
223
274
  - vendor/assets/javascripts/bootstrap-slider.js
224
275
  - vendor/assets/javascripts/flot/excanvas.min.js
@@ -244,15 +295,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
244
295
  - !ruby/object:Gem::Version
245
296
  version: '0'
246
297
  requirements: []
247
- rubyforge_project:
248
- rubygems_version: 2.6.11
298
+ rubygems_version: 3.1.2
249
299
  signing_key:
250
300
  specification_version: 4
251
301
  summary: Blacklight Range Limit plugin
252
302
  test_files:
303
+ - spec/features/a_javascript_spec.rb
253
304
  - spec/features/blacklight_range_limit_spec.rb
254
305
  - spec/fixtures/solr_documents/zero_year.yml
255
306
  - spec/helpers/blacklight_range_limit_helper_spec.rb
256
307
  - spec/lib/blacklight_range_limit/segment_calculation_spec.rb
308
+ - spec/lib/blacklight_range_limit/view_helper_override_helper_spec.rb
257
309
  - spec/spec_helper.rb
310
+ - spec/test_app_templates/Gemfile.extra
258
311
  - spec/test_app_templates/lib/generators/test_app_generator.rb