blacklight-spotlight 0.12.1 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/spotlight/_exhibits_index.scss +16 -0
- data/app/assets/stylesheets/spotlight/_nestable.scss +10 -10
- data/app/controllers/spotlight/catalog_controller.rb +10 -7
- data/app/controllers/spotlight/concerns/catalog_search_context.rb +15 -2
- data/app/controllers/spotlight/exhibits_controller.rb +1 -0
- data/app/helpers/spotlight/application_helper.rb +1 -1
- data/app/models/concerns/spotlight/solr_document.rb +20 -20
- data/app/models/concerns/spotlight/user.rb +1 -0
- data/app/models/spotlight/blacklight_configuration.rb +10 -4
- data/app/models/spotlight/custom_field.rb +5 -1
- data/app/models/spotlight/exhibit.rb +1 -1
- data/app/models/spotlight/resource.rb +1 -1
- data/app/models/spotlight/search.rb +1 -1
- data/app/models/spotlight/solr_document_sidecar.rb +1 -1
- data/app/views/layouts/spotlight/spotlight.html.erb +1 -1
- data/app/views/spotlight/exhibits/_exhibit_card.html.erb +3 -0
- data/app/views/spotlight/exhibits/index.html.erb +40 -15
- data/config/locales/spotlight.en.yml +4 -1
- data/lib/spotlight/catalog.rb +14 -11
- data/lib/spotlight/catalog/access_controls_enforcement.rb +2 -1
- data/lib/spotlight/engine.rb +5 -0
- data/lib/spotlight/version.rb +1 -1
- data/spec/controllers/spotlight/about_pages_controller_spec.rb +1 -1
- data/spec/controllers/spotlight/appearances_controller_spec.rb +10 -8
- data/spec/controllers/spotlight/browse_controller_spec.rb +3 -3
- data/spec/controllers/spotlight/catalog_controller_spec.rb +88 -7
- data/spec/controllers/spotlight/confirmations_controller_spec.rb +7 -4
- data/spec/controllers/spotlight/contact_forms_controller_spec.rb +1 -1
- data/spec/controllers/spotlight/exhibits_controller_spec.rb +25 -21
- data/spec/controllers/spotlight/home_pages_controller_spec.rb +23 -24
- data/spec/controllers/spotlight/metadata_configurations_controller_spec.rb +17 -13
- data/spec/controllers/spotlight/resources/upload_controller_spec.rb +1 -1
- data/spec/controllers/spotlight/resources_controller_spec.rb +3 -3
- data/spec/controllers/spotlight/roles_controller_spec.rb +5 -3
- data/spec/controllers/spotlight/search_configurations_controller_spec.rb +10 -8
- data/spec/controllers/spotlight/searches_controller_spec.rb +12 -8
- data/spec/controllers/spotlight/solr_controller_spec.rb +34 -29
- data/spec/controllers/spotlight/versions_controller_spec.rb +2 -2
- data/spec/controllers/spotlight/view_configurations_controller_spec.rb +7 -5
- data/spec/helpers/spotlight/application_helper_spec.rb +1 -1
- data/spec/helpers/spotlight/pages_helper_spec.rb +2 -2
- data/spec/models/solr_document_spec.rb +5 -5
- data/spec/models/spotlight/custom_field_spec.rb +8 -9
- data/spec/models/spotlight/resources/open_graph_spec.rb +1 -1
- data/spec/models/spotlight/search_spec.rb +10 -0
- data/spec/models/spotlight/sitemap_spec.rb +1 -1
- data/spec/models/spotlight/solr_document/atomic_updates_spec.rb +1 -1
- data/spec/models/spotlight/solr_document/uploaded_resource_spec.rb +6 -6
- data/spec/views/spotlight/exhibits/index.html.erb_spec.rb +35 -6
- data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_block.html.erb_spec.rb +1 -1
- data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_carousel_block.html.erb_spec.rb +5 -1
- data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_embed_block.html.erb_spec.rb +1 -1
- data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_features_block.html.erb_spec.rb +3 -3
- data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_grid_block.html.erb_spec.rb +5 -1
- metadata +2 -5
- data/app/views/shared/_flash_messages.html.erb +0 -7
- data/app/views/spotlight/exhibits/_exhibit_list.html.erb +0 -3
- data/db/migrate/20151210073829_create_spotlight_configuration.rb +0 -7
@@ -47,7 +47,7 @@ describe Spotlight::HomePagesController, type: :controller do
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
describe '
|
50
|
+
describe 'GET show' do
|
51
51
|
it 'gets search results for display facets' do
|
52
52
|
allow(controller).to receive_messages(search_results: [double, double])
|
53
53
|
get :show, exhibit_id: exhibit
|
@@ -69,33 +69,32 @@ describe Spotlight::HomePagesController, type: :controller do
|
|
69
69
|
expect(assigns).not_to have_key :response
|
70
70
|
expect(assigns).not_to have_key :document_list
|
71
71
|
end
|
72
|
-
end
|
73
72
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'redirects an anonymous user to the signin path' do
|
81
|
-
get :show, exhibit_id: exhibit
|
82
|
-
expect(response).to redirect_to(main_app.new_user_session_path)
|
83
|
-
end
|
73
|
+
context 'when the exhibit is not published' do
|
74
|
+
before do
|
75
|
+
exhibit.update(published: false)
|
76
|
+
end
|
84
77
|
|
85
|
-
|
86
|
-
user = FactoryGirl.create(:exhibit_curator)
|
87
|
-
sign_in user
|
88
|
-
expect do
|
78
|
+
it 'redirects an anonymous user to the signin path' do
|
89
79
|
get :show, exhibit_id: exhibit
|
90
|
-
|
91
|
-
|
80
|
+
expect(response).to redirect_to(main_app.new_user_session_path)
|
81
|
+
end
|
92
82
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
83
|
+
it 'redirects an unauthorized user to the signin path' do
|
84
|
+
user = FactoryGirl.create(:exhibit_curator)
|
85
|
+
sign_in user
|
86
|
+
expect do
|
87
|
+
get :show, exhibit_id: exhibit
|
88
|
+
end.to raise_error ActionController::RoutingError
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'redirects an authorized user to the signin path' do
|
92
|
+
user = FactoryGirl.create(:exhibit_curator)
|
93
|
+
FactoryGirl.create(:role, exhibit: exhibit, user: user)
|
94
|
+
sign_in user
|
95
|
+
get :show, exhibit_id: exhibit
|
96
|
+
expect(response).to be_successful
|
97
|
+
end
|
99
98
|
end
|
100
99
|
end
|
101
100
|
end
|
@@ -8,28 +8,32 @@ describe Spotlight::MetadataConfigurationsController, type: :controller do
|
|
8
8
|
sign_in FactoryGirl.create(:exhibit_visitor)
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
describe 'GET show' do
|
12
|
+
it 'denies access' do
|
13
|
+
get :show, exhibit_id: exhibit
|
14
|
+
expect(response).to redirect_to main_app.root_path
|
15
|
+
expect(flash[:alert]).to be_present
|
16
|
+
end
|
15
17
|
end
|
16
18
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
describe 'GET edit' do
|
20
|
+
it 'denies access' do
|
21
|
+
get :edit, exhibit_id: exhibit
|
22
|
+
expect(response).to redirect_to main_app.root_path
|
23
|
+
expect(flash[:alert]).to be_present
|
24
|
+
end
|
21
25
|
end
|
22
26
|
end
|
23
27
|
|
24
28
|
describe 'when not logged in' do
|
25
|
-
describe '
|
29
|
+
describe 'PATCH update' do
|
26
30
|
it 'denies access' do
|
27
31
|
patch :update, exhibit_id: exhibit
|
28
32
|
expect(response).to redirect_to main_app.new_user_session_path
|
29
33
|
end
|
30
34
|
end
|
31
35
|
|
32
|
-
describe '
|
36
|
+
describe 'GET edit' do
|
33
37
|
it 'denies access' do
|
34
38
|
get :edit, exhibit_id: exhibit
|
35
39
|
expect(response).to redirect_to main_app.new_user_session_path
|
@@ -41,7 +45,7 @@ describe Spotlight::MetadataConfigurationsController, type: :controller do
|
|
41
45
|
let(:user) { FactoryGirl.create(:exhibit_admin, exhibit: exhibit) }
|
42
46
|
before { sign_in user }
|
43
47
|
|
44
|
-
describe '
|
48
|
+
describe 'GET edit' do
|
45
49
|
it 'is successful' do
|
46
50
|
expect(controller).to receive(:add_breadcrumb).with('Home', exhibit)
|
47
51
|
expect(controller).to receive(:add_breadcrumb).with('Configuration', exhibit_dashboard_path(exhibit))
|
@@ -51,7 +55,7 @@ describe Spotlight::MetadataConfigurationsController, type: :controller do
|
|
51
55
|
end
|
52
56
|
end
|
53
57
|
|
54
|
-
describe '
|
58
|
+
describe 'GET show' do
|
55
59
|
it 'is successful' do
|
56
60
|
get :show, exhibit_id: exhibit, format: 'json'
|
57
61
|
expect(response).to be_successful
|
@@ -59,7 +63,7 @@ describe Spotlight::MetadataConfigurationsController, type: :controller do
|
|
59
63
|
end
|
60
64
|
end
|
61
65
|
|
62
|
-
describe '
|
66
|
+
describe 'PATCH update' do
|
63
67
|
it 'updates metadata fields' do
|
64
68
|
blacklight_config = Blacklight::Configuration.new
|
65
69
|
blacklight_config.add_index_field %w(a b c d e f)
|
@@ -6,7 +6,7 @@ describe Spotlight::Resources::UploadController, type: :controller do
|
|
6
6
|
|
7
7
|
describe 'when not logged in' do
|
8
8
|
describe 'POST create' do
|
9
|
-
it '
|
9
|
+
it 'is not allowed' do
|
10
10
|
post :create, exhibit_id: exhibit
|
11
11
|
expect(response).to redirect_to main_app.new_user_session_path
|
12
12
|
end
|
@@ -6,21 +6,21 @@ describe Spotlight::ResourcesController, type: :controller do
|
|
6
6
|
|
7
7
|
describe 'when not logged in' do
|
8
8
|
describe 'GET new' do
|
9
|
-
it '
|
9
|
+
it 'is not allowed' do
|
10
10
|
get :new, exhibit_id: exhibit
|
11
11
|
expect(response).to redirect_to main_app.new_user_session_path
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
describe 'POST create' do
|
16
|
-
it '
|
16
|
+
it 'is not allowed' do
|
17
17
|
post :create, exhibit_id: exhibit
|
18
18
|
expect(response).to redirect_to main_app.new_user_session_path
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
describe 'POST reindex_all' do
|
23
|
-
it '
|
23
|
+
it 'is not allowed' do
|
24
24
|
post :reindex_all, exhibit_id: exhibit
|
25
25
|
expect(response).to redirect_to main_app.new_user_session_path
|
26
26
|
end
|
@@ -6,9 +6,11 @@ describe Spotlight::RolesController, type: :controller do
|
|
6
6
|
|
7
7
|
describe 'when user does not have access' do
|
8
8
|
before { sign_in FactoryGirl.create(:exhibit_visitor) }
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
describe 'GET index' do
|
10
|
+
it 'denies access' do
|
11
|
+
get :index, exhibit_id: exhibit
|
12
|
+
expect(response).to redirect_to main_app.root_path
|
13
|
+
end
|
12
14
|
end
|
13
15
|
end
|
14
16
|
|
@@ -8,22 +8,24 @@ describe Spotlight::SearchConfigurationsController, type: :controller do
|
|
8
8
|
sign_in FactoryGirl.create(:exhibit_visitor)
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
describe 'GET edit' do
|
12
|
+
it 'denies access' do
|
13
|
+
get :edit, exhibit_id: exhibit
|
14
|
+
expect(response).to redirect_to main_app.root_path
|
15
|
+
expect(flash[:alert]).to be_present
|
16
|
+
end
|
15
17
|
end
|
16
18
|
end
|
17
19
|
|
18
20
|
describe 'when not logged in' do
|
19
|
-
describe '
|
21
|
+
describe 'PATCH update' do
|
20
22
|
it 'denies access' do
|
21
23
|
patch :update, exhibit_id: exhibit
|
22
24
|
expect(response).to redirect_to main_app.new_user_session_path
|
23
25
|
end
|
24
26
|
end
|
25
27
|
|
26
|
-
describe '
|
28
|
+
describe 'GET edit' do
|
27
29
|
it 'denies access' do
|
28
30
|
get :edit, exhibit_id: exhibit
|
29
31
|
expect(response).to redirect_to main_app.new_user_session_path
|
@@ -35,7 +37,7 @@ describe Spotlight::SearchConfigurationsController, type: :controller do
|
|
35
37
|
let(:user) { FactoryGirl.create(:exhibit_admin, exhibit: exhibit) }
|
36
38
|
before { sign_in user }
|
37
39
|
|
38
|
-
describe '
|
40
|
+
describe 'GET edit' do
|
39
41
|
it 'is successful' do
|
40
42
|
expect(controller).to receive(:add_breadcrumb).with('Home', exhibit)
|
41
43
|
expect(controller).to receive(:add_breadcrumb).with('Configuration', exhibit_dashboard_path(exhibit))
|
@@ -52,7 +54,7 @@ describe Spotlight::SearchConfigurationsController, type: :controller do
|
|
52
54
|
end
|
53
55
|
end
|
54
56
|
|
55
|
-
describe '
|
57
|
+
describe 'PATCH update' do
|
56
58
|
it 'updates facet fields' do
|
57
59
|
patch :update, exhibit_id: exhibit, blacklight_configuration: {
|
58
60
|
facet_fields: { 'genre_ssim' => { enabled: '1', label: 'Label' } }
|
@@ -13,16 +13,20 @@ describe Spotlight::SearchesController, type: :controller do
|
|
13
13
|
sign_in FactoryGirl.create(:exhibit_visitor)
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
describe 'POST create' do
|
17
|
+
it 'denies access' do
|
18
|
+
post :create, exhibit_id: exhibit
|
19
|
+
expect(response).to redirect_to main_app.root_path
|
20
|
+
expect(flash[:alert]).to be_present
|
21
|
+
end
|
20
22
|
end
|
21
23
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
describe 'GET index' do
|
25
|
+
it 'denies access' do
|
26
|
+
get :index, exhibit_id: exhibit
|
27
|
+
expect(response).to redirect_to main_app.root_path
|
28
|
+
expect(flash[:alert]).to be_present
|
29
|
+
end
|
26
30
|
end
|
27
31
|
end
|
28
32
|
|
@@ -6,9 +6,12 @@ describe Spotlight::SolrController, type: :controller do
|
|
6
6
|
|
7
7
|
describe 'when user does not have access' do
|
8
8
|
before { sign_in FactoryGirl.create(:exhibit_visitor) }
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
|
10
|
+
describe 'POST update' do
|
11
|
+
it 'does not allow update' do
|
12
|
+
post :update, exhibit_id: exhibit
|
13
|
+
expect(response).to redirect_to main_app.root_path
|
14
|
+
end
|
12
15
|
end
|
13
16
|
end
|
14
17
|
|
@@ -21,42 +24,44 @@ describe Spotlight::SolrController, type: :controller do
|
|
21
24
|
expect(controller).to receive(:blacklight_solr).and_return(solr)
|
22
25
|
end
|
23
26
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
post :update, { a: 1 }.to_json, content_type: :json, exhibit_id: exhibit
|
27
|
+
describe 'POST update' do
|
28
|
+
it 'passes through the request data' do
|
29
|
+
doc = {}
|
30
|
+
expect(solr).to receive(:update) do |arr|
|
31
|
+
doc = arr.first
|
32
|
+
end
|
31
33
|
|
32
|
-
|
33
|
-
expect(doc).to include 'a' => 1
|
34
|
-
end
|
34
|
+
post :update, { a: 1 }.to_json, content_type: :json, exhibit_id: exhibit
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
expect(solr).to receive(:update) do |arr|
|
39
|
-
doc = arr.first
|
36
|
+
expect(response).to be_successful
|
37
|
+
expect(doc).to include 'a' => 1
|
40
38
|
end
|
41
39
|
|
42
|
-
|
40
|
+
it 'enriches the request with exhibit solr data' do
|
41
|
+
doc = {}
|
42
|
+
expect(solr).to receive(:update) do |arr|
|
43
|
+
doc = arr.first
|
44
|
+
end
|
43
45
|
|
44
|
-
|
45
|
-
expect(doc).to include exhibit.solr_data
|
46
|
-
end
|
46
|
+
post :update, { a: 1 }.to_json, content_type: :json, exhibit_id: exhibit
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
expect(solr).to receive(:update) do |arr|
|
51
|
-
doc = arr.first
|
48
|
+
expect(response).to be_successful
|
49
|
+
expect(doc).to include exhibit.solr_data
|
52
50
|
end
|
53
51
|
|
54
|
-
|
52
|
+
it 'enriches the request with sidecar data' do
|
53
|
+
doc = {}
|
54
|
+
expect(solr).to receive(:update) do |arr|
|
55
|
+
doc = arr.first
|
56
|
+
end
|
55
57
|
|
56
|
-
|
58
|
+
allow_any_instance_of(SolrDocument).to receive(:to_solr).and_return(b: 1)
|
57
59
|
|
58
|
-
|
59
|
-
|
60
|
+
post :update, { a: 1 }.to_json, content_type: :json, exhibit_id: exhibit
|
61
|
+
|
62
|
+
expect(response).to be_successful
|
63
|
+
expect(doc).to include b: 1
|
64
|
+
end
|
60
65
|
end
|
61
66
|
end
|
62
67
|
end
|
@@ -5,7 +5,7 @@ describe Spotlight::VersionsController, type: :controller do
|
|
5
5
|
|
6
6
|
describe 'when not logged in' do
|
7
7
|
describe 'POST revert' do
|
8
|
-
it '
|
8
|
+
it 'is not allowed' do
|
9
9
|
post :revert, id: 1
|
10
10
|
expect(response).to redirect_to main_app.new_user_session_path
|
11
11
|
end
|
@@ -21,7 +21,7 @@ describe Spotlight::VersionsController, type: :controller do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
describe 'POST revert' do
|
24
|
-
it '
|
24
|
+
it 'is not allowed' do
|
25
25
|
post :revert, id: page.versions.last
|
26
26
|
expect(response).to redirect_to main_app.root_path
|
27
27
|
expect(flash[:alert]).to be_present
|
@@ -8,10 +8,12 @@ describe Spotlight::ViewConfigurationsController, type: :controller do
|
|
8
8
|
sign_in FactoryGirl.create(:exhibit_visitor)
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
describe 'GET show' do
|
12
|
+
it 'denies access' do
|
13
|
+
get :show, exhibit_id: exhibit
|
14
|
+
expect(response).to redirect_to main_app.root_path
|
15
|
+
expect(flash[:alert]).to be_present
|
16
|
+
end
|
15
17
|
end
|
16
18
|
end
|
17
19
|
|
@@ -19,7 +21,7 @@ describe Spotlight::ViewConfigurationsController, type: :controller do
|
|
19
21
|
let(:user) { FactoryGirl.create(:exhibit_admin, exhibit: exhibit) }
|
20
22
|
before { sign_in user }
|
21
23
|
|
22
|
-
describe '
|
24
|
+
describe 'GET show' do
|
23
25
|
it 'is successful' do
|
24
26
|
get :show, exhibit_id: exhibit, format: 'json'
|
25
27
|
expect(response).to be_successful
|
@@ -25,7 +25,7 @@ describe Spotlight::ApplicationHelper, type: :helper do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'is a url for a search with the given tag facet' do
|
28
|
-
allow(
|
28
|
+
allow(SolrDocument).to receive_messages(solr_field_for_tagger: :exhibit_tags)
|
29
29
|
expected = spotlight.exhibit_catalog_index_path(exhibit_id: helper.current_exhibit, f: { exhibit_tags: ['tag_value'] })
|
30
30
|
expect(helper.url_to_tag_facet 'tag_value').to eq expected
|
31
31
|
end
|
@@ -3,8 +3,8 @@ require 'spec_helper'
|
|
3
3
|
module Spotlight
|
4
4
|
describe PagesHelper, type: :helper do
|
5
5
|
let(:blacklight_config) { Blacklight::Configuration.new { |config| config.show.title_field = :abc } }
|
6
|
-
let(:titled_document) {
|
7
|
-
let(:untitled_document) {
|
6
|
+
let(:titled_document) { blacklight_config.document_model.new(abc: 'value') }
|
7
|
+
let(:untitled_document) { blacklight_config.document_model.new(id: '1234') }
|
8
8
|
let!(:current_exhibit) { FactoryGirl.create(:exhibit) }
|
9
9
|
let!(:home_page) { current_exhibit.home_page }
|
10
10
|
let!(:search) { FactoryGirl.create(:search, exhibit: current_exhibit, query_params: { 'q' => 'query' }, published: true) }
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe SolrDocument, type: :model do
|
4
|
-
subject {
|
4
|
+
subject { described_class.new(id: 'abcd123') }
|
5
5
|
its(:to_key) { should == ['abcd123'] }
|
6
6
|
its(:persisted?) { should be_truthy }
|
7
7
|
before do
|
@@ -23,21 +23,21 @@ describe SolrDocument, type: :model do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'has find' do
|
26
|
-
expect(
|
26
|
+
expect(described_class.find('dq287tq6352')).to be_kind_of described_class
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'has ==' do
|
30
|
-
expect(
|
30
|
+
expect(described_class.find('dq287tq6352')).to eq described_class.find('dq287tq6352')
|
31
31
|
end
|
32
32
|
|
33
33
|
describe 'GlobalID' do
|
34
34
|
let(:doc_id) { 'dq287tq6352' }
|
35
35
|
it 'responds to #to_global_id' do
|
36
|
-
expect(
|
36
|
+
expect(described_class.find(doc_id).to_global_id.to_s).to eq "gid://internal/SolrDocument/#{doc_id}"
|
37
37
|
end
|
38
38
|
it 'is able to locate SolrDocuments by their GlobalID' do
|
39
39
|
expect(GlobalID::Locator.locate(
|
40
|
-
|
40
|
+
described_class.find(doc_id).to_global_id
|
41
41
|
)['id']).to eq doc_id
|
42
42
|
end
|
43
43
|
end
|