blacklight 8.12.2 → 8.13.0

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.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/.github/matrix.json +43 -26
  3. data/.github/workflows/test.yml +1 -2
  4. data/.rubocop.yml +151 -8
  5. data/.rubocop_todo.yml +65 -53
  6. data/VERSION +1 -1
  7. data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -1
  8. data/app/assets/javascripts/blacklight/blacklight.js.map +1 -1
  9. data/app/components/blacklight/advanced_search_form_component.rb +2 -2
  10. data/app/components/blacklight/constraints_component.rb +2 -2
  11. data/app/components/blacklight/document/bookmark_component.rb +2 -2
  12. data/app/components/blacklight/document/more_like_this_component.rb +2 -2
  13. data/app/components/blacklight/icons/legacy_icon_component.rb +1 -1
  14. data/app/components/blacklight/metadata_field_plain_text_layout_component.rb +2 -2
  15. data/app/controllers/concerns/blacklight/bookmarks.rb +5 -5
  16. data/app/controllers/concerns/blacklight/search_context.rb +1 -1
  17. data/app/controllers/concerns/blacklight/search_history.rb +1 -1
  18. data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -2
  19. data/app/helpers/blacklight/icon_helper_behavior.rb +3 -3
  20. data/app/helpers/blacklight/layout_helper_behavior.rb +2 -2
  21. data/app/models/blacklight/icon.rb +3 -2
  22. data/app/models/concerns/blacklight/user.rb +1 -0
  23. data/app/presenters/blacklight/facet_field_presenter.rb +2 -2
  24. data/app/presenters/blacklight/rendering/helper_method.rb +4 -4
  25. data/app/presenters/blacklight/rendering/join.rb +2 -2
  26. data/app/presenters/blacklight/rendering/microdata.rb +1 -0
  27. data/app/values/blacklight/types.rb +2 -2
  28. data/app/views/catalog/_email_form.html.erb +2 -2
  29. data/app/views/catalog/_sms_form.html.erb +2 -2
  30. data/blacklight.gemspec +1 -1
  31. data/lib/blacklight/abstract_repository.rb +2 -2
  32. data/lib/blacklight/component.rb +2 -0
  33. data/lib/blacklight/configuration/context.rb +3 -3
  34. data/lib/blacklight/configuration/display_field.rb +1 -1
  35. data/lib/blacklight/configuration/field.rb +10 -10
  36. data/lib/blacklight/configuration/fields.rb +3 -3
  37. data/lib/blacklight/configuration/sort_field.rb +2 -2
  38. data/lib/blacklight/configuration/view_config.rb +2 -2
  39. data/lib/blacklight/configuration.rb +1 -1
  40. data/lib/blacklight/nested_open_struct_with_hash_access.rb +1 -1
  41. data/lib/blacklight/open_struct_with_hash_access.rb +5 -5
  42. data/lib/blacklight/parameters.rb +1 -1
  43. data/lib/blacklight/search_builder.rb +4 -4
  44. data/lib/blacklight/search_state/filter_field.rb +2 -2
  45. data/lib/blacklight/search_state/pivot_filter_field.rb +1 -1
  46. data/lib/blacklight/solr/request.rb +1 -1
  47. data/lib/blacklight/solr/response/facets.rb +2 -2
  48. data/lib/blacklight/solr/response/group_response.rb +2 -2
  49. data/lib/blacklight/solr/response.rb +4 -1
  50. data/lib/blacklight.rb +1 -1
  51. data/lib/generators/blacklight/assets/importmap_generator.rb +28 -3
  52. data/lib/generators/blacklight/search_builder_generator.rb +1 -1
  53. data/lib/generators/blacklight/templates/solr/conf/schema.xml +264 -178
  54. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +6 -18
  55. data/package.json +1 -1
  56. data/spec/components/blacklight/document/action_component_spec.rb +1 -1
  57. data/spec/components/blacklight/document/group_component_spec.rb +1 -1
  58. data/spec/components/blacklight/document_component_spec.rb +9 -9
  59. data/spec/components/blacklight/facet_component_spec.rb +2 -2
  60. data/spec/components/blacklight/facet_field_list_component_spec.rb +1 -1
  61. data/spec/controllers/catalog_controller_spec.rb +2 -2
  62. data/spec/features/advanced_search_spec.rb +12 -12
  63. data/spec/features/bookmarks_spec.rb +12 -12
  64. data/spec/features/did_you_mean_spec.rb +17 -17
  65. data/spec/features/facet_missing_spec.rb +3 -3
  66. data/spec/features/modal_spec.rb +1 -1
  67. data/spec/features/record_view_spec.rb +14 -14
  68. data/spec/features/search_context_spec.rb +7 -7
  69. data/spec/features/search_filters_spec.rb +12 -12
  70. data/spec/features/search_formats_spec.rb +2 -2
  71. data/spec/features/search_history_spec.rb +11 -11
  72. data/spec/features/search_pagination_spec.rb +9 -9
  73. data/spec/features/search_results_spec.rb +3 -3
  74. data/spec/features/search_sort_spec.rb +4 -4
  75. data/spec/features/search_spec.rb +15 -15
  76. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +14 -14
  77. data/spec/helpers/blacklight_helper_spec.rb +6 -0
  78. data/spec/helpers/catalog_helper_spec.rb +6 -6
  79. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +7 -0
  80. data/spec/lib/blacklight/search_state/pivot_filter_field_spec.rb +1 -1
  81. data/spec/models/record_mailer_spec.rb +5 -5
  82. data/spec/models/solr_document_spec.rb +5 -1
  83. data/spec/presenters/blacklight/index_presenter_spec.rb +1 -0
  84. data/spec/presenters/blacklight/rendering/pipeline_spec.rb +1 -0
  85. data/spec/presenters/blacklight/show_presenter_spec.rb +1 -0
  86. data/spec/presenters/blacklight/thumbnail_presenter_spec.rb +1 -0
  87. data/spec/views/catalog/_document.html.erb_spec.rb +4 -4
  88. data/spec/views/catalog/_search_header.erb_spec.rb +2 -2
  89. data/spec/views/catalog/_sort_and_per_page.html.erb_spec.rb +5 -5
  90. data/spec/views/catalog/facet.html.erb_spec.rb +1 -1
  91. data/spec/views/catalog/index.html.erb_spec.rb +2 -2
  92. data/spec/views/catalog/show.html.erb_spec.rb +3 -3
  93. metadata +7 -10
@@ -7,7 +7,7 @@ RSpec.describe "Facets" do
7
7
  click_on "Tibetan"
8
8
  end
9
9
  within "#sortAndPerPage" do
10
- expect(page).to have_content "1 - 6 of 6"
10
+ expect(page).to have_text "1 - 6 of 6"
11
11
  end
12
12
 
13
13
  expect(page).to have_css(".blacklight-language_ssim")
@@ -20,7 +20,7 @@ RSpec.describe "Facets" do
20
20
 
21
21
  click_on "India"
22
22
  within ("#sortAndPerPage") do
23
- expect(page).to have_content "1 - 2 of 2"
23
+ expect(page).to have_text "1 - 2 of 2"
24
24
  end
25
25
  within "#facet-language_ssim" do
26
26
  expect(page).to have_css("span.selected", text: "Tibetan")
@@ -37,28 +37,28 @@ RSpec.describe "Facets" do
37
37
  fill_in "q", with: 'history'
38
38
  click_on 'search'
39
39
  within ("#sortAndPerPage") do
40
- expect(page).to have_content "1 - 10 of 11"
40
+ expect(page).to have_text "1 - 10 of 11"
41
41
  end
42
42
 
43
43
  within "#facet-language_ssim" do
44
44
  click_on "Tibetan"
45
45
  end
46
46
  within ("#sortAndPerPage") do
47
- expect(page).to have_content "1 - 2 of 2"
47
+ expect(page).to have_text "1 - 2 of 2"
48
48
  end
49
49
  within "#facet-language_ssim" do
50
50
  expect(page).to have_css("span.selected", text: "Tibetan")
51
51
  expect(page).to have_css("span.facet-count.selected", text: "2")
52
52
  end
53
53
  within "#appliedParams" do
54
- expect(page).to have_content "You searched for:"
55
- expect(page).to have_content "history"
54
+ expect(page).to have_text "You searched for:"
55
+ expect(page).to have_text "history"
56
56
  end
57
57
 
58
58
  click_on "2004"
59
59
 
60
60
  within ("#sortAndPerPage") do
61
- expect(page).to have_content "1 entry found"
61
+ expect(page).to have_text "1 entry found"
62
62
  end
63
63
  within "#facet-language_ssim" do
64
64
  expect(page).to have_css("span.selected", text: "Tibetan")
@@ -83,7 +83,7 @@ RSpec.describe "Facets" do
83
83
  click_on 'remove'
84
84
  end
85
85
  expect(page).to have_no_link 'remove'
86
- expect(page).to have_content('Welcome!')
86
+ expect(page).to have_text('Welcome!')
87
87
  end
88
88
 
89
89
  it "retains filters when you change the search term" do
@@ -138,8 +138,8 @@ RSpec.describe "Facets" do
138
138
  expect(page).to have_css("span.facet-count.selected", text: "2")
139
139
  end
140
140
  within "#appliedParams" do
141
- expect(page).to have_content "You searched for:"
142
- expect(page).to have_content "history"
141
+ expect(page).to have_text "You searched for:"
142
+ expect(page).to have_text "history"
143
143
  end
144
144
  end
145
145
 
@@ -162,8 +162,8 @@ RSpec.describe "Facets" do
162
162
  expect(page).to have_css("span.facet-count.selected", text: "2")
163
163
  end
164
164
  within "#appliedParams" do
165
- expect(page).to have_content "You searched for:"
166
- expect(page).to have_content "history"
165
+ expect(page).to have_text "You searched for:"
166
+ expect(page).to have_text "history"
167
167
  end
168
168
  end
169
169
 
@@ -3,13 +3,13 @@
3
3
  RSpec.describe "Search Formats" do
4
4
  it "has an RSS XML response" do
5
5
  visit "/catalog.rss?q="
6
- expect(page).to have_content "Blacklight Search Results"
6
+ expect(page).to have_text "Blacklight Search Results"
7
7
  expect(page).to have_xpath('//item', count: 10)
8
8
  end
9
9
 
10
10
  it "has an ATOM XML response" do
11
11
  visit "/catalog.atom?q="
12
- expect(page).to have_content "Blacklight Search Results"
12
+ expect(page).to have_text "Blacklight Search Results"
13
13
 
14
14
  expect(page).to have_xpath('//entry', count: 10)
15
15
  end
@@ -5,8 +5,8 @@ RSpec.describe "Search History Page" do
5
5
  it "has a link to the history page" do
6
6
  visit root_path
7
7
  click_on 'History'
8
- expect(page).to have_content 'Search History'
9
- expect(page).to have_content 'You have no search history'
8
+ expect(page).to have_text 'Search History'
9
+ expect(page).to have_text 'You have no search history'
10
10
  end
11
11
  end
12
12
 
@@ -19,15 +19,15 @@ RSpec.describe "Search History Page" do
19
19
  end
20
20
 
21
21
  it "shows searches" do
22
- expect(page).to have_content 'Your recent searches'
23
- expect(page).to have_content 'book'
24
- expect(page).to have_no_content 'dang'
22
+ expect(page).to have_text 'Your recent searches'
23
+ expect(page).to have_text 'book'
24
+ expect(page).to have_no_text 'dang'
25
25
  visit root_path
26
26
  fill_in "q", with: 'dang'
27
27
  click_on 'search'
28
28
  click_on 'History'
29
- expect(page).to have_content 'book'
30
- expect(page).to have_content 'dang'
29
+ expect(page).to have_text 'book'
30
+ expect(page).to have_text 'dang'
31
31
  end
32
32
  end
33
33
 
@@ -43,10 +43,10 @@ RSpec.describe "Search History Page" do
43
43
 
44
44
  it "is able to clear the history" do
45
45
  click_on "Clear Search History"
46
- expect(page).to have_content 'Cleared your search history.'
47
- expect(page).to have_content 'You have no search history'
48
- expect(page).to have_no_content 'book'
49
- expect(page).to have_no_content 'dang'
46
+ expect(page).to have_text 'Cleared your search history.'
47
+ expect(page).to have_text 'You have no search history'
48
+ expect(page).to have_no_text 'book'
49
+ expect(page).to have_no_text 'dang'
50
50
  end
51
51
  end
52
52
  end
@@ -6,7 +6,7 @@ RSpec.describe "Search Pagination" do
6
6
  fill_in "q", with: ''
7
7
  click_on 'search'
8
8
  within ("#sortAndPerPage") do
9
- expect(page).to have_content "1 - 10 of "
9
+ expect(page).to have_text "1 - 10 of "
10
10
  within '#per_page-dropdown' do
11
11
  expect(page).to have_link('10')
12
12
  expect(page).to have_link('20')
@@ -18,11 +18,11 @@ RSpec.describe "Search Pagination" do
18
18
  click_on "Next »"
19
19
  end
20
20
  within "#sortAndPerPage" do
21
- expect(page).to have_content "11 - 20 of "
21
+ expect(page).to have_text "11 - 20 of "
22
22
  click_on "« Previous"
23
23
  end
24
24
  within "#sortAndPerPage" do
25
- expect(page).to have_content "1 - 10 of "
25
+ expect(page).to have_text "1 - 10 of "
26
26
  end
27
27
  end
28
28
 
@@ -31,14 +31,14 @@ RSpec.describe "Search Pagination" do
31
31
  fill_in "q", with: ''
32
32
  click_on 'search'
33
33
  within ("#sortAndPerPage") do
34
- expect(page).to have_content "1 - 10 of "
34
+ expect(page).to have_text "1 - 10 of "
35
35
  end
36
36
 
37
37
  within ("#per_page-dropdown") do
38
38
  click_on '20'
39
39
  end
40
40
  within ("#sortAndPerPage") do
41
- expect(page).to have_content "1 - 20 of "
41
+ expect(page).to have_text "1 - 20 of "
42
42
  end
43
43
  end
44
44
 
@@ -61,7 +61,7 @@ RSpec.describe "Search Pagination" do
61
61
  fill_in "q", with: ''
62
62
  click_on 'search'
63
63
  within ("#sortAndPerPage") do
64
- expect(page).to have_content "1 - 15 of "
64
+ expect(page).to have_text "1 - 15 of "
65
65
  within '#per_page-dropdown' do
66
66
  expect(page).to have_link('15')
67
67
  expect(page).to have_link('30')
@@ -71,7 +71,7 @@ RSpec.describe "Search Pagination" do
71
71
  click_on '30'
72
72
  end
73
73
  within ("#sortAndPerPage") do
74
- expect(page).to have_content "1 - 30 of "
74
+ expect(page).to have_text "1 - 30 of "
75
75
  end
76
76
  end
77
77
  end
@@ -84,13 +84,13 @@ RSpec.describe "Search Pagination" do
84
84
  click_on "Next »"
85
85
  end
86
86
  within "#sortAndPerPage" do
87
- expect(page).to have_content "11 - 20 of "
87
+ expect(page).to have_text "11 - 20 of "
88
88
  end
89
89
  within ("#per_page-dropdown") do
90
90
  click_on '20'
91
91
  end
92
92
  within "#sortAndPerPage" do
93
- expect(page).to have_content "1 - 20 of "
93
+ expect(page).to have_text "1 - 20 of "
94
94
  end
95
95
  end
96
96
  end
@@ -44,7 +44,7 @@ RSpec.describe "Search Results" do
44
44
 
45
45
  it "provides search hints if there are no results" do
46
46
  search_for 'asdfghj'
47
- expect(page).to have_content "No results found for your search"
47
+ expect(page).to have_text "No results found for your search"
48
48
  end
49
49
 
50
50
  it "provides search hints if there are no results" do
@@ -52,8 +52,8 @@ RSpec.describe "Search Results" do
52
52
  fill_in "q", with: "inmul"
53
53
  select "Author", from: "search_field"
54
54
  click_on 'search'
55
- expect(page).to have_content "No results found for your search"
56
- expect(page).to have_content "you searched by Author"
55
+ expect(page).to have_text "No results found for your search"
56
+ expect(page).to have_text "you searched by Author"
57
57
  click_on "try searching everything"
58
58
  expect(page).to have_xpath("//a[contains(@href, 77826928)]")
59
59
  end
@@ -6,17 +6,17 @@ RSpec.describe "Search Sort" do
6
6
  within "#facet-language_ssim" do
7
7
  click_on 'English'
8
8
  end
9
- expect(page).to have_content 'Sort by relevance'
9
+ expect(page).to have_text 'Sort by relevance'
10
10
  click_on 'title'
11
- expect(page).to have_content 'Sort by title'
11
+ expect(page).to have_text 'Sort by title'
12
12
  end
13
13
 
14
14
  it "sorts on search" do
15
15
  visit root_path
16
16
  fill_in "q", with: 'bod'
17
17
  click_on 'search'
18
- expect(page).to have_content 'Sort by relevance'
18
+ expect(page).to have_text 'Sort by relevance'
19
19
  click_on 'title'
20
- expect(page).to have_content 'Sort by title'
20
+ expect(page).to have_text 'Sort by title'
21
21
  end
22
22
  end
@@ -18,7 +18,7 @@ RSpec.describe "Search Page" do
18
18
  expect(page).to have_css("button[type='submit'] .submit-search-text")
19
19
  expect(page).to have_no_link "Start Over"
20
20
 
21
- expect(page).to have_content "Welcome!"
21
+ expect(page).to have_text "Welcome!"
22
22
  tmp_value = Capybara.ignore_hidden_elements
23
23
  Capybara.ignore_hidden_elements = false
24
24
  expect(page).to have_css("link[rel=stylesheet]")
@@ -44,8 +44,8 @@ RSpec.describe "Search Page" do
44
44
  Capybara.ignore_hidden_elements = tmp_value
45
45
 
46
46
  within "#appliedParams" do
47
- expect(page).to have_content "You searched for:"
48
- expect(page).to have_content "history"
47
+ expect(page).to have_text "You searched for:"
48
+ expect(page).to have_text "history"
49
49
  end
50
50
 
51
51
  within ("select#search_field") do
@@ -53,8 +53,8 @@ RSpec.describe "Search Page" do
53
53
  end
54
54
 
55
55
  within ("#sortAndPerPage") do
56
- expect(page).to have_content "Sort by"
57
- expect(page).to have_content "1 - 10 of 11"
56
+ expect(page).to have_text "Sort by"
57
+ expect(page).to have_text "1 - 10 of 11"
58
58
  within '#sort-dropdown' do
59
59
  expect(page).to have_link('relevance')
60
60
  expect(page).to have_link('year')
@@ -74,18 +74,18 @@ RSpec.describe "Search Page" do
74
74
  click_on 'search'
75
75
 
76
76
  within "#appliedParams" do
77
- expect(page).to have_content "You searched for:"
78
- expect(page).to have_content "Title"
79
- expect(page).to have_content "inmul"
77
+ expect(page).to have_text "You searched for:"
78
+ expect(page).to have_text "Title"
79
+ expect(page).to have_text "inmul"
80
80
  end
81
81
  within ("select#search_field") do
82
82
  expect(page).to have_css("option[selected]", text: "Title")
83
83
  end
84
84
  within(".index_title") do
85
- expect(page).to have_content "1."
85
+ expect(page).to have_text "1."
86
86
  end
87
87
  within ("#sortAndPerPage") do
88
- expect(page).to have_content "1 entry found"
88
+ expect(page).to have_text "1 entry found"
89
89
  end
90
90
  end
91
91
 
@@ -94,8 +94,8 @@ RSpec.describe "Search Page" do
94
94
  fill_in "q", with: 'history'
95
95
  click_on 'search'
96
96
  within "#documents" do
97
- expect(page).to have_content "次按驟變"
98
- expect(page).to have_content "DK861.K3 V5"
97
+ expect(page).to have_text "次按驟變"
98
+ expect(page).to have_text "DK861.K3 V5"
99
99
  end
100
100
  end
101
101
 
@@ -104,15 +104,15 @@ RSpec.describe "Search Page" do
104
104
  fill_in "q", with: 'history'
105
105
  click_on 'search'
106
106
  within "#appliedParams" do
107
- expect(page).to have_content "You searched for:"
108
- expect(page).to have_content "history"
107
+ expect(page).to have_text "You searched for:"
108
+ expect(page).to have_text "history"
109
109
  end
110
110
 
111
111
  expect(page).to have_css "#q[value='history']"
112
112
 
113
113
  click_on "Start Over"
114
114
 
115
- expect(page).to have_content "Welcome!"
115
+ expect(page).to have_text "Welcome!"
116
116
  expect(page).to have_no_css "#q[value='history']"
117
117
  end
118
118
  end
@@ -35,17 +35,17 @@ RSpec.describe Blacklight::UrlHelperBehavior do
35
35
  it "builds a link tag to catalog using session[:search] for query params" do
36
36
  allow(helper).to receive(:current_search_session).and_return double(query_params: query_params)
37
37
  tag = helper.link_back_to_catalog
38
- expect(tag).to match /q=query/
39
- expect(tag).to match /f=facets/
40
- expect(tag).not_to match /page=/
41
- expect(tag).not_to match /per_page=/
38
+ expect(tag).to include('q=query')
39
+ expect(tag).to include('f=facets')
40
+ expect(tag).not_to include('page=')
41
+ expect(tag).not_to include('per_page=')
42
42
  end
43
43
 
44
44
  it "builds a link tag to bookmarks using session[:search] for query params" do
45
45
  allow(helper).to receive(:current_search_session).and_return double(query_params: bookmarks_query_params)
46
46
  tag = helper.link_back_to_catalog
47
- expect(tag).to match /Back to Bookmarks/
48
- expect(tag).to match %r{/bookmarks}
47
+ expect(tag).to include('Back to Bookmarks')
48
+ expect(tag).to include('/bookmarks')
49
49
  end
50
50
 
51
51
  context "with a search context" do
@@ -53,16 +53,16 @@ RSpec.describe Blacklight::UrlHelperBehavior do
53
53
  allow(helper).to receive_messages(current_search_session: double(query_params: query_params))
54
54
  allow(helper).to receive_messages(search_session: { 'per_page' => 15, 'counter' => 31 })
55
55
  tag = helper.link_back_to_catalog
56
- expect(tag).to match /page=3/
57
- expect(tag).to match /per_page=15/
56
+ expect(tag).to include('page=3')
57
+ expect(tag).to include('per_page=15')
58
58
  end
59
59
 
60
60
  it "omits per_page if the value is the same as the default" do
61
61
  allow(helper).to receive_messages(current_search_session: double(query_params: query_params))
62
62
  allow(helper).to receive_messages(search_session: { 'per_page' => 10, 'counter' => 31 })
63
63
  tag = helper.link_back_to_catalog
64
- expect(tag).to match /page=4/
65
- expect(tag).not_to match /per_page=/
64
+ expect(tag).to include('page=4')
65
+ expect(tag).not_to include('per_page=')
66
66
  end
67
67
  end
68
68
 
@@ -92,8 +92,8 @@ RSpec.describe Blacklight::UrlHelperBehavior do
92
92
  expect(my_engine).to receive(:url_for)
93
93
  .with({ q: "query", f: "facets", controller: "catalog" })
94
94
  .and_return('link-url')
95
- expect(tag).to match /Back to Search/
96
- expect(tag).to match /link-url/
95
+ expect(tag).to include('Back to Search')
96
+ expect(tag).to include('link-url')
97
97
  end
98
98
  end
99
99
  end
@@ -130,11 +130,11 @@ RSpec.describe Blacklight::UrlHelperBehavior do
130
130
  end
131
131
 
132
132
  it "passes on the title attribute to the link_to_with_data method" do
133
- expect(helper.link_to_document(document, "Some crazy long label...", title: "Some crazy longer label")).to match(/title="Some crazy longer label"/)
133
+ expect(helper.link_to_document(document, "Some crazy long label...", title: "Some crazy longer label")).to include('title="Some crazy longer label"')
134
134
  end
135
135
 
136
136
  it "doesn't add an erroneous title attribute if one isn't provided" do
137
- expect(helper.link_to_document(document, "Some crazy long label...")).not_to match(/title=/)
137
+ expect(helper.link_to_document(document, "Some crazy long label...")).not_to include('title=')
138
138
  end
139
139
 
140
140
  context "with an integer id" do
@@ -172,6 +172,12 @@ RSpec.describe BlacklightHelper do
172
172
  end
173
173
 
174
174
  it "ignores missing templates" do
175
+ # In ViewComponent 3.25.0+, collection components rendered from a plain
176
+ # ActionView template fall back to controller.view_context for helpers
177
+ # instead of the stubbed helper. Workaround not needed on 2.x or 4.x.
178
+ if ViewComponent::VERSION::MAJOR == 3
179
+ allow(controller).to receive(:view_context).and_return(helper)
180
+ end
175
181
  blacklight_config.view.view_type(partials: %w[index_header a b])
176
182
 
177
183
  response = helper.render_document_index_with_view :view_type, [obj1, obj1]
@@ -135,9 +135,9 @@ RSpec.describe CatalogHelper do
135
135
 
136
136
  it "calls url_for on the engine scope" do
137
137
  expect(my_engine).to receive(:url_for).and_return('/rss-path')
138
- expect(tag).to match /title="RSS for results"/
139
- expect(tag).to match /rel="alternate"/
140
- expect(tag).to match %r{type="application/rss\+xml"}
138
+ expect(tag).to include('title="RSS for results"')
139
+ expect(tag).to include('rel="alternate"')
140
+ expect(tag).to include('type="application/rss+xml"')
141
141
  end
142
142
  end
143
143
  end
@@ -157,9 +157,9 @@ RSpec.describe CatalogHelper do
157
157
 
158
158
  it "calls url_for on the engine scope" do
159
159
  expect(my_engine).to receive(:url_for).and_return('/atom-path')
160
- expect(tag).to match /title="Atom for results"/
161
- expect(tag).to match /rel="alternate"/
162
- expect(tag).to match %r{type="application/atom\+xml"}
160
+ expect(tag).to include('title="Atom for results"')
161
+ expect(tag).to include('rel="alternate"')
162
+ expect(tag).to include('type="application/atom+xml"')
163
163
  end
164
164
  end
165
165
  end
@@ -164,5 +164,12 @@ RSpec.describe Blacklight::OpenStructWithHashAccess do
164
164
  it "works (and doesn't throw a stack error...)" do
165
165
  expect(subject.try(:a)).to eq 1
166
166
  end
167
+
168
+ it "passes a block to the method indicated" do
169
+ acc = []
170
+ test_block = proc { |n, v| acc << [n, v] }
171
+ expect(subject.try(:each_pair, &test_block)).to be subject
172
+ expect(acc).to eq [[:a, 1]]
173
+ end
167
174
  end
168
175
  end
@@ -73,7 +73,7 @@ RSpec.describe Blacklight::SearchState::PivotFilterField do
73
73
  new_state = filter.remove(value_class.new(fq: { some_other_field: '3' }, value: '1'))
74
74
 
75
75
  expect(new_state.params[:f]).not_to include :some_other_field
76
- expect(new_state.filter('pivot_field').values&.map(&:fq)).to eql([some_other_field: nil])
76
+ expect(new_state.filter('pivot_field').values&.map(&:fq)).to eql([{ some_other_field: nil }])
77
77
  end
78
78
 
79
79
  it 'removes the filter parameter entirely if there are no filters left' do
@@ -41,7 +41,7 @@ RSpec.describe RecordMailer do
41
41
  end
42
42
 
43
43
  it "puts the title of the item in the subject" do
44
- expect(email.subject).to match /The horn/
44
+ expect(email.subject).to include('The horn')
45
45
  end
46
46
 
47
47
  it "has the correct from address (w/o the port number)" do
@@ -49,8 +49,8 @@ RSpec.describe RecordMailer do
49
49
  end
50
50
 
51
51
  it "prints out the correct body" do
52
- expect(email.body).to match /Title: The horn/
53
- expect(email.body).to match /Author: Janetzky, Kurt/
52
+ expect(email.body).to include('Title: The horn')
53
+ expect(email.body).to include('Author: Janetzky, Kurt')
54
54
  expect(email.body).to match /projectblacklight.org/
55
55
  end
56
56
 
@@ -104,8 +104,8 @@ RSpec.describe RecordMailer do
104
104
  end
105
105
 
106
106
  it "prints out the correct body" do
107
- expect(@sms.body).to match /Title: The horn/
108
- expect(@sms.body).to match /Author: Janetzky, Kurt/
107
+ expect(@sms.body).to include('Title: The horn')
108
+ expect(@sms.body).to include('Author: Janetzky, Kurt')
109
109
  expect(@sms.body).to match /projectblacklight.org:3000/
110
110
  end
111
111
 
@@ -37,7 +37,11 @@ RSpec.describe SolrDocument, :api do
37
37
  title_tesim: ['Good Omens'])
38
38
  end
39
39
 
40
- it { is_expected.to end_with "_source: {\"id\"=>\"123\", \"title_tesim\"=>[\"Good Omens\"]}>" }
40
+ if RUBY_VERSION > '3.4'
41
+ it { is_expected.to end_with "_source: {\"id\" => \"123\", \"title_tesim\" => [\"Good Omens\"]}>" }
42
+ else
43
+ it { is_expected.to end_with "_source: {\"id\"=>\"123\", \"title_tesim\"=>[\"Good Omens\"]}>" }
44
+ end
41
45
  end
42
46
 
43
47
  describe '.attribute' do
@@ -2,6 +2,7 @@
2
2
 
3
3
  RSpec.describe Blacklight::IndexPresenter, :api do
4
4
  include Capybara::RSpecMatchers
5
+
5
6
  subject { presenter }
6
7
 
7
8
  let(:request_context) { double(document_index_view_type: 'list') }
@@ -2,6 +2,7 @@
2
2
 
3
3
  RSpec.describe Blacklight::Rendering::Pipeline do
4
4
  include Capybara::RSpecMatchers
5
+
5
6
  let(:document) { instance_double(SolrDocument) }
6
7
  let(:context) { double }
7
8
  let(:options) { {} }
@@ -2,6 +2,7 @@
2
2
 
3
3
  RSpec.describe Blacklight::ShowPresenter, :api do
4
4
  include Capybara::RSpecMatchers
5
+
5
6
  subject { presenter }
6
7
 
7
8
  let(:request_context) { double }
@@ -2,6 +2,7 @@
2
2
 
3
3
  RSpec.describe Blacklight::ThumbnailPresenter do
4
4
  include Capybara::RSpecMatchers
5
+
5
6
  let(:view_context) { double "View context" }
6
7
  let(:config) { Blacklight::Configuration.new.view_config(:index) }
7
8
  let(:presenter) { described_class.new(document, view_context, config) }
@@ -17,9 +17,9 @@ RSpec.describe "catalog/_document" do
17
17
  stub_template "catalog/_b_default.html.erb" => "b_partial"
18
18
  stub_template "catalog/_c_default.html.erb" => "c_partial"
19
19
  render partial: "catalog/document", locals: { document: document, document_counter: 1, view_config: blacklight_config.index }
20
- expect(rendered).to match /a_partial/
21
- expect(rendered).to match /b_partial/
22
- expect(rendered).to match /c_partial/
20
+ expect(rendered).to include('a_partial')
21
+ expect(rendered).to include('b_partial')
22
+ expect(rendered).to include('c_partial')
23
23
  end
24
24
 
25
25
  context 'with a configured document component' do
@@ -39,7 +39,7 @@ RSpec.describe "catalog/_document" do
39
39
 
40
40
  it 'renders the document component' do
41
41
  render partial: "catalog/document", locals: { document: document, document_counter: 1, view_config: blacklight_config.index }
42
- expect(rendered).to match /blah/
42
+ expect(rendered).to include('blah')
43
43
  end
44
44
  end
45
45
  end
@@ -8,7 +8,7 @@ RSpec.describe "/catalog/_search_header.html.erb" do
8
8
  stub_template "_sort_and_per_page.html.erb" => "sort_and_per_page"
9
9
  allow(view).to receive(:blacklight_config).and_return(CatalogController.blacklight_config)
10
10
  render
11
- expect(rendered).to match /did_you_mean/
12
- expect(rendered).to match /sort_and_per_page/
11
+ expect(rendered).to include('did_you_mean')
12
+ expect(rendered).to include('sort_and_per_page')
13
13
  end
14
14
  end
@@ -17,10 +17,10 @@ RSpec.describe "catalog/_sort_and_per_page" do
17
17
  stub_template "catalog/_per_page_widget.html.erb" => "per_page_widget"
18
18
  stub_template "catalog/_view_type_group.html.erb" => "view_type_group"
19
19
  render
20
- expect(rendered).to match /paginate_compact/
21
- expect(rendered).to match /sort_widget/
22
- expect(rendered).to match /per_page_widget/
23
- expect(rendered).to match /view_type_group/
20
+ expect(rendered).to include('paginate_compact')
21
+ expect(rendered).to include('sort_widget')
22
+ expect(rendered).to include('per_page_widget')
23
+ expect(rendered).to include('view_type_group')
24
24
  end
25
25
 
26
26
  it "does not render the pagination controls with bad limit values" do
@@ -30,6 +30,6 @@ RSpec.describe "catalog/_sort_and_per_page" do
30
30
  stub_template "catalog/_per_page_widget.html.erb" => "per_page_widget"
31
31
  stub_template "catalog/_view_type_group.html.erb" => "view_type_group"
32
32
  render
33
- expect(rendered).not_to match /paginate_compact/
33
+ expect(rendered).not_to include('paginate_compact')
34
34
  end
35
35
  end
@@ -32,7 +32,7 @@ RSpec.describe 'catalog/facet.html.erb' do
32
32
 
33
33
  it "renders facet pagination" do
34
34
  render
35
- expect(rendered).to have_content 'pagination'
35
+ expect(rendered).to have_text 'pagination'
36
36
  end
37
37
 
38
38
  it "renders the facet limit" do
@@ -12,7 +12,7 @@ RSpec.describe "catalog/index.html.erb" do
12
12
  it "renders the Search::SidebarComponent component" do
13
13
  render
14
14
 
15
- expect(sidebar).to match /Limit your search/
15
+ expect(sidebar).to include('Limit your search')
16
16
  end
17
17
  end
18
18
 
@@ -26,7 +26,7 @@ RSpec.describe "catalog/index.html.erb" do
26
26
 
27
27
  it "renders the search_header partial" do
28
28
  render
29
- expect(rendered).to match /header_content/
29
+ expect(rendered).to include('header_content')
30
30
  end
31
31
  end
32
32
  end