spotlight-dor-resources 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (25) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +17 -2
  3. data/.rubocop_todo.yml +1 -186
  4. data/app/models/spotlight/resources/dor_resource.rb +1 -0
  5. data/app/models/spotlight/resources/purl.rb +4 -4
  6. data/app/models/spotlight/resources/searchworks.rb +4 -5
  7. data/lib/spotlight/dor/indexer.rb +187 -125
  8. data/lib/spotlight/dor/resources.rb +19 -7
  9. data/lib/spotlight/dor/resources/engine.rb +3 -2
  10. data/lib/spotlight/dor/resources/version.rb +2 -1
  11. data/spec/integration/gdor_integration_spec.rb +9 -9
  12. data/spec/{unit → lib}/spotlight/dor/indexer_spec.rb +209 -10
  13. data/spec/models/spotlight/resources/purl_spec.rb +45 -39
  14. data/spec/models/spotlight/resources/searchworks_spec.rb +47 -44
  15. data/spec/vcr_cassettes/gdor_indexing_integration_test/{should_have_a_doc_id.yml → has_a_doc_id.yml} +60 -40
  16. data/spec/vcr_cassettes/gdor_indexing_integration_test/{should_have_spotlight_data.yml → has_exhibit-specific_indexing.yml} +48 -32
  17. data/spec/vcr_cassettes/gdor_indexing_integration_test/{should_have_the_gdor_data.yml → has_spotlight_data.yml} +48 -32
  18. data/spec/vcr_cassettes/gdor_indexing_integration_test/{should_have_exhibit-specific_indexing.yml → has_the_gdor_data.yml} +48 -32
  19. data/spotlight-dor-resources.gemspec +22 -22
  20. metadata +11 -21
  21. data/spec/integration/indexer_integration_spec.rb +0 -28
  22. data/spec/vcr_cassettes/indexer_integration_tests/donor_tags/no_donor_tags_ssim_field_in_solr_doc_when_note_displayLabel_Donor_tags_not_in_MODS.yml +0 -1382
  23. data/spec/vcr_cassettes/indexer_integration_tests/donor_tags/solr_doc_has_donor_tags_ssim_field_when_note_displayLabel_Donor_tags_is_in_MODS.yml +0 -1602
  24. data/spec/vcr_cassettes/indexer_integration_tests/genre/no_genre_ssim_field_when_genre_not_in_MODS.yml +0 -6822
  25. data/spec/vcr_cassettes/indexer_integration_tests/genre/solr_doc_has_genre_ssim_field_when_genre_in_MODS.yml +0 -1390
@@ -1,15 +1,27 @@
1
- require "harvestdor-indexer"
2
- require "spotlight/dor/resources/version"
1
+ require 'harvestdor-indexer'
2
+ require 'spotlight/dor/resources/version'
3
3
 
4
4
  module Spotlight
5
5
  module Dor
6
+ # Spotlight::Dor::Resources provides a Rails engine
7
+ # that is capable of harvesting and indexing resources
8
+ # from Searchworks and PURL endpoints
6
9
  module Resources
10
+ require 'spotlight/dor/indexer'
11
+ require 'spotlight/dor/resources/engine'
7
12
 
8
- require "spotlight/dor/indexer"
9
- require "spotlight/dor/resources/engine"
10
-
11
- def self.indexer
12
- @indexer ||= Spotlight::Dor::Indexer.new File.join(Rails.root, "config", "gdor.yml"), solr: Blacklight.solr_config
13
+ class <<self
14
+ def indexer
15
+ @indexer ||= Spotlight::Dor::Indexer.new gdor_config_path, solr: solr_config
16
+ end
17
+
18
+ def gdor_config_path
19
+ File.join(Rails.root, 'config', 'gdor.yml')
20
+ end
21
+
22
+ def solr_config
23
+ Blacklight.solr_config
24
+ end
13
25
  end
14
26
  end
15
27
  end
@@ -2,12 +2,13 @@ require 'spotlight/engine'
2
2
  require 'spotlight/dor/resources'
3
3
 
4
4
  module Spotlight::Dor::Resources
5
+ # :nodoc:
5
6
  class Engine < ::Rails::Engine
6
-
7
- initializer "spotlight.dor.initialize" do
7
+ initializer 'spotlight.dor.initialize' do
8
8
  Spotlight::Engine.config.resource_providers << Spotlight::Resources::Searchworks
9
9
  Spotlight::Engine.config.resource_providers << Spotlight::Resources::Purl
10
10
  Spotlight::Dor::Resources::Engine.config.parallel_options = { in_threads: 1 }
11
+ Spotlight::Dor::Resources::Engine.config.stacks_iiif_url = 'https://stacks.stanford.edu/image/iiif'
11
12
  end
12
13
  end
13
14
  end
@@ -1,7 +1,8 @@
1
1
  module Spotlight
2
2
  module Dor
3
+ # :nodoc:
3
4
  module Resources
4
- VERSION = "0.0.3"
5
+ VERSION = '0.0.4'
5
6
  end
6
7
  end
7
8
  end
@@ -1,30 +1,30 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "gdor indexing integration test", :vcr do
3
+ describe 'gdor indexing integration test', :vcr do
4
4
  let :exhibit do
5
- double(solr_data: { }, blacklight_config: Blacklight::Configuration.new)
5
+ double(solr_data: {}, blacklight_config: Blacklight::Configuration.new)
6
6
  end
7
7
 
8
8
  subject do
9
- r = Spotlight::Resources::Purl.new(url: "https://purl.stanford.edu/xf680rd3068")
9
+ r = Spotlight::Resources::Purl.new(url: 'https://purl.stanford.edu/xf680rd3068')
10
10
  allow(r).to receive(:to_global_id).and_return('x')
11
11
  allow(r).to receive(:exhibit).and_return(exhibit)
12
12
  r.to_solr.first
13
13
  end
14
14
 
15
- it "should have a doc id" do
16
- expect(subject[:id]).to eq "xf680rd3068"
15
+ it 'has a doc id' do
16
+ expect(subject[:id]).to eq 'xf680rd3068'
17
17
  end
18
18
 
19
- it "should have the gdor data" do
19
+ it 'has the gdor data' do
20
20
  expect(subject).to include :collection, :modsxml, :url_fulltext
21
21
  end
22
22
 
23
- it "should have spotlight data" do
23
+ it 'has spotlight data' do
24
24
  expect(subject).to include :spotlight_resource_id_ssim
25
25
  end
26
26
 
27
- it "should have exhibit-specific indexing" do
28
- expect(subject).to include "full_image_url_ssm"
27
+ it 'has exhibit-specific indexing' do
28
+ expect(subject).to include 'full_image_url_ssm'
29
29
  end
30
30
  end
@@ -40,13 +40,151 @@ describe Spotlight::Dor::Indexer do
40
40
  end
41
41
 
42
42
  before do
43
- # ignore noisy logs
43
+ # reduce log noise
44
44
  allow(r).to receive(:harvestdor_client)
45
45
  i = Harvestdor::Indexer.new
46
46
  i.logger.level = Logger::WARN
47
47
  allow(r).to receive(:indexer).and_return i
48
48
  end
49
49
 
50
+ describe '#add_content_metadata_fields' do
51
+ before do
52
+ allow(r).to receive(:public_xml).and_return(public_xml)
53
+
54
+ # stacks url calculations require the druid
55
+ solr_doc[:id] = fake_druid
56
+
57
+ subject.send(:add_content_metadata_fields, sdb, solr_doc)
58
+ end
59
+
60
+ context 'with a record without contentMetadata' do
61
+ let(:public_xml) do
62
+ Nokogiri::XML <<-EOF
63
+ <publicObject></publicObject>
64
+ EOF
65
+ end
66
+
67
+ it 'is blank, except for the document id' do
68
+ expect(solr_doc.except(:id)).to be_blank
69
+ end
70
+ end
71
+
72
+ context 'with a record with contentMetadata' do
73
+ let(:public_xml) do
74
+ Nokogiri::XML <<-EOF
75
+ <publicObject>
76
+ <contentMetadata type="image">
77
+ <resource id="bj356mh7176_1" sequence="1" type="image">
78
+ <label>Image 1</label>
79
+ <file id="bj356mh7176_00_0001.jp2" mimetype="image/jp2" size="56108727">
80
+ <imageData width="12967" height="22970"/>
81
+ </file>
82
+ </resource>
83
+ </contentMetadata>
84
+ </publicObject>
85
+ EOF
86
+ end
87
+
88
+ it 'indexes the declared content metadata type' do
89
+ expect(solr_doc['content_metadata_type_ssim']).to contain_exactly 'image'
90
+ end
91
+
92
+ it 'indexes the thumbnail information' do
93
+ expect(solr_doc['content_metadata_first_image_file_name_ssm']).to contain_exactly 'bj356mh7176_00_0001'
94
+ expect(solr_doc['content_metadata_first_image_width_ssm']).to contain_exactly '12967'
95
+ expect(solr_doc['content_metadata_first_image_height_ssm']).to contain_exactly '22970'
96
+ end
97
+
98
+ it 'indexes the images' do
99
+ stacks_base_url = 'https://stacks.stanford.edu/image/iiif/oo000oo0000%2Fbj356mh7176_00_0001'
100
+ expect(solr_doc['content_metadata_image_iiif_info_ssm']).to include "#{stacks_base_url}/info.json"
101
+ expect(solr_doc['thumbnail_square_url_ssm']).to include "#{stacks_base_url}/square/100,100/0/default.jpg"
102
+ expect(solr_doc['thumbnail_url_ssm']).to include "#{stacks_base_url}/full/!400,400/0/default.jpg"
103
+ expect(solr_doc['large_image_url_ssm']).to include "#{stacks_base_url}/full/pct:25/0/default.jpg"
104
+ expect(solr_doc['full_image_url_ssm']).to include "#{stacks_base_url}/full/full/0/default.jpg"
105
+ end
106
+ end
107
+ end
108
+
109
+ describe '#add_donor_tags' do
110
+ before do
111
+ allow(r).to receive(:mods).and_return(mods)
112
+ subject.send(:add_donor_tags, sdb, solr_doc)
113
+ end
114
+
115
+ context 'with a record without donor tags' do
116
+ let(:mods) do
117
+ Nokogiri::XML <<-EOF
118
+ <mods xmlns="#{Mods::MODS_NS}">
119
+ <note displayLabel="preferred citation">(not a donor tag)</note>
120
+ </mods>
121
+ EOF
122
+ end
123
+
124
+ it 'is blank' do
125
+ expect(solr_doc['donor_tags_ssim']).to be_blank
126
+ end
127
+ end
128
+
129
+ context 'with a record with donor tags' do
130
+ let(:mods) do
131
+ # e.g. from https://purl.stanford.edu/vw282gv1740
132
+ Nokogiri::XML <<-EOF
133
+ <mods xmlns="#{Mods::MODS_NS}">
134
+ <note displayLabel="Donor tags">Knowledge Systems Laboratory</note>
135
+ <note displayLabel="Donor tags">medical applications</note>
136
+ <note displayLabel="Donor tags">Publishing</note>
137
+ <note displayLabel="Donor tags">Stanford</note>
138
+ <note displayLabel="Donor tags">Stanford Computer Science Department</note>
139
+ </mods>
140
+ EOF
141
+ end
142
+
143
+ it 'extracts the donor tags' do
144
+ expect(solr_doc['donor_tags_ssim']).to contain_exactly 'Knowledge Systems Laboratory',
145
+ 'medical applications',
146
+ 'Publishing',
147
+ 'Stanford',
148
+ 'Stanford Computer Science Department'
149
+ end
150
+ end
151
+ end
152
+
153
+ describe '#add_genre' do
154
+ before do
155
+ allow(r).to receive(:mods).and_return(mods)
156
+ subject.send(:add_genre, sdb, solr_doc)
157
+ end
158
+
159
+ context 'with a record without a genre' do
160
+ let(:mods) do
161
+ Nokogiri::XML <<-EOF
162
+ <mods xmlns="#{Mods::MODS_NS}">
163
+ </mods>
164
+ EOF
165
+ end
166
+
167
+ it 'is blank' do
168
+ expect(solr_doc['genre_ssim']).to be_blank
169
+ end
170
+ end
171
+
172
+ context 'with a record with a genre' do
173
+ let(:mods) do
174
+ # e.g. from https://purl.stanford.edu/vw282gv1740
175
+ Nokogiri::XML <<-EOF
176
+ <mods xmlns="#{Mods::MODS_NS}">
177
+ <genre authority="aat" valueURI="http://vocab.getty.edu/aat/300028579">manuscripts for publication</genre>
178
+ </mods>
179
+ EOF
180
+ end
181
+
182
+ it 'extracts the genre' do
183
+ expect(solr_doc['genre_ssim']).to contain_exactly 'manuscripts for publication'
184
+ end
185
+ end
186
+ end
187
+
50
188
  describe '#add_series' do
51
189
  # example string as key, expected series name as value
52
190
  {
@@ -110,7 +248,7 @@ describe Spotlight::Dor::Indexer do
110
248
  end # each
111
249
  end # add_series
112
250
 
113
- describe "#add_box" do
251
+ describe '#add_box' do
114
252
  # example string as key, expected box name as value
115
253
  {
116
254
  # feigenbaum
@@ -147,7 +285,7 @@ describe Spotlight::Dor::Indexer do
147
285
  allow(r).to receive(:mods).and_return(mods_loc_phys_loc)
148
286
  subject.send(:add_box, sdb, solr_doc)
149
287
  end
150
- it "has the expected box name '#{expected}'" do
288
+ it "has the expected box label '#{expected}'" do
151
289
  expect(solr_doc['box_ssi']).to eq expected
152
290
  end
153
291
  end
@@ -156,7 +294,7 @@ describe Spotlight::Dor::Indexer do
156
294
  allow(r).to receive(:mods).and_return(mods_rel_item_loc_phys_loc)
157
295
  subject.send(:add_box, sdb, solr_doc)
158
296
  end
159
- it "has the expected box name '#{expected}'" do
297
+ it "has the expected box label '#{expected}'" do
160
298
  expect(solr_doc['box_ssi']).to eq expected
161
299
  end
162
300
  end
@@ -166,7 +304,7 @@ describe Spotlight::Dor::Indexer do
166
304
  allow(r).to receive(:mods).and_return(mods_loc_multiple_phys_loc)
167
305
  subject.send(:add_box, sdb, solr_doc)
168
306
  end
169
- it "has the expected series name '#{expected}'" do
307
+ it "has the expected box label '#{expected}'" do
170
308
  expect(solr_doc['box_ssi']).to eq expected
171
309
  end
172
310
  end
@@ -213,7 +351,7 @@ describe Spotlight::Dor::Indexer do
213
351
  allow(r).to receive(:mods).and_return(mods_loc_phys_loc)
214
352
  subject.send(:add_folder, sdb, solr_doc)
215
353
  end
216
- it "has the expected folder name '#{expected}'" do
354
+ it "has the expected folder label '#{expected}'" do
217
355
  expect(solr_doc['folder_ssi']).to eq expected
218
356
  end
219
357
  end
@@ -222,7 +360,7 @@ describe Spotlight::Dor::Indexer do
222
360
  allow(r).to receive(:mods).and_return(mods_rel_item_loc_phys_loc)
223
361
  subject.send(:add_folder, sdb, solr_doc)
224
362
  end
225
- it "has the expected folder name '#{expected}'" do
363
+ it "has the expected folder label '#{expected}'" do
226
364
  expect(solr_doc['folder_ssi']).to eq expected
227
365
  end
228
366
  end
@@ -232,7 +370,7 @@ describe Spotlight::Dor::Indexer do
232
370
  allow(r).to receive(:mods).and_return(mods_loc_multiple_phys_loc)
233
371
  subject.send(:add_folder, sdb, solr_doc)
234
372
  end
235
- it "has the expected series name '#{expected}'" do
373
+ it "has the expected folder label '#{expected}'" do
236
374
  expect(solr_doc['folder_ssi']).to eq expected
237
375
  end
238
376
  end
@@ -240,6 +378,64 @@ describe Spotlight::Dor::Indexer do
240
378
  end # each
241
379
  end # add_folder
242
380
 
381
+ # rubocop:disable Metrics/LineLength
382
+ describe '#add_location' do
383
+ # example string as key, expected box name as value
384
+ {
385
+ # feigenbaum
386
+ 'Call Number: SC0340, Accession 2005-101, Box : 1, Folder: 1': 'Call Number: SC0340, Accession 2005-101, Box : 1, Folder: 1',
387
+ 'Call Number: SC0340, Accession 2005-101': 'Call Number: SC0340, Accession 2005-101',
388
+ 'SC0340, 1986-052, Box 18': 'SC0340, 1986-052, Box 18',
389
+ 'SC0340, Accession 2005-101, Box 18': 'SC0340, Accession 2005-101, Box 18',
390
+ 'SC0340': nil,
391
+ 'SC0340, Accession 1986-052': 'SC0340, Accession 1986-052',
392
+ 'Stanford University. Libraries. Department of Special Collections and University Archives': nil,
393
+ # shpc (actually in <relatedItem><location><physicalLocation>)
394
+ 'Series Biographical Photographs | Box 42 | Folder Abbot, Nathan': 'Series Biographical Photographs | Box 42 | Folder Abbot, Nathan',
395
+ 'Series General Photographs | Box 42 | Folder Administration building--Outer Quad': 'Series General Photographs | Box 42 | Folder Administration building--Outer Quad',
396
+ # menuez
397
+ 'MSS Photo 451, Series 1, Box 32, Folder 11, Sleeve 32-11-2, Frame B32-F11-S2-6': 'MSS Photo 451, Series 1, Box 32, Folder 11, Sleeve 32-11-2, Frame B32-F11-S2-6',
398
+ 'Series 1, Box 10, Folder 8': 'Series 1, Box 10, Folder 8',
399
+ # fuller
400
+ 'Collection: M1090 , Series: 1 , Box: 5 , Folder: 42': 'Collection: M1090 , Series: 1 , Box: 5 , Folder: 42',
401
+ # hummel (actually in <relatedItem><location><physicalLocation>)
402
+ 'Box 42 | Folder 3': 'Box 42 | Folder 3',
403
+ 'Flat-box 228 | Volume 1': 'Flat-box 228 | Volume 1'
404
+ }.each do |example, expected|
405
+ describe "for example '#{example}'" do
406
+ let(:example) { example }
407
+ context 'in /location/physicalLocation' do
408
+ before do
409
+ allow(r).to receive(:mods).and_return(mods_loc_phys_loc)
410
+ subject.send(:add_location, sdb, solr_doc)
411
+ end
412
+ it "has the expected location '#{expected}'" do
413
+ expect(solr_doc['location_ssi']).to eq expected
414
+ end
415
+ end
416
+ context 'in /relatedItem/location/physicalLocation' do
417
+ before do
418
+ allow(r).to receive(:mods).and_return(mods_rel_item_loc_phys_loc)
419
+ subject.send(:add_location, sdb, solr_doc)
420
+ end
421
+ it "has the expected location '#{expected}'" do
422
+ expect(solr_doc['location_ssi']).to eq expected
423
+ end
424
+ end
425
+ context 'with multiple physicalLocation elements' do
426
+ before do
427
+ allow(r).to receive(:mods).and_return(mods_loc_multiple_phys_loc)
428
+ subject.send(:add_location, sdb, solr_doc)
429
+ end
430
+ it "has the expected location '#{expected}'" do
431
+ expect(solr_doc['location_ssi']).to eq expected
432
+ end
433
+ end
434
+ end # for example
435
+ end # each
436
+ end # add_location
437
+ # rubocop:enable Metrics/LineLength
438
+
243
439
  let(:mods_note_plain) do
244
440
  Nokogiri::XML <<-EOF
245
441
  <mods xmlns="#{Mods::MODS_NS}">
@@ -254,9 +450,11 @@ describe Spotlight::Dor::Indexer do
254
450
  </mods>
255
451
  EOF
256
452
  end
257
- describe "#add_folder_name" do
453
+
454
+ # rubocop:disable Metrics/LineLength
455
+ describe '#add_folder_name' do
258
456
  # example string as key, expected folder name as value
259
- # all from feigenbaum (or based on feigenbaum), as that is only coll
457
+ # all from feigenbaum (or based on feigenbaum), as that is only coll with this data
260
458
  {
261
459
  'Call Number: SC0340, Accession: 1986-052, Box: 20, Folder: 40, Title: S': 'S',
262
460
  'Call Number: SC0340, Accession: 1986-052, Box: 54, Folder: 25, Title: Balzer': 'Balzer',
@@ -299,4 +497,5 @@ describe Spotlight::Dor::Indexer do
299
497
  end # for example
300
498
  end # each
301
499
  end # add_folder_name
500
+ # rubocop:enable Metrics/LineLength
302
501
  end
@@ -2,13 +2,13 @@ require 'spec_helper'
2
2
 
3
3
  describe Spotlight::Resources::Purl do
4
4
  let :exhibit do
5
- double(solr_data: { }, blacklight_config: Blacklight::Configuration.new)
5
+ double(solr_data: {}, blacklight_config: Blacklight::Configuration.new)
6
6
  end
7
7
  let :blacklight_solr do
8
8
  double
9
9
  end
10
10
 
11
- subject { Spotlight::Resources::Purl.new url: "http://purl.stanford.edu/xf680rd3068" }
11
+ subject { described_class.new url: 'http://purl.stanford.edu/xf680rd3068' }
12
12
 
13
13
  before do
14
14
  allow(subject).to receive(:exhibit).and_return(exhibit)
@@ -16,98 +16,104 @@ describe Spotlight::Resources::Purl do
16
16
  allow(subject).to receive(:to_global_id).and_return('x')
17
17
  end
18
18
 
19
- describe ".can_provide?" do
20
- subject { Spotlight::Resources::Purl }
21
- it "should be able to provide any purl URL" do
22
- expect(subject.can_provide?(double(url: "https://purl.stanford.edu/xyz"))).to eq true
23
- expect(subject.can_provide?(double(url: "http://purl.stanford.edu/xyz"))).to eq true
19
+ describe '.can_provide?' do
20
+ subject { described_class }
21
+ it 'is true for a PURL URL' do
22
+ expect(subject.can_provide?(double(url: 'https://purl.stanford.edu/xyz'))).to eq true
23
+ expect(subject.can_provide?(double(url: 'http://purl.stanford.edu/xyz'))).to eq true
24
+ end
25
+
26
+ it 'is false other URLs' do
27
+ expect(subject.can_provide?(double(url: 'https://example.com/xyz'))).to eq false
24
28
  end
25
29
  end
26
30
 
27
- describe "#doc_id" do
28
- it "should be able to extract DRUIDs from a PURL url" do
29
- subject.url = "http://purl.stanford.edu/xyz"
30
- expect(subject.doc_id).to eq "xyz"
31
+ describe '#doc_id' do
32
+ it 'extracts DRUIDs from a PURL url' do
33
+ subject.url = 'http://purl.stanford.edu/xyz'
34
+ expect(subject.doc_id).to eq 'xyz'
31
35
  end
32
36
 
33
- it "should be able to extract DRUIDs from a PURL format url" do
34
- subject.url = "http://purl.stanford.edu/xf680rd3068.xml"
35
- expect(subject.doc_id).to eq "xf680rd3068"
37
+ it 'extracts DRUIDs from a PURL format url' do
38
+ subject.url = 'http://purl.stanford.edu/xf680rd3068.xml'
39
+ expect(subject.doc_id).to eq 'xf680rd3068'
36
40
  end
37
41
 
38
- it "should be able to extract DRUIDs from a PURL's viewer url" do
39
- subject.url = "http://purl.stanford.edu/xf680rd3068#image/1/small"
40
- expect(subject.doc_id).to eq "xf680rd3068"
42
+ it "extracts DRUIDs from a PURL's viewer url" do
43
+ subject.url = 'http://purl.stanford.edu/xf680rd3068#image/1/small'
44
+ expect(subject.doc_id).to eq 'xf680rd3068'
41
45
  end
42
46
  end
43
47
 
44
- describe "#resource" do
45
- it "should be a Harvestdor::Indexer resource" do
48
+ describe '#resource' do
49
+ it 'is a Harvestdor::Indexer resource' do
46
50
  expect(subject.resource).to be_a_kind_of Harvestdor::Indexer::Resource
47
51
  end
48
52
 
49
- it "should have the correct druid" do
50
- expect(subject.resource.druid).to eq "xf680rd3068"
53
+ it 'has the correct druid' do
54
+ expect(subject.resource.druid).to eq 'xf680rd3068'
51
55
  end
52
56
 
53
- it "should have the correct indexer" do
57
+ it 'has the correct indexer' do
54
58
  expect(subject.resource.indexer).to eq Spotlight::Dor::Resources.indexer.harvestdor
55
59
  end
56
60
  end
57
61
 
58
- describe "#reindex" do
62
+ describe '#reindex' do
59
63
  before do
60
- allow(Spotlight::Dor::Resources.indexer).to receive(:solr_document).and_return({upstream: true})
64
+ allow(Spotlight::Dor::Resources.indexer).to receive(:solr_document).and_return(upstream: true)
61
65
  allow(subject.resource).to receive(:collection?).and_return(false)
62
66
  end
63
67
 
64
- it "should add a document to solr" do
65
- solr_data = [{spotlight_resource_id_ssim: nil, spotlight_resource_type_ssim: "spotlight/resources/purls", upstream: true}]
66
- expect(blacklight_solr).to receive(:update).with({params: {commitWithin: 500}, data: solr_data.to_json, headers: {"Content-Type" => "application/json"}})
68
+ it 'adds a document to solr' do
69
+ solr_data = [{ spotlight_resource_id_ssim: nil, spotlight_resource_type_ssim: 'spotlight/resources/purls', upstream: true }]
70
+ expect(blacklight_solr).to receive(:update).with(params: { commitWithin: 500 },
71
+ data: solr_data.to_json,
72
+ headers: { 'Content-Type' => 'application/json' })
67
73
  expect(subject).to receive(:update_index_time!)
68
74
  subject.reindex
69
75
  end
70
76
  end
71
77
 
72
- describe "#to_solr" do
78
+ describe '#to_solr' do
73
79
  before do
74
80
  allow(Spotlight::Dor::Resources.indexer).to receive(:solr_document)
75
81
  end
76
- context "with a collection" do
82
+ context 'with a collection' do
77
83
  before do
78
84
  allow(subject.resource).to receive(:collection?).and_return(true)
79
85
  end
80
86
 
81
- it "should provide a solr document for the collection" do
87
+ it 'provides a solr document for the collection' do
82
88
  allow(subject.resource).to receive(:items).and_return([])
83
- expect(Spotlight::Dor::Resources.indexer).to receive(:solr_document).with(subject.resource).and_return({upstream: true})
89
+ expect(Spotlight::Dor::Resources.indexer).to receive(:solr_document).with(subject.resource).and_return(upstream: true)
84
90
  expect(subject.to_solr.first).to include :upstream, :spotlight_resource_id_ssim, :spotlight_resource_type_ssim
85
91
  end
86
92
 
87
- it "should provide a solr document for the items too" do
93
+ it 'provides a solr document for the items too' do
88
94
  item = double
89
95
  allow(subject.resource).to receive(:items).and_return([item])
90
- expect(Spotlight::Dor::Resources.indexer).to receive(:solr_document).with(subject.resource).and_return({collection: true})
91
- expect(Spotlight::Dor::Resources.indexer).to receive(:solr_document).with(item).and_return({item: true})
96
+ expect(Spotlight::Dor::Resources.indexer).to receive(:solr_document).with(subject.resource).and_return(collection: true)
97
+ expect(Spotlight::Dor::Resources.indexer).to receive(:solr_document).with(item).and_return(item: true)
92
98
  solr_doc = subject.to_solr.to_a
93
99
  expect(solr_doc.first).to include :collection
94
100
  expect(solr_doc.last).to include :item
95
101
  end
96
102
  end
97
103
 
98
- context "with a single item" do
104
+ context 'with a single item' do
99
105
  before do
100
106
  allow(subject.resource).to receive(:collection?).and_return(false)
101
107
  end
102
108
 
103
- it "should provide a solr document for the resource" do
104
- expect(Spotlight::Dor::Resources.indexer).to receive(:solr_document).with(subject.resource).and_return({upstream: true})
109
+ it 'provides a solr document for the resource' do
110
+ expect(Spotlight::Dor::Resources.indexer).to receive(:solr_document).with(subject.resource).and_return(upstream: true)
105
111
  expect(subject.to_solr.first).to include :upstream, :spotlight_resource_id_ssim, :spotlight_resource_type_ssim
106
112
  end
107
113
 
108
- it "should index outside the context of an exhibit" do
114
+ it 'indexs outside the context of an exhibit' do
109
115
  allow(subject).to receive(:exhibit).and_return(nil)
110
- expect(Spotlight::Dor::Resources.indexer).to receive(:solr_document).with(subject.resource).and_return({upstream: true})
116
+ expect(Spotlight::Dor::Resources.indexer).to receive(:solr_document).with(subject.resource).and_return(upstream: true)
111
117
  expect(subject.to_solr.first).to include :upstream, :spotlight_resource_id_ssim, :spotlight_resource_type_ssim
112
118
  end
113
119
  end