active-fedora 9.9.1 → 9.10.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -2
  3. data/.travis.yml +2 -6
  4. data/active-fedora.gemspec +9 -6
  5. data/lib/active_fedora.rb +31 -15
  6. data/lib/active_fedora/associations.rb +1 -1
  7. data/lib/active_fedora/associations/association.rb +6 -2
  8. data/lib/active_fedora/associations/belongs_to_association.rb +0 -10
  9. data/lib/active_fedora/associations/builder/association.rb +85 -12
  10. data/lib/active_fedora/associations/builder/belongs_to.rb +3 -1
  11. data/lib/active_fedora/associations/builder/collection_association.rb +4 -3
  12. data/lib/active_fedora/associations/builder/contains.rb +7 -2
  13. data/lib/active_fedora/associations/builder/directly_contains.rb +7 -3
  14. data/lib/active_fedora/associations/builder/directly_contains_one.rb +8 -4
  15. data/lib/active_fedora/associations/builder/has_and_belongs_to_many.rb +6 -2
  16. data/lib/active_fedora/associations/builder/has_many.rb +6 -2
  17. data/lib/active_fedora/associations/builder/indirectly_contains.rb +7 -3
  18. data/lib/active_fedora/associations/builder/property.rb +7 -2
  19. data/lib/active_fedora/associations/builder/singular_association.rb +3 -1
  20. data/lib/active_fedora/associations/builder/singular_property.rb +3 -1
  21. data/lib/active_fedora/associations/collection_association.rb +9 -5
  22. data/lib/active_fedora/associations/collection_proxy.rb +1 -1
  23. data/lib/active_fedora/associations/contained_finder.rb +1 -2
  24. data/lib/active_fedora/associations/directly_contains_one_association.rb +1 -1
  25. data/lib/active_fedora/associations/has_many_association.rb +1 -5
  26. data/lib/active_fedora/associations/rdf.rb +1 -20
  27. data/lib/active_fedora/attached_files.rb +1 -1
  28. data/lib/active_fedora/attribute_methods.rb +18 -0
  29. data/lib/active_fedora/attributes.rb +1 -1
  30. data/lib/active_fedora/autosave_association.rb +8 -12
  31. data/lib/active_fedora/base.rb +0 -2
  32. data/lib/active_fedora/caching_connection.rb +1 -1
  33. data/lib/active_fedora/default_model_mapper.rb +24 -0
  34. data/lib/active_fedora/fedora.rb +1 -1
  35. data/lib/active_fedora/file/attributes.rb +4 -5
  36. data/lib/active_fedora/identifiable.rb +5 -0
  37. data/lib/active_fedora/indexing.rb +13 -7
  38. data/lib/active_fedora/indexing_service.rb +4 -4
  39. data/lib/active_fedora/ldp_resource.rb +1 -0
  40. data/lib/active_fedora/model.rb +18 -16
  41. data/lib/active_fedora/model_classifier.rb +77 -0
  42. data/lib/active_fedora/nested_attributes.rb +145 -18
  43. data/lib/active_fedora/persistence.rb +1 -1
  44. data/lib/active_fedora/predicates.rb +3 -0
  45. data/lib/active_fedora/qualified_dublin_core_datastream.rb +1 -1
  46. data/lib/active_fedora/query_result_builder.rb +12 -28
  47. data/lib/active_fedora/querying.rb +1 -1
  48. data/lib/active_fedora/rdf/datastream_indexing.rb +1 -1
  49. data/lib/active_fedora/reflection.rb +15 -7
  50. data/lib/active_fedora/relation.rb +17 -0
  51. data/lib/active_fedora/relation/calculations.rb +1 -5
  52. data/lib/active_fedora/relation/finder_methods.rb +39 -26
  53. data/lib/active_fedora/scoping.rb +5 -0
  54. data/lib/active_fedora/scoping/default.rb +113 -0
  55. data/lib/active_fedora/scoping/named.rb +11 -3
  56. data/lib/active_fedora/simple_datastream.rb +1 -1
  57. data/lib/active_fedora/solr_hit.rb +71 -0
  58. data/lib/active_fedora/solr_instance_loader.rb +12 -36
  59. data/lib/active_fedora/solr_query_builder.rb +20 -25
  60. data/lib/active_fedora/solr_service.rb +24 -13
  61. data/lib/active_fedora/type.rb +8 -0
  62. data/lib/active_fedora/type/boolean.rb +23 -0
  63. data/lib/active_fedora/type/value.rb +118 -0
  64. data/lib/active_fedora/validations.rb +14 -5
  65. data/lib/active_fedora/version.rb +1 -1
  66. data/lib/active_fedora/versionable.rb +8 -7
  67. data/spec/config_helper.rb +0 -5
  68. data/spec/integration/associations_spec.rb +5 -5
  69. data/spec/integration/base_spec.rb +4 -4
  70. data/spec/integration/bug_spec.rb +0 -1
  71. data/spec/integration/full_featured_model_spec.rb +4 -4
  72. data/spec/integration/has_and_belongs_to_many_associations_spec.rb +1 -1
  73. data/spec/integration/has_many_associations_spec.rb +30 -1
  74. data/spec/integration/indirect_container_spec.rb +1 -1
  75. data/spec/integration/nested_attribute_spec.rb +6 -0
  76. data/spec/integration/ntriples_datastream_spec.rb +4 -4
  77. data/spec/integration/om_datastream_spec.rb +1 -1
  78. data/spec/integration/relation_delegation_spec.rb +1 -1
  79. data/spec/integration/scoped_query_spec.rb +12 -12
  80. data/spec/integration/solr_hit_spec.rb +52 -0
  81. data/spec/samples/hydra-mods_article_datastream.rb +2 -2
  82. data/spec/spec_helper.rb +5 -9
  83. data/spec/unit/active_fedora_spec.rb +0 -26
  84. data/spec/unit/base_spec.rb +20 -0
  85. data/spec/unit/builder/has_and_belongs_to_many_spec.rb +2 -3
  86. data/spec/unit/callback_spec.rb +3 -8
  87. data/spec/unit/default_model_mapper_spec.rb +39 -0
  88. data/spec/unit/finder_methods_spec.rb +30 -6
  89. data/spec/unit/has_many_association_spec.rb +23 -1
  90. data/spec/unit/indexing_spec.rb +17 -3
  91. data/spec/unit/model_classifier_spec.rb +49 -0
  92. data/spec/unit/model_spec.rb +0 -9
  93. data/spec/unit/ntriples_datastream_spec.rb +16 -16
  94. data/spec/unit/om_datastream_spec.rb +7 -7
  95. data/spec/unit/qualified_dublin_core_datastream_spec.rb +1 -1
  96. data/spec/unit/query_result_builder_spec.rb +4 -10
  97. data/spec/unit/query_spec.rb +28 -28
  98. data/spec/unit/rdf/indexing_service_spec.rb +16 -16
  99. data/spec/unit/scoping_spec.rb +67 -0
  100. data/spec/unit/simple_datastream_spec.rb +2 -2
  101. data/spec/unit/solr_config_options_spec.rb +29 -32
  102. data/spec/unit/solr_hit_spec.rb +58 -0
  103. data/spec/unit/solr_query_builder_spec.rb +9 -1
  104. data/spec/unit/solr_service_spec.rb +19 -3
  105. metadata +73 -17
  106. data/spec/support/freeze_mocks.rb +0 -12
@@ -7,8 +7,8 @@ describe ActiveFedora::Base do
7
7
  end
8
8
  end
9
9
  end
10
- let(:sort_query) { ActiveFedora::SolrQueryBuilder.solr_name("system_create", :stored_sortable, type: :date) + ' asc' }
11
- let(:model_query) { "_query_:\"{!raw f=has_model_ssim}SpecModel::Basic\"" }
10
+ let(:sort_query) { ActiveFedora.index_field_mapper.solr_name("system_create", :stored_sortable, type: :date) + ' asc' }
11
+ let(:model_query) { "_query_:\"{!field f=has_model_ssim}SpecModel::Basic\"" }
12
12
 
13
13
  after(:all) do
14
14
  Object.send(:remove_const, :SpecModel)
@@ -77,9 +77,9 @@ describe ActiveFedora::Base do
77
77
  let(:relation) { ActiveFedora::Relation.new(SpecModel::Basic) }
78
78
  let(:solr) { ActiveFedora::SolrService.instance.conn }
79
79
  let(:expected_query) { "#{model_query} AND " \
80
- "_query_:\"{!raw f=foo}bar\" AND " \
81
- "_query_:\"{!raw f=baz}quix\" AND " \
82
- "_query_:\"{!raw f=baz}quack\"" }
80
+ "_query_:\"{!field f=foo}bar\" AND " \
81
+ "_query_:\"{!field f=baz}quix\" AND " \
82
+ "_query_:\"{!field f=baz}quack\"" }
83
83
  let(:expected_params) { { params: { sort: [sort_query], fl: 'id', q: expected_query, qt: 'standard' } } }
84
84
  let(:expected_sort_params) { { params: { sort: ["title_t desc"], fl: 'id', q: expected_query, qt: 'standard' } } }
85
85
  let(:mock_docs) { [{ "id" => "changeme:30" }, { "id" => "changeme:22" }] }
@@ -136,9 +136,9 @@ describe ActiveFedora::Base do
136
136
  describe "with conditions" do
137
137
  let(:solr) { ActiveFedora::SolrService.instance.conn }
138
138
  let(:expected_query) { "#{model_query} AND " \
139
- "_query_:\"{!raw f=foo}bar\" AND " \
140
- "_query_:\"{!raw f=baz}quix\" AND " \
141
- "_query_:\"{!raw f=baz}quack\"" }
139
+ "_query_:\"{!field f=foo}bar\" AND " \
140
+ "_query_:\"{!field f=baz}quix\" AND " \
141
+ "_query_:\"{!field f=baz}quack\"" }
142
142
  let(:expected_params) { { params: { sort: [sort_query], fl: 'id', q: expected_query, qt: 'standard' } } }
143
143
  let(:mock_docs) { [{ "id" => "changeme-30" }, { "id" => "changeme-22" }] }
144
144
 
@@ -153,13 +153,13 @@ describe ActiveFedora::Base do
153
153
  end
154
154
  end
155
155
 
156
- describe '#find_in_batches' do
156
+ describe '#search_in_batches' do
157
157
  describe "with conditions hash" do
158
158
  let(:solr) { ActiveFedora::SolrService.instance.conn }
159
159
  let(:expected_query) { "#{model_query} AND " \
160
- "_query_:\"{!raw f=foo}bar\" AND " \
161
- "_query_:\"{!raw f=baz}quix\" AND " \
162
- "_query_:\"{!raw f=baz}quack\"" }
160
+ "_query_:\"{!field f=foo}bar\" AND " \
161
+ "_query_:\"{!field f=baz}quix\" AND " \
162
+ "_query_:\"{!field f=baz}quack\"" }
163
163
  let(:expected_params) { { params: { sort: [sort_query], fl: 'id', q: expected_query, qt: 'standard' } } }
164
164
  let(:mock_docs) { double('docs') }
165
165
 
@@ -168,7 +168,7 @@ describe ActiveFedora::Base do
168
168
  expect(solr).to receive(:paginate).with(1, 1002, 'select', expected_params).and_return('response' => { 'docs' => mock_docs })
169
169
  yielded = double("yielded method")
170
170
  expect(yielded).to receive(:run).with(mock_docs)
171
- SpecModel::Basic.find_in_batches({ foo: 'bar', baz: ['quix', 'quack'] }, batch_size: 1002, fl: 'id') { |group| yielded.run group }
171
+ SpecModel::Basic.search_in_batches({ foo: 'bar', baz: ['quix', 'quack'] }, batch_size: 1002, fl: 'id') { |group| yielded.run group }
172
172
  end
173
173
  end
174
174
  end
@@ -177,22 +177,22 @@ describe ActiveFedora::Base do
177
177
  let(:mock_result) { { 'response' => { 'numFound' => 7 } } }
178
178
 
179
179
  it "returns a count" do
180
- expect(ActiveFedora::SolrService).to receive(:query)
181
- .with(model_query, rows: 0, raw: true)
180
+ expect(ActiveFedora::SolrService).to receive(:get)
181
+ .with(model_query, rows: 0)
182
182
  .and_return(mock_result)
183
183
  expect(SpecModel::Basic.count).to eq 7
184
184
  end
185
185
 
186
186
  it "allows conditions" do
187
- expect(ActiveFedora::SolrService).to receive(:query)
188
- .with("#{model_query} AND (foo:bar)", rows: 0, raw: true)
187
+ expect(ActiveFedora::SolrService).to receive(:get)
188
+ .with("#{model_query} AND (foo:bar)", rows: 0)
189
189
  .and_return(mock_result)
190
190
  expect(SpecModel::Basic.count(conditions: 'foo:bar')).to eq 7
191
191
  end
192
192
 
193
193
  it "counts without a class specified" do
194
- expect(ActiveFedora::SolrService).to receive(:query)
195
- .with("(foo:bar)", rows: 0, raw: true)
194
+ expect(ActiveFedora::SolrService).to receive(:get)
195
+ .with("(foo:bar)", rows: 0)
196
196
  .and_return(mock_result)
197
197
  expect(described_class.count(conditions: 'foo:bar')).to eq 7
198
198
  end
@@ -240,10 +240,10 @@ describe ActiveFedora::Base do
240
240
  end
241
241
  end
242
242
 
243
- describe '#find_with_conditions' do
243
+ describe '#search_with_conditions' do
244
244
  let(:mock_result) { double('Result') }
245
245
  let(:klass) { SpecModel::Basic }
246
- subject { klass.find_with_conditions(conditions) }
246
+ subject { klass.search_with_conditions(conditions) }
247
247
 
248
248
  before do
249
249
  expect(ActiveFedora::SolrService).to receive(:query)
@@ -252,9 +252,9 @@ describe ActiveFedora::Base do
252
252
 
253
253
  context "with a hash of conditions" do
254
254
  let(:expected_query) { "#{model_query} AND " \
255
- "_query_:\"{!raw f=foo}bar\" AND " \
256
- "_query_:\"{!raw f=baz}quix\" AND " \
257
- "_query_:\"{!raw f=baz}quack\"" }
255
+ "_query_:\"{!field f=foo}bar\" AND " \
256
+ "_query_:\"{!field f=baz}quix\" AND " \
257
+ "_query_:\"{!field f=baz}quack\"" }
258
258
  let(:conditions) { { foo: 'bar', baz: ['quix', 'quack'] } }
259
259
 
260
260
  it "makes a query to solr and returns the results" do
@@ -264,9 +264,9 @@ describe ActiveFedora::Base do
264
264
 
265
265
  context "with quotes in the params" do
266
266
  let(:expected_query) { "#{model_query} AND " \
267
- "_query_:\"{!raw f=foo}9\\\" Nails\" AND " \
268
- "_query_:\"{!raw f=baz}7\\\" version\" AND " \
269
- "_query_:\"{!raw f=baz}quack\"" }
267
+ "_query_:\"{!field f=foo}9\\\" Nails\" AND " \
268
+ "_query_:\"{!field f=baz}7\\\" version\" AND " \
269
+ "_query_:\"{!field f=baz}quack\"" }
270
270
  let(:conditions) { { foo: '9" Nails', baz: ['7" version', 'quack'] } }
271
271
 
272
272
  it "escapes quotes" do
@@ -279,7 +279,7 @@ describe ActiveFedora::Base do
279
279
 
280
280
  context "with a hash" do
281
281
  let(:conditions) { { baz: 'quack' } }
282
- let(:expected_query) { "_query_:\"{!raw f=baz}quack\"" }
282
+ let(:expected_query) { "_query_:\"{!field f=baz}quack\"" }
283
283
  it "doesn't use the class if it's called on AF:Base " do
284
284
  expect(subject).to eq mock_result
285
285
  end
@@ -47,25 +47,25 @@ describe ActiveFedora::RDF::IndexingService do
47
47
  describe "#generate_solr_document" do
48
48
  subject { indexer.generate_solr_document(lambda { |key| "solr_rdf__#{key}" }) }
49
49
  it "returns the right fields" do
50
- expect(subject.keys).to include(ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__related_url", type: :string),
51
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__publisher", type: :string),
52
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__publisher", :sortable),
53
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__publisher", :facetable),
54
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__created", :sortable, type: :date),
55
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__created", :displayable),
56
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__title", type: :string),
57
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__title", :sortable),
58
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__based_near", type: :string),
59
- ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__based_near", :facetable))
50
+ expect(subject.keys).to include(ActiveFedora.index_field_mapper.solr_name("solr_rdf__related_url", type: :string),
51
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__publisher", type: :string),
52
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__publisher", :sortable),
53
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__publisher", :facetable),
54
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__created", :sortable, type: :date),
55
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__created", :displayable),
56
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__title", type: :string),
57
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__title", :sortable),
58
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__based_near", type: :string),
59
+ ActiveFedora.index_field_mapper.solr_name("solr_rdf__based_near", :facetable))
60
60
  end
61
61
 
62
62
  it "returns the right values" do
63
- expect(subject[ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__related_url", type: :string)]).to eq ["http://example.org/blogtastic/"]
64
- expect(subject[ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__based_near", type: :string)]).to eq ["Tacoma, WA", "Renton, WA"]
65
- expect(subject[ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__based_near", :facetable)]).to eq ["Tacoma, WA", "Renton, WA"]
66
- expect(subject[ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__publisher", type: :string)]).to eq ["Bob's Blogtastic Publishing"]
67
- expect(subject[ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__publisher", :sortable)]).to eq "Bob's Blogtastic Publishing"
68
- expect(subject[ActiveFedora::SolrQueryBuilder.solr_name("solr_rdf__publisher", :facetable)]).to eq ["Bob's Blogtastic Publishing"]
63
+ expect(subject[ActiveFedora.index_field_mapper.solr_name("solr_rdf__related_url", type: :string)]).to eq ["http://example.org/blogtastic/"]
64
+ expect(subject[ActiveFedora.index_field_mapper.solr_name("solr_rdf__based_near", type: :string)]).to eq ["Tacoma, WA", "Renton, WA"]
65
+ expect(subject[ActiveFedora.index_field_mapper.solr_name("solr_rdf__based_near", :facetable)]).to eq ["Tacoma, WA", "Renton, WA"]
66
+ expect(subject[ActiveFedora.index_field_mapper.solr_name("solr_rdf__publisher", type: :string)]).to eq ["Bob's Blogtastic Publishing"]
67
+ expect(subject[ActiveFedora.index_field_mapper.solr_name("solr_rdf__publisher", :sortable)]).to eq "Bob's Blogtastic Publishing"
68
+ expect(subject[ActiveFedora.index_field_mapper.solr_name("solr_rdf__publisher", :facetable)]).to eq ["Bob's Blogtastic Publishing"]
69
69
  end
70
70
  end
71
71
 
@@ -0,0 +1,67 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveFedora::Scoping::Default do
4
+ describe "when default_scope is overridden" do
5
+ before do
6
+ class Book < ActiveFedora::Base
7
+ property :published, predicate: ::RDF::Vocab::EBUCore.pubStatus do |index|
8
+ index.as :symbol
9
+ end
10
+
11
+ def self.default_scope
12
+ where published_ssim: 'true'
13
+ end
14
+ end
15
+
16
+ Book.destroy_all
17
+ Book.create!(published: [true])
18
+ Book.create!(published: [true])
19
+ Book.create!(published: [false])
20
+ end
21
+
22
+ after do
23
+ Object.send(:remove_const, :Book)
24
+ end
25
+
26
+ it "returns only the scoped records" do
27
+ expect(Book.all.size).to eq 2
28
+ end
29
+
30
+ it "returns all the records" do
31
+ Book.unscoped do
32
+ expect(Book.all.size).to eq 3
33
+ end
34
+ end
35
+ end
36
+
37
+ describe "when default_scope is called" do
38
+ before do
39
+ class Book < ActiveFedora::Base
40
+ property :published, predicate: ::RDF::Vocab::EBUCore.pubStatus do |index|
41
+ index.as :symbol
42
+ end
43
+
44
+ default_scope -> { where published_ssim: 'true' }
45
+ end
46
+
47
+ Book.destroy_all
48
+ Book.create!(published: [true])
49
+ Book.create!(published: [true])
50
+ Book.create!(published: [false])
51
+ end
52
+
53
+ after do
54
+ Object.send(:remove_const, :Book)
55
+ end
56
+
57
+ it "returns only the scoped records" do
58
+ expect(Book.all.size).to eq 2
59
+ end
60
+
61
+ it "returns all the records" do
62
+ Book.unscoped do
63
+ expect(Book.all.size).to eq 3
64
+ end
65
+ end
66
+ end
67
+ end
@@ -54,8 +54,8 @@ describe ActiveFedora::SimpleDatastream do
54
54
  describe "#to_solr" do
55
55
  it "has title" do
56
56
  solr = @test_ds.to_solr
57
- expect(solr[ActiveFedora::SolrQueryBuilder.solr_name('publisher', type: :string)]).to eq "publisher1"
58
- expect(solr[ActiveFedora::SolrQueryBuilder.solr_name('creation_date', type: :date)]).to eq "2012-01-15"
57
+ expect(solr[ActiveFedora.index_field_mapper.solr_name('publisher', type: :string)]).to eq "publisher1"
58
+ expect(solr[ActiveFedora.index_field_mapper.solr_name('creation_date', type: :date)]).to eq "2012-01-15"
59
59
  end
60
60
  end
61
61
 
@@ -12,52 +12,49 @@ describe ActiveFedora do
12
12
  @test_object = ActiveFedora::Base.new
13
13
  end
14
14
 
15
- describe "SOLR_DOCUMENT_ID" do
16
- before(:all) do
17
- SOLR_DOCUMENT_ID = "MY_SAMPLE_ID".freeze
18
- end
19
- after(:all) do
20
- SOLR_DOCUMENT_ID = "id".freeze
15
+ describe ".id_field" do
16
+ let(:field) { "MY_SAMPLE_ID".freeze }
17
+ before do
18
+ allow(described_class).to receive(:id_field).and_return(field)
21
19
  end
20
+
22
21
  it "is used by ActiveFedora::Base.to_solr" do
23
22
  allow(@test_object).to receive(:id).and_return('changeme:123')
24
- SOLR_DOCUMENT_ID = "MY_SAMPLE_ID".freeze
25
- expect(@test_object.to_solr[SOLR_DOCUMENT_ID.to_sym]).to eq 'changeme:123'
23
+ expect(@test_object.to_solr[field.to_sym]).to eq 'changeme:123'
26
24
  expect(@test_object.to_solr[:id]).to be_nil
27
25
  end
28
26
 
29
- it "is used by ActiveFedora::Base#find_with_conditions" do
27
+ it "is used by ActiveFedora::Base#search_with_conditions" do
30
28
  mock_response = double("SolrResponse")
31
29
  expect(ActiveFedora::SolrService).to receive(:query)
32
- .with("_query_:\"{!raw f=has_model_ssim}SolrSpecModel::Basic\" AND " \
33
- "_query_:\"{!raw f=MY_SAMPLE_ID}changeme:30\"",
34
- sort: ["#{ActiveFedora::SolrQueryBuilder.solr_name('system_create', :stored_sortable, type: :date)} asc"])
30
+ .with("_query_:\"{!field f=has_model_ssim}SolrSpecModel::Basic\" AND " \
31
+ "_query_:\"{!field f=#{field}}changeme:30\"",
32
+ sort: ["#{described_class.index_field_mapper.solr_name('system_create', :stored_sortable, type: :date)} asc"])
35
33
  .and_return(mock_response)
36
34
 
37
- expect(SolrSpecModel::Basic.find_with_conditions(id: "changeme:30")).to equal(mock_response)
35
+ expect(SolrSpecModel::Basic.search_with_conditions(id: "changeme:30")).to equal(mock_response)
38
36
  end
39
37
  end
40
38
 
41
- describe "ENABLE_SOLR_UPDATES" do
42
- before(:all) do
43
- ENABLE_SOLR_UPDATES = false
44
- end
45
- after(:all) do
46
- ENABLE_SOLR_UPDATES = true
47
- end
39
+ describe ".enable_solr_updates?" do
40
+ context 'with .enable_solr_updates? disabled' do
41
+ before do
42
+ allow(described_class).to receive(:enable_solr_updates?).and_return(false)
43
+ end
48
44
 
49
- it "prevents Base.save from calling update_index if false" do
50
- dirty_ds = ActiveFedora::SimpleDatastream.new
51
- @test_object.attached_files['ds1'] = dirty_ds
52
- allow(@test_object).to receive(:datastreams).and_return(ds1: dirty_ds)
53
- expect(@test_object).to receive(:update_index).never
54
- expect(@test_object).to receive(:refresh)
55
- @test_object.save
56
- end
57
- it "prevents Base.delete from deleting the corresponding Solr document if false" do
58
- expect(ActiveFedora::SolrService.instance.conn).to receive(:delete).with(@test_object.id).never
59
- expect(@test_object).to receive(:delete)
60
- @test_object.delete
45
+ it "prevents Base.save from calling update_index if false" do
46
+ dirty_ds = ActiveFedora::SimpleDatastream.new
47
+ @test_object.attached_files['ds1'] = dirty_ds
48
+ allow(@test_object).to receive(:datastreams).and_return(ds1: dirty_ds)
49
+ expect(@test_object).to receive(:update_index).never
50
+ expect(@test_object).to receive(:refresh)
51
+ @test_object.save
52
+ end
53
+ it "prevents Base.delete from deleting the corresponding Solr document if false" do
54
+ expect(ActiveFedora::SolrService.instance.conn).to receive(:delete).with(@test_object.id).never
55
+ expect(@test_object).to receive(:delete)
56
+ @test_object.delete
57
+ end
61
58
  end
62
59
  end
63
60
  end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveFedora::SolrHit do
4
+ before(:all) do
5
+ class AudioRecord < ActiveFedora::Base
6
+ attr_accessor :id
7
+ def self.connection_for_id(_id)
8
+ end
9
+ end
10
+ end
11
+
12
+ subject { described_class.new "id" => "my:_ID1_", ActiveFedora.index_field_mapper.solr_name("has_model", :symbol) => ["AudioRecord"] }
13
+
14
+ describe "#reify" do
15
+ it "uses .find to instantiate objects" do
16
+ expect(AudioRecord).to receive(:find).with("my:_ID1_", cast: true)
17
+ subject.reify
18
+ end
19
+ end
20
+
21
+ describe "#id" do
22
+ it "extracts the id from the solr hit" do
23
+ expect(subject.id).to eq "my:_ID1_"
24
+ end
25
+ end
26
+
27
+ describe "#rdf_uri" do
28
+ it "provides an RDF URI for the solr hit" do
29
+ expect(subject.rdf_uri).to eq ::RDF::URI.new(ActiveFedora::Base.id_to_uri("my:_ID1_"))
30
+ end
31
+ end
32
+
33
+ describe "#model" do
34
+ it "selects the appropriate model for the solr result" do
35
+ expect(subject.model).to eq AudioRecord
36
+ end
37
+ end
38
+
39
+ describe "#models" do
40
+ it "provides all the relevant models for the solr result" do
41
+ expect(subject.models).to match_array [AudioRecord]
42
+ end
43
+ end
44
+
45
+ describe "#model?" do
46
+ it 'is true if the object has the given model' do
47
+ expect(subject.model?(AudioRecord)).to eq true
48
+ end
49
+
50
+ it 'is true if the object has an ancestor of the given model' do
51
+ expect(subject.model?(ActiveFedora::Base)).to eq true
52
+ end
53
+
54
+ it 'is false if the given model is not in the ancestor tree for the models' do
55
+ expect(subject.model?(String)).to eq false
56
+ end
57
+ end
58
+ end
@@ -3,7 +3,15 @@ require 'spec_helper'
3
3
  describe ActiveFedora::SolrQueryBuilder do
4
4
  describe "raw_query" do
5
5
  it "generates a raw query clause" do
6
- expect(described_class.raw_query('id', "my:_ID1_")).to eq '_query_:"{!raw f=id}my:_ID1_"'
6
+ Deprecation.silence(described_class) do
7
+ expect(described_class.raw_query('id', "my:_ID1_")).to eq '_query_:"{!raw f=id}my:_ID1_"'
8
+ end
9
+ end
10
+ end
11
+
12
+ describe "construct_query" do
13
+ it "generates a query clause" do
14
+ expect(described_class.construct_query('id' => "my:_ID1_")).to eq '_query_:"{!field f=id}my:_ID1_"'
7
15
  end
8
16
  end
9
17
 
@@ -48,13 +48,13 @@ describe ActiveFedora::SolrService do
48
48
  end
49
49
  end
50
50
 
51
- describe ".query" do
51
+ describe "#get" do
52
52
  it "calls solr" do
53
53
  mock_conn = double("Connection")
54
54
  stub_result = double("Result")
55
55
  expect(mock_conn).to receive(:get).with('select', params: { q: 'querytext', qt: 'standard' }).and_return(stub_result)
56
56
  allow(described_class).to receive(:instance).and_return(double("instance", conn: mock_conn))
57
- expect(described_class.query('querytext', raw: true)).to eq stub_result
57
+ expect(described_class.get('querytext')).to eq stub_result
58
58
  end
59
59
  it "uses select_path" do
60
60
  mock_conn = double("Connection")
@@ -62,9 +62,25 @@ describe ActiveFedora::SolrService do
62
62
  expect(mock_conn).to receive(:get).with('select_test', params: { q: 'querytext', qt: 'standard' }).and_return(stub_result)
63
63
  expect(described_class).to receive(:select_path).and_return('select_test')
64
64
  allow(described_class).to receive(:instance).and_return(double("instance", conn: mock_conn))
65
- expect(described_class.query('querytext', raw: true)).to eq stub_result
65
+ expect(described_class.get('querytext')).to eq stub_result
66
66
  end
67
67
  end
68
+
69
+ describe "#query" do
70
+ let(:doc) { { 'id' => 'x' } }
71
+ let(:docs) { [doc] }
72
+
73
+ it "wraps the solr response documents in Solr hits" do
74
+ mock_conn = double("Connection")
75
+ stub_result = { 'response' => { 'docs' => docs } }
76
+ expect(mock_conn).to receive(:get).with('select', params: { q: 'querytext', qt: 'standard' }).and_return(stub_result)
77
+ allow(described_class).to receive(:instance).and_return(double("instance", conn: mock_conn))
78
+ result = described_class.query('querytext')
79
+ expect(result.size).to eq 1
80
+ expect(result.first.id).to eq 'x'
81
+ end
82
+ end
83
+
68
84
  describe ".count" do
69
85
  it "returns a count of matching records" do
70
86
  mock_conn = double("Connection")