blacklight-spotlight 1.4.1 → 1.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +5 -1
  3. data/app/assets/javascripts/spotlight/blocks/resources_block.js +3 -2
  4. data/app/assets/javascripts/spotlight/crop.es6 +2 -0
  5. data/app/assets/javascripts/spotlight/multi_image_selector.js +5 -4
  6. data/app/assets/javascripts/spotlight/reindex_monitor.js +16 -3
  7. data/app/controllers/concerns/spotlight/controller.rb +6 -1
  8. data/app/controllers/spotlight/browse_controller.rb +27 -0
  9. data/app/controllers/spotlight/catalog_controller.rb +2 -2
  10. data/app/helpers/spotlight/browse_helper.rb +0 -29
  11. data/app/helpers/spotlight/title_helper.rb +2 -2
  12. data/app/models/concerns/spotlight/custom_translation_extension.rb +23 -0
  13. data/app/models/concerns/spotlight/solr_document/atomic_updates.rb +4 -2
  14. data/app/models/spotlight/blacklight_configuration.rb +2 -2
  15. data/app/models/spotlight/exhibit.rb +1 -1
  16. data/app/views/layouts/spotlight/spotlight.html.erb +1 -0
  17. data/app/views/spotlight/dashboards/_analytics.html.erb +4 -4
  18. data/app/views/spotlight/search_configurations/_search_fields.html.erb +1 -1
  19. data/db/migrate/20180306142612_create_translations.rb +18 -0
  20. data/lib/generators/spotlight/install_generator.rb +4 -0
  21. data/lib/generators/spotlight/templates/config/initializers/translation.rb +17 -0
  22. data/lib/spotlight/engine.rb +1 -0
  23. data/lib/spotlight/version.rb +1 -1
  24. data/spec/controllers/spotlight/browse_controller_spec.rb +32 -0
  25. data/spec/controllers/spotlight/confirmations_controller_spec.rb +1 -1
  26. data/spec/controllers/spotlight/filters_controller_spec.rb +0 -1
  27. data/spec/controllers/spotlight/roles_controller_spec.rb +17 -0
  28. data/spec/controllers/spotlight/tags_controller_spec.rb +6 -1
  29. data/spec/examples.txt +1280 -1167
  30. data/spec/factories/translation.rb +6 -0
  31. data/spec/features/add_iiif_manifest_spec.rb +2 -0
  32. data/spec/features/browse_category_spec.rb +28 -0
  33. data/spec/features/edit_search_fields_spec.rb +1 -2
  34. data/spec/features/exhibit_masthead_spec.rb +2 -2
  35. data/spec/features/exhibit_themes_spec.rb +1 -1
  36. data/spec/features/exhibits/add_tags_spec.rb +1 -1
  37. data/spec/features/item_admin_spec.rb +1 -1
  38. data/spec/features/javascript/blocks/solr_documents_block_spec.rb +41 -28
  39. data/spec/features/javascript/multi_image_select_spec.rb +1 -1
  40. data/spec/features/javascript/reindex_monitor_spec.rb +1 -1
  41. data/spec/features/javascript/search_config_admin_spec.rb +16 -29
  42. data/spec/features/site_masthead_spec.rb +1 -1
  43. data/spec/features/slideshow_spec.rb +1 -2
  44. data/spec/features/translation_scope_spec.rb +24 -0
  45. data/spec/models/spotlight/ability_spec.rb +7 -10
  46. data/spec/models/spotlight/contact_email_spec.rb +1 -1
  47. data/spec/models/spotlight/contact_form_spec.rb +1 -1
  48. data/spec/models/spotlight/resources/iiif_harvester_spec.rb +3 -0
  49. data/spec/models/spotlight/solr_document/atomic_updates_spec.rb +2 -2
  50. data/spec/spec_helper.rb +12 -4
  51. data/spec/support/disable_friendly_id_deprecation_warnings.rb +8 -0
  52. data/spec/support/features/capybara_default_max_wait_metadata_helper.rb +16 -0
  53. data/spec/support/features/test_features_helpers.rb +12 -2
  54. data/spec/views/spotlight/browse/show.html.erb_spec.rb +0 -7
  55. data/spec/views/spotlight/roles/index.html.erb_spec.rb +2 -0
  56. data/spec/views/spotlight/tags/index.html.erb_spec.rb +1 -0
  57. data/vendor/assets/javascripts/Leaflet.Editable.js +22 -11
  58. data/vendor/assets/javascripts/leaflet-iiif.js +91 -23
  59. metadata +246 -227
  60. data/spec/features/curator_items.rb +0 -10
  61. data/spec/features/tags_admin_spec.rb +0 -27
  62. data/spec/features/user_admin_spec.rb +0 -29
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 172e2e6207814ddb0e3aa36cc88491cce8653502
4
- data.tar.gz: 16149c0f5d038f9d7b585de9a4d744567a0e276f
3
+ metadata.gz: 6283454c62ce693d7859d54abf0f6b8f231872a2
4
+ data.tar.gz: b3614482d805ac181bdd85908786897a83998413
5
5
  SHA512:
6
- metadata.gz: 30641460fdd7f798c048815d2abf047539a0bbb243f0b0330e1e67b7f9affaeb9be7b2be45d341a6bb668b755f398881e7b7cf9d2a12cd03d7180276a92528cb
7
- data.tar.gz: c1138b26c502cc3aacd0c6c45301d1794c28f5873a4afa2102482fdcd642efdd72221d4e789ea4ed9e64050b5ba870bc98f00f793092519e89537d33bdccb4b1
6
+ metadata.gz: bc6add80eb86ad87548c3c4b40c9f73dd15de59b8b0443b9fcbdec2860ea1ef5c820190f8c288e471f8e7c021f4fd611be103ac66a39640c9d5d80600aa7194f
7
+ data.tar.gz: ac68408582986b2115ea46832b6ee2271501ecf99311bb56c2a37bb7dfee7337679850264217e76948e1afd03956732c9a3d643a09f940569d41491dcc4752cc
data/Rakefile CHANGED
@@ -25,7 +25,6 @@ require 'rubocop/rake_task'
25
25
  RuboCop::RakeTask.new(:rubocop)
26
26
 
27
27
  require 'engine_cart/rake_task'
28
- EngineCart.fingerprint_proc = EngineCart.rails_fingerprint_proc
29
28
 
30
29
  require 'spotlight/version'
31
30
 
@@ -34,6 +33,11 @@ task ci: ['engine_cart:generate'] do
34
33
 
35
34
  SolrWrapper.wrap(port: '8983') do |solr|
36
35
  solr.with_collection(name: 'blacklight-core', dir: File.join(File.expand_path(File.dirname(__FILE__)), 'solr_conf', 'conf')) do
36
+ within_test_app do
37
+ system 'bundle install'
38
+ system 'bundle exec rake db:migrate'
39
+ end
40
+
37
41
  Rake::Task['spotlight:fixtures'].invoke
38
42
 
39
43
  # run the tests
@@ -33,9 +33,10 @@ Spotlight.Block.Resources = (function(){
33
33
  } else {
34
34
  checked = "";
35
35
  }
36
+ var resource_id = data.slug || data.id;
36
37
  var markup = [
37
- '<li class="field form-inline dd-item dd3-item" data-id="' + index + '" id="' + this.formId("item_" + data.id) + '">',
38
- '<input type="hidden" name="item[' + index + '][id]" value="' + (data.slug || data.id) + '" />',
38
+ '<li class="field form-inline dd-item dd3-item" data-resource-id="' + resource_id + '" data-id="' + index + '" id="' + this.formId("item_" + data.id) + '">',
39
+ '<input type="hidden" name="item[' + index + '][id]" value="' + resource_id + '" />',
39
40
  '<input type="hidden" name="item[' + index + '][title]" value="' + data.title + '" />',
40
41
  this._itemPanelIiifFields(index, data),
41
42
  '<input data-property="weight" type="hidden" name="item[' + index + '][weight]" value="' + data.weight + '" />',
@@ -230,6 +230,8 @@ export default class Crop {
230
230
  tabs.on('shown.bs.tab', function() {
231
231
  if(self.cropArea.data('initiallyVisible') === false && self.cropArea.is(':visible')) {
232
232
  self.cropperMap.invalidateSize();
233
+ // Because the map size is 0,0 when image is loading (not visible) we need to refit the bounds of the layer
234
+ self.imageLayer._fitBounds();
233
235
  self.cropArea.data('initiallyVisible', null);
234
236
  }
235
237
  });
@@ -111,12 +111,16 @@
111
111
 
112
112
  function addThumbsToList(){
113
113
  $.each(image_versions, function(i){
114
- var listItem = $('<li><a href="javascript:;"><img src="' + image_versions[i]['thumb'] +'" data-image-id="' + image_versions[i]['imageId'] +'" /></a></li>');
114
+ var listItem = $('<li data-index="' + i + '"><a href="javascript:;"><img src="' + image_versions[i]['thumb'] +'" data-image-id="' + image_versions[i]['imageId'] +'" /></a></li>');
115
115
  listItem.on('click', function(){
116
116
  // get the current image id
117
117
  var imageid = $('img', $(this)).data('image-id');
118
118
  var src = $('img', $(this)).attr('src');
119
119
 
120
+ if (typeof clickCallback === 'function' ) {
121
+ clickCallback(image_versions[i]);
122
+ }
123
+
120
124
  // mark the current selection as active
121
125
  $('li.active', thumbList).removeClass('active');
122
126
  $(this).addClass('active');
@@ -128,9 +132,6 @@
128
132
  $('li', thumbList).index($(this)) + 1
129
133
  );
130
134
  scrollToActiveThumb();
131
- if (typeof clickCallback === 'function' ) {
132
- clickCallback(image_versions[i]);
133
- }
134
135
  });
135
136
  $("img", listItem).on('load', function() {
136
137
  updateThumbListWidth();
@@ -7,14 +7,27 @@ Spotlight.onLoad(function() {
7
7
  var monitorElements = this;
8
8
  var defaultRefreshRate = 3000;
9
9
  var panelContainer;
10
+ var pollers = [];
10
11
 
11
12
  $(monitorElements).each(function() {
12
13
  panelContainer = $(this);
13
14
  var monitorUrl = panelContainer.data('monitorUrl');
14
15
  var refreshRate = panelContainer.data('refreshRate') || defaultRefreshRate;
15
- setInterval(function() {
16
- checkMonitorUrl(monitorUrl);
17
- }, refreshRate);
16
+ pollers.push(
17
+ setInterval(function() {
18
+ checkMonitorUrl(monitorUrl);
19
+ }, refreshRate)
20
+ );
21
+ });
22
+
23
+ // Clear the intervals on turbolink:click event (e.g. when the user navigates away from the page)
24
+ $(document).on('turbolinks:click', function() {
25
+ if (pollers.length > 0) {
26
+ $.each(pollers, function() {
27
+ clearInterval(this);
28
+ });
29
+ pollers = [];
30
+ }
18
31
  });
19
32
 
20
33
  function checkMonitorUrl(url) {
@@ -8,6 +8,11 @@ module Spotlight
8
8
 
9
9
  included do
10
10
  helper_method :current_site, :current_exhibit, :current_masthead, :exhibit_masthead?, :resource_masthead?
11
+ before_action :set_exhibit_locale_scope
12
+ end
13
+
14
+ def set_exhibit_locale_scope
15
+ Translation.current_exhibit = current_exhibit
11
16
  end
12
17
 
13
18
  def current_site
@@ -15,7 +20,7 @@ module Spotlight
15
20
  end
16
21
 
17
22
  def current_exhibit
18
- @exhibit
23
+ @exhibit || (Spotlight::Exhibit.find(params[:exhibit_id]) if params[:exhibit_id].present?)
19
24
  end
20
25
 
21
26
  def current_masthead
@@ -83,5 +83,32 @@ module Spotlight
83
83
  def should_render_spotlight_search_bar?
84
84
  !resource_masthead?
85
85
  end
86
+
87
+ def document_index_view_type
88
+ return super if params[:view].present?
89
+ if @search && @search.default_index_view_type.present?
90
+ blacklight_config.view[@search.default_index_view_type].key
91
+ else
92
+ default_document_index_view_type
93
+ end
94
+ end
95
+
96
+ helper_method :document_index_view_type
97
+
98
+ def default_document_index_view_type
99
+ if view_available? default_browse_index_view_type
100
+ default_browse_index_view_type
101
+ else
102
+ super
103
+ end
104
+ end
105
+
106
+ def view_available?(view)
107
+ blacklight_config.view.key?(view) && blacklight_configuration_context.evaluate_if_unless_configuration(blacklight_config.view)
108
+ end
109
+
110
+ def default_browse_index_view_type
111
+ Spotlight::Engine.config.default_browse_index_view_type
112
+ end
86
113
  end
87
114
  end
@@ -122,11 +122,11 @@ module Spotlight
122
122
  protected
123
123
 
124
124
  # TODO: move this out of app/helpers/blacklight/catalog_helper_behavior.rb and into blacklight/catalog.rb
125
- # rubocop:disable Style/PredicateName
125
+ # rubocop:disable Naming/PredicateName
126
126
  def has_search_parameters?
127
127
  !params[:q].blank? || !params[:f].blank? || !params[:search_field].blank?
128
128
  end
129
- # rubocop:enable Style/PredicateName
129
+ # rubocop:enable Naming/PredicateName
130
130
 
131
131
  def attach_breadcrumbs
132
132
  # The "q: ''" is necessary so that the breadcrumb builder recognizes that a path like this:
@@ -5,39 +5,10 @@ module Spotlight
5
5
  include ::BlacklightConfigurationHelper
6
6
  include Spotlight::RenderingHelper
7
7
 
8
- def document_index_view_type
9
- if @search && @search.default_index_view_type.present? && params[:view].blank?
10
- blacklight_config.view[@search.default_index_view_type].key
11
- else
12
- super
13
- end
14
- end
15
-
16
- ##
17
- # Override Blacklight's #default_document_index_view_type helper to
18
- # use a different default view when presenting browse categories
19
- def default_document_index_view_type
20
- if view_available? default_browse_index_view_type
21
- default_browse_index_view_type
22
- else
23
- super
24
- end
25
- end
26
-
27
8
  ##
28
9
  # Get parent results count of a browse category search
29
10
  def parent_search_count
30
11
  @parent_search_count ||= Spotlight::Search.find(@search.id).count
31
12
  end
32
-
33
- private
34
-
35
- def view_available?(view)
36
- blacklight_config.view.key?(view) && blacklight_configuration_context.evaluate_if_unless_configuration(blacklight_config.view)
37
- end
38
-
39
- def default_browse_index_view_type
40
- Spotlight::Engine.config.default_browse_index_view_type
41
- end
42
13
  end
43
14
  end
@@ -15,10 +15,10 @@ module Spotlight
15
15
  content_tag(:h1, safe_join([section, content_tag(:small, title || t(:'.header'))], "\n"), class: 'page-header')
16
16
  end
17
17
 
18
- # rubocop:disable Style/AccessorMethodName
18
+ # rubocop:disable Naming/AccessorMethodName
19
19
  def set_html_page_title(title = nil)
20
20
  @page_title = strip_tags(t(:'spotlight.html_title', title: title || t(:'.title', default: :'.header'), application_name: application_name)).html_safe
21
21
  end
22
- # rubocop:enable Style/AccessorMethodName
22
+ # rubocop:enable Naming/AccessorMethodName
23
23
  end
24
24
  end
@@ -0,0 +1,23 @@
1
+ module Spotlight
2
+ ##
3
+ # Module that extends I18n::Backend::ActiveRecord::Translation to provide
4
+ # additional Spotlight behavior, such as exhibit specific Translations
5
+ module CustomTranslationExtension
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ default_scope { where(exhibit: current_exhibit) }
10
+ belongs_to :exhibit, class_name: 'Spotlight::Exhibit', inverse_of: :translations
11
+ end
12
+
13
+ class_methods do
14
+ def current_exhibit
15
+ Thread.current[:current_exhibit]
16
+ end
17
+
18
+ def current_exhibit=(exhibit)
19
+ Thread.current[:current_exhibit] = exhibit
20
+ end
21
+ end
22
+ end
23
+ end
@@ -17,17 +17,19 @@ module Spotlight
17
17
  private
18
18
 
19
19
  def hash_for_solr_update(data)
20
- Array.wrap(data).map { |doc| convert_document_to_atomic_update_hash(doc) }.reject { |x| x.length <= 1 }
20
+ Array.wrap(data).map { |doc| convert_document_to_atomic_update_hash(doc) }.reject { |x| x.length <= 2 }
21
21
  end
22
22
 
23
23
  def convert_document_to_atomic_update_hash(doc)
24
- doc.each_with_object({}) do |(k, v), hash|
24
+ output = doc.each_with_object({}) do |(k, v), hash|
25
25
  hash[k] = if k.to_sym == self.class.unique_key.to_sym
26
26
  v
27
27
  else
28
28
  { set: v }
29
29
  end
30
30
  end
31
+ output[Blacklight::Configuration.default_values[:index].timestamp_field] ||= { set: nil }
32
+ output
31
33
  end
32
34
  end
33
35
  end
@@ -314,7 +314,7 @@ module Spotlight
314
314
  ].flatten.join(' ')
315
315
  end
316
316
 
317
- # rubocop:disable Style/AccessorMethodName
317
+ # rubocop:disable Naming/AccessorMethodName
318
318
  def set_index_field_defaults(field)
319
319
  return unless index_fields.blank?
320
320
 
@@ -341,7 +341,7 @@ module Spotlight
341
341
  field.show = true
342
342
  field.enabled = true
343
343
  end
344
- # rubocop:enable Style/AccessorMethodName
344
+ # rubocop:enable Naming/AccessorMethodName
345
345
 
346
346
  # @return [Integer] the weight (sort order) for this field
347
347
  def field_weight(fields, index)
@@ -34,7 +34,6 @@ module Spotlight
34
34
  has_many :custom_fields, dependent: :delete_all
35
35
  has_many :feature_pages, extend: FriendlyId::FinderMethods
36
36
  has_many :main_navigations, dependent: :delete_all
37
- has_many :owned_taggings, class_name: 'ActsAsTaggableOn::Tagging', as: :tagger
38
37
  has_many :reindexing_log_entries, dependent: :destroy
39
38
  has_many :resources
40
39
  has_many :roles, as: :resource, dependent: :delete_all
@@ -43,6 +42,7 @@ module Spotlight
43
42
  has_many :users, through: :roles, class_name: Spotlight::Engine.config.user_class
44
43
  has_many :pages, dependent: :destroy
45
44
  has_many :filters, dependent: :delete_all
45
+ has_many :translations, class_name: 'I18n::Backend::ActiveRecord::Translation', dependent: :destroy, inverse_of: :exhibit
46
46
 
47
47
  has_one :blacklight_configuration, class_name: 'Spotlight::BlacklightConfiguration', dependent: :delete
48
48
  has_one :home_page
@@ -27,6 +27,7 @@
27
27
  <%= description %>
28
28
  <%= twitter_card %>
29
29
  <%= opengraph %>
30
+ <%= javascript_tag '$.fx.off = true;' if Rails.env.test? %>
30
31
 
31
32
  <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
32
33
  <!--[if lt IE 9]>
@@ -17,19 +17,19 @@
17
17
  <% page_analytics = current_exhibit.page_analytics(1.month, exhibit_root_path(current_exhibit)) %>
18
18
  <% unless page_analytics.empty? %>
19
19
  <h4><%= t :'.pages.header' %></h4>
20
- <table class="table table-striped">
20
+ <table class="table table-striped popular-pages">
21
21
  <thead>
22
22
  <tr>
23
23
  <th><%= t(:".pagetitle") %></th>
24
- <th><%= t(:".pageviews") %></th>
24
+ <th class="text-right"><%= t(:".pageviews") %></th>
25
25
  </tr>
26
26
  </thead>
27
27
  <% page_analytics.each do |p| %>
28
28
  <tr>
29
29
  <td><%= link_to p.pageTitle, p.pagePath %></td>
30
- <td><%= p.pageviews %></td>
30
+ <td class="text-right"><%= p.pageviews %></td>
31
31
  </tr>
32
32
  <% end %>
33
33
  </table>
34
34
  <% end %>
35
- <% end %>
35
+ <% end %>
@@ -1,6 +1,6 @@
1
1
  <% default_field = @blacklight_configuration.blacklight_config.default_search_field %>
2
2
  <div class="checkbox">
3
- <label>
3
+ <label for="enable_feature">
4
4
  <%= check_box_tag :enable_feature, '1', @blacklight_configuration.blacklight_config.search_fields.select { |_k, v| v.enabled && v.include_in_simple_select != false }.any?, data: { behavior: 'enable-feature', target: '#search_fields' } %> <%= t(:'.enable_feature') %>
5
5
  </label>
6
6
  </div>
@@ -0,0 +1,18 @@
1
+ class CreateTranslations < ActiveRecord::Migration[5.0]
2
+ def self.up
3
+ create_table :translations do |t|
4
+ t.string :locale
5
+ t.string :key
6
+ t.text :value
7
+ t.text :interpolations
8
+ t.boolean :is_proc, default: false
9
+ t.references :exhibit
10
+
11
+ t.timestamps
12
+ end
13
+ end
14
+
15
+ def self.down
16
+ drop_table :translations
17
+ end
18
+ end
@@ -137,5 +137,9 @@ module Spotlight
137
137
  generate 'devise_invitable:install'
138
138
  generate 'devise_invitable', 'User'
139
139
  end
140
+
141
+ def add_translations
142
+ copy_file 'config/initializers/translation.rb'
143
+ end
140
144
  end
141
145
  end
@@ -0,0 +1,17 @@
1
+ require 'i18n/backend/active_record'
2
+
3
+ Translation = I18n::Backend::ActiveRecord::Translation
4
+
5
+ if Translation.table_exists?
6
+ ##
7
+ # Sets up the new Spotlight Translation backend, backed by ActiveRecord. To
8
+ # turn on the ActiveRecord backend, uncomment the following lines.
9
+
10
+ # I18n.backend = I18n::Backend::ActiveRecord.new
11
+ I18n::Backend::ActiveRecord.send(:include, I18n::Backend::Memoize)
12
+ Translation.send(:include, Spotlight::CustomTranslationExtension)
13
+ I18n::Backend::Simple.send(:include, I18n::Backend::Memoize)
14
+ I18n::Backend::Simple.send(:include, I18n::Backend::Pluralization)
15
+
16
+ # I18n.backend = I18n::Backend::Chain.new(I18n.backend, I18n::Backend::Simple.new)
17
+ end
@@ -12,6 +12,7 @@ require 'tophat'
12
12
  require 'paper_trail'
13
13
  require 'clipboard/rails'
14
14
  require 'leaflet-rails'
15
+ require 'i18n/active_record'
15
16
 
16
17
  module Spotlight
17
18
  ##
@@ -1,3 +1,3 @@
1
1
  module Spotlight
2
- VERSION = '1.4.1'.freeze
2
+ VERSION = '1.5.1'.freeze
3
3
  end
@@ -5,6 +5,38 @@ describe Spotlight::BrowseController, type: :controller do
5
5
  let!(:unpublished) { FactoryBot.create(:search, exhibit: exhibit) }
6
6
  let(:admin) { FactoryBot.create(:site_admin) }
7
7
 
8
+ describe 'protected methods' do
9
+ it 'uses the blacklight.browse configuration for the document actions when additional configuration layers are not defined' do
10
+ expect(controller).to receive(:view_available?).and_return true
11
+ expect(controller.send(:document_index_view_type)).to equal :gallery
12
+ end
13
+
14
+ it 'uses the blacklight_config view configuration when there are no params' do
15
+ allow(controller).to receive(:current_exhibit).and_return exhibit
16
+ expect(controller).to receive(:view_available?).and_return false
17
+ expect(controller.send(:document_index_view_type)).to equal :list
18
+ end
19
+
20
+ it 'returns document_index_view_type from a search object' do
21
+ allow(controller).to receive(:current_exhibit).and_return exhibit
22
+ expect(controller).to receive(:view_available?).and_return true
23
+ search.default_index_view_type = 'gallery'
24
+ controller.instance_variable_set(:@search, search)
25
+ expect(controller.send(:default_document_index_view_type)).to equal :gallery
26
+ end
27
+
28
+ it 'returns default_document_index_view_type from super when there is no view available' do
29
+ allow(controller).to receive(:current_exhibit).and_return exhibit
30
+ expect(controller).to receive(:view_available?).and_return false
31
+ expect(controller.send(:default_document_index_view_type)).to equal :list
32
+ end
33
+
34
+ it 'returns the default_browse_index_view_type from exhibit configuration' do
35
+ allow(controller).to receive(:current_exhibit).and_return exhibit
36
+ expect(controller.send(:default_browse_index_view_type)).to equal :gallery
37
+ end
38
+ end
39
+
8
40
  describe 'when authenticated as an admin' do
9
41
  before { sign_in admin }
10
42
  describe 'GET index' do