active-fedora 5.1.0 → 5.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/active-fedora.gemspec +1 -2
- data/lib/active_fedora/datastreams.rb +14 -14
- data/lib/active_fedora/file_management.rb +5 -3
- data/lib/active_fedora/metadata_datastream_helper.rb +5 -1
- data/lib/active_fedora/nokogiri_datastream.rb +17 -4
- data/lib/active_fedora/rdf_datastream.rb +59 -36
- data/lib/active_fedora/relationships.rb +28 -11
- data/lib/active_fedora/version.rb +1 -1
- data/spec/config_helper.rb +3 -3
- data/spec/integration/base_spec.rb +15 -3
- data/spec/integration/bug_spec.rb +0 -3
- data/spec/integration/datastream_collections_spec.rb +9 -9
- data/spec/integration/datastream_spec.rb +1 -1
- data/spec/integration/full_featured_model_spec.rb +3 -4
- data/spec/integration/ntriples_datastream_spec.rb +0 -1
- data/spec/integration/rels_ext_datastream_spec.rb +12 -1
- data/spec/integration/semantic_node_spec.rb +10 -0
- data/spec/integration/solr_service_spec.rb +2 -2
- data/spec/spec_helper.rb +4 -7
- data/spec/support/mock_fedora.rb +10 -10
- data/spec/unit/active_fedora_spec.rb +8 -8
- data/spec/unit/association_proxy_spec.rb +2 -1
- data/spec/unit/base_cma_spec.rb +2 -2
- data/spec/unit/base_datastream_management_spec.rb +9 -9
- data/spec/unit/base_extra_spec.rb +25 -25
- data/spec/unit/base_file_management_spec.rb +32 -23
- data/spec/unit/base_spec.rb +94 -151
- data/spec/unit/callback_spec.rb +16 -11
- data/spec/unit/code_configurator_spec.rb +4 -4
- data/spec/unit/content_model_spec.rb +8 -8
- data/spec/unit/datastream_collections_spec.rb +23 -23
- data/spec/unit/datastream_spec.rb +7 -7
- data/spec/unit/datastreams_spec.rb +189 -304
- data/spec/unit/file_configurator_spec.rb +56 -56
- data/spec/unit/has_many_collection_spec.rb +1 -1
- data/spec/unit/model_spec.rb +51 -56
- data/spec/unit/nokogiri_datastream_spec.rb +24 -25
- data/spec/unit/ntriples_datastream_spec.rb +18 -27
- data/spec/unit/property_spec.rb +0 -2
- data/spec/unit/qualified_dublin_core_datastream_spec.rb +1 -2
- data/spec/unit/rdfxml_rdf_datastream_spec.rb +1 -1
- data/spec/unit/relationship_graph_spec.rb +1 -1
- data/spec/unit/relationships_spec.rb +64 -52
- data/spec/unit/rels_ext_datastream_spec.rb +7 -7
- data/spec/unit/semantic_node_spec.rb +5 -5
- data/spec/unit/service_definitions_spec.rb +18 -16
- data/spec/unit/solr_config_options_spec.rb +6 -6
- data/spec/unit/solr_service_spec.rb +16 -16
- metadata +5 -21
@@ -15,12 +15,12 @@ describe ActiveFedora::NokogiriDatastream do
|
|
15
15
|
before(:each) do
|
16
16
|
@mock_inner = mock('inner object')
|
17
17
|
@mock_repo = mock('repository')
|
18
|
-
@mock_repo.
|
19
|
-
@mock_inner.
|
20
|
-
@mock_inner.
|
21
|
-
@mock_inner.
|
18
|
+
@mock_repo.stub(:datastream_dissemination=>'My Content', :config=>{})
|
19
|
+
@mock_inner.stub(:repository).and_return(@mock_repo)
|
20
|
+
@mock_inner.stub(:pid)
|
21
|
+
@mock_inner.stub(:new? => false)
|
22
22
|
@test_ds = ActiveFedora::NokogiriDatastream.new(@mock_inner, "descMetadata")
|
23
|
-
@test_ds.
|
23
|
+
@test_ds.stub(:new? => false, :profile => {}, :datastream_content => '<test_xml/>')
|
24
24
|
@test_ds.content="<test_xml/>"
|
25
25
|
end
|
26
26
|
|
@@ -44,7 +44,7 @@ describe ActiveFedora::NokogiriDatastream do
|
|
44
44
|
test_ds1.ng_xml.to_xml.should == "<?xml version=\"1.0\"?>\n<xml>\n <foo/>\n</xml>\n"
|
45
45
|
end
|
46
46
|
it "should initialize from #xml_template if no xml is provided" do
|
47
|
-
ActiveFedora::NokogiriDatastream.
|
47
|
+
ActiveFedora::NokogiriDatastream.should_receive(:xml_template).and_return("<fake template/>")
|
48
48
|
n = ActiveFedora::NokogiriDatastream.new
|
49
49
|
n.ng_xml.should be_equivalent_to("<fake template/>")
|
50
50
|
end
|
@@ -86,7 +86,7 @@ describe ActiveFedora::NokogiriDatastream do
|
|
86
86
|
end
|
87
87
|
it "should do nothing if field key is a string (must be an array or symbol). Will not accept xpath queries!" do
|
88
88
|
xml_before = @mods_ds.to_xml
|
89
|
-
logger.
|
89
|
+
logger.should_receive(:warn).with "WARNING: descMetadata ignoring {\"fubar\" => \"the role\"} because \"fubar\" is a String (only valid OM Term Pointers will be used). Make sure your html has the correct field_selector tags in it."
|
90
90
|
@mods_ds.update_indexed_attributes( { "fubar"=>"the role" } ).should == {}
|
91
91
|
@mods_ds.to_xml.should == xml_before
|
92
92
|
end
|
@@ -149,12 +149,12 @@ describe ActiveFedora::NokogiriDatastream do
|
|
149
149
|
end
|
150
150
|
|
151
151
|
it "should call lookup with field_name and return the text values from each resulting node" do
|
152
|
-
@mods_ds.
|
152
|
+
@mods_ds.should_receive(:term_values).with("--my xpath--").and_return(["value1", "value2"])
|
153
153
|
@mods_ds.get_values("--my xpath--").should == ["value1", "value2"]
|
154
154
|
end
|
155
155
|
it "should assume that field_names that are strings are xpath queries" do
|
156
|
-
ActiveFedora::NokogiriDatastream.
|
157
|
-
@mods_ds.
|
156
|
+
ActiveFedora::NokogiriDatastream.should_receive(:accessor_xpath).never
|
157
|
+
@mods_ds.should_receive(:term_values).with("--my xpath--").and_return(["abstract1", "abstract2"])
|
158
158
|
@mods_ds.get_values("--my xpath--").should == ["abstract1", "abstract2"]
|
159
159
|
end
|
160
160
|
end
|
@@ -164,7 +164,6 @@ describe ActiveFedora::NokogiriDatastream do
|
|
164
164
|
mods_xml = Nokogiri::XML::Document.parse( fixture(File.join("mods_articles", "hydrangea_article1.xml")) )
|
165
165
|
tmpl = Hydra::ModsArticleDatastream.new
|
166
166
|
Hydra::ModsArticleDatastream.from_xml(mods_xml,tmpl).ng_xml.root.to_xml.should == mods_xml.root.to_xml
|
167
|
-
tmpl.should_not be_changed
|
168
167
|
end
|
169
168
|
end
|
170
169
|
|
@@ -178,9 +177,9 @@ describe ActiveFedora::NokogiriDatastream do
|
|
178
177
|
@test_ds.should respond_to(:save)
|
179
178
|
end
|
180
179
|
it "should persist the product of .to_xml in fedora" do
|
181
|
-
@test_ds.
|
182
|
-
@test_ds.
|
183
|
-
@mock_repo.
|
180
|
+
@test_ds.stub(:new? => true)
|
181
|
+
@test_ds.stub(:to_xml => "fake xml")
|
182
|
+
@mock_repo.should_receive(:add_datastream).with(:pid => nil, :dsid => 'descMetadata', :versionable => true, :content => 'fake xml', :controlGroup => 'X', :dsState => 'A', :mimeType=>'text/xml')
|
184
183
|
|
185
184
|
@test_ds.serialize!
|
186
185
|
@test_ds.save
|
@@ -191,19 +190,19 @@ describe ActiveFedora::NokogiriDatastream do
|
|
191
190
|
describe '.content=' do
|
192
191
|
subject { ActiveFedora::NokogiriDatastream.new(@mock_inner, "descMetadata") }
|
193
192
|
it "should update the content" do
|
194
|
-
subject.
|
193
|
+
subject.stub(:new? => false )
|
195
194
|
subject.content = "<a />"
|
196
195
|
subject.datastream_content.should == '<a />'
|
197
196
|
end
|
198
197
|
|
199
198
|
it "should mark the object as changed" do
|
200
|
-
subject.
|
199
|
+
subject.stub(:new? => false )
|
201
200
|
subject.content = "<a />"
|
202
201
|
subject.should be_changed
|
203
202
|
end
|
204
203
|
|
205
204
|
it "update ngxml and mark the xml as loaded" do
|
206
|
-
subject.
|
205
|
+
subject.stub(:new? => false )
|
207
206
|
subject.content = "<a />"
|
208
207
|
subject.ng_xml.to_xml.should =~ /<a\/>/
|
209
208
|
subject.xml_loaded.should be_true
|
@@ -240,13 +239,13 @@ describe ActiveFedora::NokogiriDatastream do
|
|
240
239
|
end
|
241
240
|
|
242
241
|
it "should ng_xml.to_xml" do
|
243
|
-
@test_ds.
|
242
|
+
@test_ds.stub(:ng_xml => Nokogiri::XML::Document.parse("<text_document/>"))
|
244
243
|
@test_ds.to_xml.should == "<text_document/>\n"
|
245
244
|
end
|
246
245
|
|
247
246
|
it 'should accept an optional Nokogiri::XML Document as an argument and insert its fields into that (mocked test)' do
|
248
247
|
doc = Nokogiri::XML::Document.parse("<test_document/>")
|
249
|
-
doc.root.
|
248
|
+
doc.root.should_receive(:add_child)#.with(@test_ds.ng_xml.root)
|
250
249
|
@test_ds.to_xml(doc)
|
251
250
|
end
|
252
251
|
|
@@ -286,10 +285,10 @@ describe ActiveFedora::NokogiriDatastream do
|
|
286
285
|
|
287
286
|
it "should return correct values from solr_doc given different term pointers" do
|
288
287
|
mock_term = mock("OM::XML::Term")
|
289
|
-
mock_term.
|
288
|
+
mock_term.stub(:type).and_return(:text)
|
290
289
|
mock_terminology = mock("OM::XML::Terminology")
|
291
|
-
mock_terminology.
|
292
|
-
ActiveFedora::NokogiriDatastream.
|
290
|
+
mock_terminology.stub(:retrieve_term).and_return(mock_term)
|
291
|
+
ActiveFedora::NokogiriDatastream.stub(:terminology).and_return(mock_terminology)
|
293
292
|
@mods_ds.from_solr(@solr_doc)
|
294
293
|
term_pointer = [:name,:role,:roleTerm]
|
295
294
|
@mods_ds.get_values_from_solr(:name,:role,:roleTerm).should == ["creator","submitter","teacher"]
|
@@ -348,7 +347,7 @@ describe ActiveFedora::NokogiriDatastream do
|
|
348
347
|
end
|
349
348
|
|
350
349
|
it "should update a value internally call OM::XML::TermValueOperators::update_values if internal_solr_doc is not set" do
|
351
|
-
@mods_ds.
|
350
|
+
@mods_ds.stub(:om_update_values).once()
|
352
351
|
term_pointer = [:name,:role,:roleTerm]
|
353
352
|
@mods_ds.update_values([{":person"=>"0"}, "role", "text"]=>{"0"=>"role1", "1"=>"role2", "2"=>"role3"})
|
354
353
|
end
|
@@ -369,7 +368,7 @@ describe ActiveFedora::NokogiriDatastream do
|
|
369
368
|
end
|
370
369
|
|
371
370
|
it "should call OM::XML::term_values if internal_solr_doc is not set and return values from xml" do
|
372
|
-
@mods_ds.
|
371
|
+
@mods_ds.stub(:om_term_values).once()
|
373
372
|
term_pointer = [:name,:role,:roleTerm]
|
374
373
|
@mods_ds.term_values(*term_pointer)
|
375
374
|
end
|
@@ -378,7 +377,7 @@ describe ActiveFedora::NokogiriDatastream do
|
|
378
377
|
it "should call get_values_from_solr if internal_solr_doc is set" do
|
379
378
|
@mods_ds.from_solr(@solr_doc)
|
380
379
|
term_pointer = [:name,:role,:roleTerm]
|
381
|
-
@mods_ds.
|
380
|
+
@mods_ds.stub(:get_values_from_solr).once()
|
382
381
|
@mods_ds.term_values(*term_pointer)
|
383
382
|
end
|
384
383
|
end
|
@@ -103,8 +103,8 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
103
103
|
end
|
104
104
|
end
|
105
105
|
@subject = MyDatastream.new(@inner_object, 'mixed_rdf')
|
106
|
-
@subject.
|
107
|
-
@subject.
|
106
|
+
@subject.stub(:pid => 'test:1')
|
107
|
+
@subject.stub(:new? => false)
|
108
108
|
@subject.content = File.new('spec/fixtures/mixed_rdf_descMetadata.nt').read
|
109
109
|
end
|
110
110
|
|
@@ -126,7 +126,7 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
126
126
|
end
|
127
127
|
end
|
128
128
|
@subject = MyDatastream.new(@inner_object, 'mixed_rdf')
|
129
|
-
@subject.
|
129
|
+
@subject.stub(:pid => 'test:1', :repository => ActiveFedora::Base.connection_for_pid(0))
|
130
130
|
end
|
131
131
|
after(:each) do
|
132
132
|
Object.send(:remove_const, :MyDatastream)
|
@@ -166,10 +166,12 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
166
166
|
map.rights(:in => RDF::DC)
|
167
167
|
end
|
168
168
|
end
|
169
|
+
end
|
170
|
+
before(:each) do
|
169
171
|
@subject = MyDatastream.new(@inner_object, 'solr_rdf')
|
170
172
|
@subject.content = File.new('spec/fixtures/solr_rdf_descMetadata.nt').read
|
171
|
-
@subject.
|
172
|
-
@subject.
|
173
|
+
@subject.stub(:pid => 'test:1')
|
174
|
+
@subject.stub(:new? => false)
|
173
175
|
@sample_fields = {:my_datastream__publisher => {:values => ["publisher1"], :type => :string, :behaviors => [:facetable, :sortable, :searchable, :displayable]},
|
174
176
|
:my_datastream__based_near => {:values => ["coverage1", "coverage2"], :type => :text, :behaviors => [:displayable, :facetable, :searchable]},
|
175
177
|
:my_datastream__created => {:values => "fake-date", :type => :date, :behaviors => [:sortable, :displayable]},
|
@@ -195,7 +197,7 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
195
197
|
@subject.to_solr(doc).should == doc
|
196
198
|
end
|
197
199
|
it "should iterate through @fields hash" do
|
198
|
-
@subject.
|
200
|
+
@subject.should_receive(:fields).and_return(@sample_fields)
|
199
201
|
solr_doc = @subject.to_solr
|
200
202
|
solr_doc["my_datastream__publisher_t"].should == ["publisher1"]
|
201
203
|
solr_doc["my_datastream__publisher_sort"].should == ["publisher1"]
|
@@ -213,7 +215,7 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
213
215
|
solr_doc["my_datastream__empty_field_t"].should be_nil
|
214
216
|
end
|
215
217
|
it 'should append create keys in format field_name + _ + field_type' do
|
216
|
-
@subject.
|
218
|
+
@subject.stub(:fields).and_return(@sample_fields)
|
217
219
|
|
218
220
|
#should have these
|
219
221
|
@subject.to_solr["my_datastream__publisher_t"].should_not be_nil
|
@@ -228,7 +230,7 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
228
230
|
end
|
229
231
|
it "should use Solr mappings to generate field names" do
|
230
232
|
ActiveFedora::SolrService.load_mappings(File.join(File.dirname(__FILE__), "..", "..", "config", "solr_mappings_af_0.1.yml"))
|
231
|
-
@subject.
|
233
|
+
@subject.stub(:fields).and_return(@sample_fields)
|
232
234
|
solr_doc = @subject.to_solr
|
233
235
|
|
234
236
|
#should have these
|
@@ -257,9 +259,10 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
257
259
|
delegate :rights, :to => :descMetadata
|
258
260
|
end
|
259
261
|
@obj = MyDatastream.new(@inner_object, 'solr_rdf')
|
260
|
-
|
261
|
-
@obj.
|
262
|
-
|
262
|
+
repository = mock()
|
263
|
+
@obj.stub(:repository => repository, :pid => 'test:1')
|
264
|
+
repository.stub(:modify_datastream)
|
265
|
+
repository.stub(:add_datastream)
|
263
266
|
@obj.created = "2012-03-04"
|
264
267
|
@obj.title = "Of Mice and Men, The Sequel"
|
265
268
|
@obj.publisher = "Bob's Blogtastic Publishing"
|
@@ -268,26 +271,14 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
268
271
|
@obj.rights = "Totally open, y'all"
|
269
272
|
@obj.save
|
270
273
|
end
|
271
|
-
|
272
|
-
it "should set dirty? to false" do
|
273
|
-
@obj.should_not be_changed
|
274
|
-
@obj.title = "something"
|
275
|
-
@obj.should be_changed
|
276
|
-
@obj.save
|
277
|
-
@obj.should_not be_changed
|
278
|
-
end
|
279
|
-
end
|
274
|
+
|
280
275
|
describe '.content=' do
|
281
276
|
it "should update the content and graph, marking the datastream as changed" do
|
282
|
-
mock_repo = mock('repository')
|
283
277
|
sample_rdf = File.new('spec/fixtures/mixed_rdf_descMetadata.nt').read
|
284
|
-
@obj.
|
285
|
-
@obj.stubs(:repository).returns(mock_repo)
|
278
|
+
@obj.stub(:new? => false)
|
286
279
|
@obj.should_not be_changed
|
287
|
-
@obj.content.should_not be_equivalent_to(sample_rdf)
|
288
280
|
@obj.content = sample_rdf
|
289
281
|
@obj.should be_changed
|
290
|
-
@obj.content.should be_equivalent_to(sample_rdf)
|
291
282
|
end
|
292
283
|
end
|
293
284
|
it "should save content properly upon save" do
|
@@ -323,11 +314,11 @@ describe ActiveFedora::NtriplesRDFDatastream do
|
|
323
314
|
end
|
324
315
|
it "should solrize even when the object is not new" do
|
325
316
|
foo = Foo.new
|
326
|
-
foo.
|
317
|
+
foo.should_receive(:update_index).once
|
327
318
|
foo.title = "title1"
|
328
319
|
foo.save
|
329
320
|
foo = Foo.find(foo.pid)
|
330
|
-
foo.
|
321
|
+
foo.should_receive(:update_index).once
|
331
322
|
foo.publisher = "Allah2"
|
332
323
|
foo.title = "The Work2"
|
333
324
|
foo.save
|
data/spec/unit/property_spec.rb
CHANGED
@@ -60,7 +60,6 @@ describe ActiveFedora::QualifiedDublinCoreDatastream do
|
|
60
60
|
n = ActiveFedora::QualifiedDublinCoreDatastream.from_xml(stream.to_xml, ds)
|
61
61
|
n.spatial.should == ["Boston [7013445]", "Dorchester [7013575]", "Roxbury [7015002]"]
|
62
62
|
n.title.should == ["Oral history with Frances Addelson, 1997 November 14"]
|
63
|
-
n.should_not be_changed
|
64
63
|
end
|
65
64
|
|
66
65
|
|
@@ -94,7 +93,7 @@ describe ActiveFedora::QualifiedDublinCoreDatastream do
|
|
94
93
|
|
95
94
|
describe '.to_xml' do
|
96
95
|
it 'should output the fields hash as Qualified Dublin Core XML' do
|
97
|
-
#@test_ds.
|
96
|
+
#@test_ds.should_receive(:new?).and_return(true).twice
|
98
97
|
sample_xml = "<dc xmlns:dcterms='http://purl.org/dc/terms/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><dcterms:title>title1</dcterms:title><dcterms:publisher>publisher1</dcterms:publisher><dcterms:creator>creator1</dcterms:creator><dcterms:creator>creator2</dcterms:creator></dc>"
|
99
98
|
@test_ds = ActiveFedora::QualifiedDublinCoreDatastream.new(nil, 'qdc' )
|
100
99
|
|
@@ -10,7 +10,7 @@ describe ActiveFedora::RdfxmlRDFDatastream do
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
@subject = MyRdfxmlDatastream.new(@inner_object, 'mixed_rdf')
|
13
|
-
@subject.
|
13
|
+
@subject.stub(:pid => 'test:1')
|
14
14
|
end
|
15
15
|
after(:each) do
|
16
16
|
Object.send(:remove_const, :MyRdfxmlDatastream)
|
@@ -3,6 +3,18 @@ require 'spec_helper'
|
|
3
3
|
@@last_pid = 0
|
4
4
|
|
5
5
|
describe ActiveFedora::Relationships do
|
6
|
+
before(:all) do
|
7
|
+
@behavior = ActiveFedora::Relationships.deprecation_behavior
|
8
|
+
@c_behavior = ActiveFedora::Relationships::ClassMethods.deprecation_behavior
|
9
|
+
ActiveFedora::Relationships.deprecation_behavior = :silence
|
10
|
+
ActiveFedora::Relationships::ClassMethods.deprecation_behavior = :silence
|
11
|
+
end
|
12
|
+
|
13
|
+
after :all do
|
14
|
+
ActiveFedora::Relationships.deprecation_behavior = @behavior
|
15
|
+
ActiveFedora::Relationships::ClassMethods.deprecation_behavior = @c_behavior
|
16
|
+
end
|
17
|
+
|
6
18
|
def increment_pid
|
7
19
|
@@last_pid += 1
|
8
20
|
end
|
@@ -74,12 +86,12 @@ describe ActiveFedora::Relationships do
|
|
74
86
|
end
|
75
87
|
|
76
88
|
it 'should create inbound relationship finders' do
|
77
|
-
SpecNode.
|
89
|
+
SpecNode.should_receive(:create_inbound_relationship_finders)
|
78
90
|
SpecNode.has_relationship("parts", :is_part_of, :inbound => true)
|
79
91
|
end
|
80
92
|
|
81
93
|
it 'should create outbound relationship finders' do
|
82
|
-
SpecNode.
|
94
|
+
SpecNode.should_receive(:create_outbound_relationship_finders).exactly(2).times
|
83
95
|
SpecNode.has_relationship("parts", :is_part_of, :inbound => false)
|
84
96
|
SpecNode.has_relationship("container", :is_member_of)
|
85
97
|
end
|
@@ -90,7 +102,7 @@ describe ActiveFedora::Relationships do
|
|
90
102
|
#local_node.internal_uri = "info:fedora/#{@pid}"
|
91
103
|
local_node.pid = @pid
|
92
104
|
|
93
|
-
local_node.
|
105
|
+
local_node.stub(:rels_ext).and_return(stub("rels_ext", :content_will_change! => true, :content=>''))
|
94
106
|
local_node.add_relationship(:is_member_of, "info:fedora/container:A")
|
95
107
|
local_node.add_relationship(:is_member_of, "info:fedora/container:B")
|
96
108
|
|
@@ -121,8 +133,8 @@ describe ActiveFedora::Relationships do
|
|
121
133
|
it 'should create relationship descriptions both inbound and outbound' do
|
122
134
|
@test_object2 = MockHasRelationship.new
|
123
135
|
@test_object2.pid = increment_pid
|
124
|
-
@test_object2.
|
125
|
-
@test_object2.
|
136
|
+
@test_object2.stub(:testing_inbound).and_return({})
|
137
|
+
@test_object2.stub(:rels_ext).and_return(stub("rels_ext", :content_will_change! => true, :content =>''))
|
126
138
|
@test_object2.add_relationship(:has_model, SpecNode.to_class_uri)
|
127
139
|
@test_object2.should respond_to(:testing_append)
|
128
140
|
@test_object2.should respond_to(:testing_remove)
|
@@ -173,9 +185,9 @@ describe ActiveFedora::Relationships do
|
|
173
185
|
{"id"=>"_PID3_", "has_model_s"=>["info:fedora/afmodel:AudioRecord"]}]
|
174
186
|
SpecNode.create_inbound_relationship_finders("parts", :is_part_of, :inbound => true)
|
175
187
|
local_node = SpecNode.new()
|
176
|
-
local_node.
|
177
|
-
SpecNode.
|
178
|
-
ActiveFedora::SolrService.
|
188
|
+
local_node.should_receive(:pid).and_return("test:sample_pid")
|
189
|
+
SpecNode.stub(:relationships_desc).and_return({:inbound=>{"parts"=>{:predicate=>:is_part_of}}})
|
190
|
+
ActiveFedora::SolrService.should_receive(:query).with(@part_of_sample, :rows=>25).and_return(@sample_solr_hits)
|
179
191
|
local_node.parts_ids.should == ["_PID1_", "_PID2_", "_PID3_"]
|
180
192
|
end
|
181
193
|
|
@@ -184,11 +196,11 @@ describe ActiveFedora::Relationships do
|
|
184
196
|
SpecNode.create_inbound_relationship_finders("constituents", :is_constituent_of, :inbound => true)
|
185
197
|
local_node = SpecNode.new
|
186
198
|
mock_repo = mock("repo")
|
187
|
-
mock_repo.
|
188
|
-
local_node.
|
189
|
-
SpecNode.
|
199
|
+
mock_repo.should_receive(:find).never
|
200
|
+
local_node.should_receive(:pid).and_return("test:sample_pid")
|
201
|
+
SpecNode.stub(:relationships_desc).and_return({:inbound=>{"constituents"=>{:predicate=>:is_constituent_of}}})
|
190
202
|
instance = stub(:conn=>stub(:conn))
|
191
|
-
ActiveFedora::SolrService.
|
203
|
+
ActiveFedora::SolrService.should_receive(:query).with(@constituent_of_sample, :raw=>true, :rows=>101).and_return(solr_result)
|
192
204
|
local_node.constituents(:response_format => :solr, :rows=>101).should == solr_result
|
193
205
|
end
|
194
206
|
|
@@ -196,23 +208,23 @@ describe ActiveFedora::Relationships do
|
|
196
208
|
it "resulting _ids finder should search against solr and return an array of fedora PIDs" do
|
197
209
|
SpecNode.create_inbound_relationship_finders("parts", :is_part_of, :inbound => true)
|
198
210
|
local_node = SpecNode.new
|
199
|
-
local_node.
|
200
|
-
SpecNode.
|
201
|
-
ActiveFedora::SolrService.
|
211
|
+
local_node.should_receive(:pid).and_return("test:sample_pid")
|
212
|
+
SpecNode.stub(:relationships_desc).and_return({:inbound=>{"parts"=>{:predicate=>:is_part_of}}})
|
213
|
+
ActiveFedora::SolrService.should_receive(:query).with(@part_of_sample, :rows=>25).and_return([Hash["id"=>"pid1"], Hash["id"=>"pid2"]])
|
202
214
|
local_node.parts(:response_format => :id_array).should == ["pid1", "pid2"]
|
203
215
|
end
|
204
216
|
|
205
217
|
it "resulting _ids finder should call the basic finder with :result_format => :id_array" do
|
206
218
|
SpecNode.create_inbound_relationship_finders("parts", :is_part_of, :inbound => true)
|
207
219
|
local_node = SpecNode.new
|
208
|
-
local_node.
|
220
|
+
local_node.should_receive(:parts).with(:response_format => :id_array)
|
209
221
|
local_node.parts_ids
|
210
222
|
end
|
211
223
|
|
212
224
|
it "resulting _query finder should call relationship_query" do
|
213
225
|
SpecNode.create_inbound_relationship_finders("parts", :is_part_of, :inbound => true)
|
214
226
|
local_node = SpecNode.new
|
215
|
-
local_node.
|
227
|
+
local_node.should_receive(:relationship_query).with("parts")
|
216
228
|
local_node.parts_query
|
217
229
|
end
|
218
230
|
end
|
@@ -240,15 +252,15 @@ describe ActiveFedora::Relationships do
|
|
240
252
|
it "should read from relationships array and use Repository.find to build an array of objects" do
|
241
253
|
SpecNode.create_outbound_relationship_finders("containers", :is_member_of)
|
242
254
|
local_node = SpecNode.new
|
243
|
-
local_node.
|
255
|
+
local_node.should_receive(:ids_for_outbound).with(:is_member_of).and_return(["my:_PID1_", "my:_PID2_", "my:_PID3_"])
|
244
256
|
|
245
|
-
#ActiveFedora::ContentModel.
|
246
|
-
ActiveFedora::SolrService.
|
257
|
+
#ActiveFedora::ContentModel.should_receive(:known_models_for).and_return([SpecNode]).times(3)
|
258
|
+
ActiveFedora::SolrService.should_receive(:query).with("id:my\\:_PID1_ OR id:my\\:_PID2_ OR id:my\\:_PID3_").and_return([{"id"=> "my:_PID1_", "has_model_s"=>["info:fedora/afmodel:SpecNode"]},
|
247
259
|
{"id"=> "my:_PID2_", "has_model_s"=>["info:fedora/afmodel:SpecNode"]},
|
248
260
|
{"id"=> "my:_PID3_", "has_model_s"=>["info:fedora/afmodel:SpecNode"]}])
|
249
|
-
ActiveFedora::DigitalObject.
|
250
|
-
ActiveFedora::DigitalObject.
|
251
|
-
ActiveFedora::DigitalObject.
|
261
|
+
ActiveFedora::DigitalObject.should_receive(:find).with(SpecNode, 'my:_PID1_').and_return(stub("inner obj", :'new?'=>false, :pid=>'my:_PID1_'))
|
262
|
+
ActiveFedora::DigitalObject.should_receive(:find).with(SpecNode, 'my:_PID2_').and_return(stub("inner obj", :'new?'=>false, :pid=>'my:_PID2_'))
|
263
|
+
ActiveFedora::DigitalObject.should_receive(:find).with(SpecNode, 'my:_PID3_').and_return(stub("inner obj", :'new?'=>false, :pid=>'my:_PID3_'))
|
252
264
|
local_node.containers.map(&:pid).should == ["my:_PID1_", "my:_PID2_", "my:_PID3_"]
|
253
265
|
end
|
254
266
|
|
@@ -257,23 +269,23 @@ describe ActiveFedora::Relationships do
|
|
257
269
|
SpecNode.create_outbound_relationship_finders("constituents", :is_constituent_of)
|
258
270
|
local_node = SpecNode.new
|
259
271
|
mock_repo = mock("repo")
|
260
|
-
mock_repo.
|
261
|
-
local_node.
|
262
|
-
ActiveFedora::SolrService.
|
272
|
+
mock_repo.should_receive(:find).never
|
273
|
+
local_node.should_receive(:rels_ext).and_return(stub('rels-ext', :content=>''))
|
274
|
+
ActiveFedora::SolrService.should_receive(:query).and_return(solr_result)
|
263
275
|
local_node.constituents(:response_format => :solr).should == solr_result
|
264
276
|
end
|
265
277
|
|
266
278
|
it "(:response_format => :id_array) should read from relationships array" do
|
267
279
|
SpecNode.create_outbound_relationship_finders("containers", :is_member_of)
|
268
280
|
local_node = SpecNode.new
|
269
|
-
local_node.
|
281
|
+
local_node.should_receive(:ids_for_outbound).with(:is_member_of).and_return([])
|
270
282
|
local_node.containers_ids
|
271
283
|
end
|
272
284
|
|
273
285
|
it "(:response_format => :id_array) should return an array of fedora PIDs" do
|
274
286
|
SpecNode.create_outbound_relationship_finders("containers", :is_member_of)
|
275
287
|
local_node = SpecNode.new
|
276
|
-
local_node.
|
288
|
+
local_node.stub(:rels_ext => mock("rels_ext", :content_will_change! => true, :content=>''))
|
277
289
|
local_node.add_relationship(:is_member_of, "demo:10")
|
278
290
|
result = local_node.containers_ids
|
279
291
|
result.should be_instance_of(Array)
|
@@ -286,7 +298,7 @@ describe ActiveFedora::Relationships do
|
|
286
298
|
it "should call the basic finder with :result_format => :id_array" do
|
287
299
|
SpecNode.create_outbound_relationship_finders("parts", :is_part_of)
|
288
300
|
local_node = SpecNode.new
|
289
|
-
local_node.
|
301
|
+
local_node.should_receive(:parts).with(:response_format => :id_array)
|
290
302
|
local_node.parts_ids
|
291
303
|
end
|
292
304
|
end
|
@@ -294,7 +306,7 @@ describe ActiveFedora::Relationships do
|
|
294
306
|
it "resulting _query finder should call relationship_query" do
|
295
307
|
SpecNode.create_outbound_relationship_finders("containers", :is_member_of)
|
296
308
|
local_node = SpecNode.new
|
297
|
-
local_node.
|
309
|
+
local_node.should_receive(:relationship_query).with("containers")
|
298
310
|
local_node.containers_query
|
299
311
|
end
|
300
312
|
end
|
@@ -312,21 +324,21 @@ describe ActiveFedora::Relationships do
|
|
312
324
|
@local_node.should respond_to(:all_parts_outbound)
|
313
325
|
end
|
314
326
|
it "should rely on inbound & outbound finders" do
|
315
|
-
@local_node.
|
316
|
-
@local_node.
|
327
|
+
@local_node.should_receive(:all_parts_inbound).with(:rows => 25).and_return(["foo1"])
|
328
|
+
@local_node.should_receive(:all_parts_outbound).with(:rows => 25).and_return(["foo2"])
|
317
329
|
@local_node.all_parts.should == ["foo1", "foo2"]
|
318
330
|
end
|
319
331
|
it "(:response_format => :id_array) should rely on inbound & outbound finders" do
|
320
|
-
@local_node.
|
321
|
-
@local_node.
|
332
|
+
@local_node.should_receive(:all_parts_inbound).with(:response_format=>:id_array, :rows => 34).and_return(["fooA"])
|
333
|
+
@local_node.should_receive(:all_parts_outbound).with(:response_format=>:id_array, :rows => 34).and_return(["fooB"])
|
322
334
|
@local_node.all_parts(:response_format=>:id_array, :rows => 34).should == ["fooA", "fooB"]
|
323
335
|
end
|
324
336
|
it "(:response_format => :solr) should construct a solr query that combines inbound and outbound searches" do
|
325
337
|
# get the id array for outbound relationships then construct solr query by combining id array with inbound relationship search
|
326
|
-
@local_node.
|
338
|
+
@local_node.should_receive(:ids_for_outbound).with(:has_part).and_return(["mypid:1"])
|
327
339
|
id_array_query = ActiveFedora::SolrService.construct_query_for_pids(["mypid:1"])
|
328
340
|
solr_result = mock("solr result")
|
329
|
-
ActiveFedora::SolrService.
|
341
|
+
ActiveFedora::SolrService.should_receive(:query).with("#{id_array_query} OR (#{@part_of_sample})", :rows=>25).and_return(solr_result)
|
330
342
|
@local_node.all_parts(:response_format=>:solr)
|
331
343
|
end
|
332
344
|
|
@@ -345,14 +357,14 @@ describe ActiveFedora::Relationships do
|
|
345
357
|
it "resulting _query finder should call relationship_query" do
|
346
358
|
SpecNode.create_bidirectional_relationship_finders("containers", :is_member_of, :has_member)
|
347
359
|
local_node = SpecNode.new
|
348
|
-
local_node.
|
360
|
+
local_node.should_receive(:relationship_query).with("containers")
|
349
361
|
local_node.containers_query
|
350
362
|
end
|
351
363
|
end
|
352
364
|
|
353
365
|
describe "#has_bidirectional_relationship" do
|
354
366
|
it "should ..." do
|
355
|
-
SpecNode.
|
367
|
+
SpecNode.should_receive(:create_bidirectional_relationship_finders).with("all_parts", :has_part, :is_part_of, {})
|
356
368
|
SpecNode.has_bidirectional_relationship("all_parts", :has_part, :is_part_of)
|
357
369
|
end
|
358
370
|
|
@@ -363,9 +375,9 @@ describe ActiveFedora::Relationships do
|
|
363
375
|
@local_node2 = SpecNode.new
|
364
376
|
@local_node2.pid = "mypid2"
|
365
377
|
model_def = SpecNode.to_class_uri
|
366
|
-
@local_node.
|
378
|
+
@local_node.stub(:rels_ext => mock("rels_ext", :content_will_change! => true, :content=>''))
|
367
379
|
@local_node.add_relationship(:has_model, model_def)
|
368
|
-
@local_node2.
|
380
|
+
@local_node2.stub(:rels_ext => mock("rels_ext", :content_will_change! => true, :content=>''))
|
369
381
|
@local_node2.add_relationship(:has_model, model_def)
|
370
382
|
@local_node.add_relationship(:has_part, @local_node2)
|
371
383
|
@local_node2.add_relationship(:has_part, @local_node)
|
@@ -441,7 +453,7 @@ describe ActiveFedora::Relationships do
|
|
441
453
|
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:has_model), RDF::URI.new(MockRelationshipNames.to_class_uri))
|
442
454
|
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:has_member), RDF::URI.new(@test_object4.internal_uri))
|
443
455
|
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:has_part), RDF::URI.new(@test_object3.internal_uri))
|
444
|
-
@test_object2.
|
456
|
+
@test_object2.stub(:relationships =>graph)
|
445
457
|
@test_object2.find_relationship_by_name("testing").should == [@test_object3.internal_uri]
|
446
458
|
end
|
447
459
|
end
|
@@ -470,22 +482,22 @@ describe ActiveFedora::Relationships do
|
|
470
482
|
|
471
483
|
it "should call bidirectional_relationship_query if a bidirectional relationship" do
|
472
484
|
ids = ["changeme:1","changeme:2","changeme:3","changeme:4"]
|
473
|
-
@mockrelsquery.
|
474
|
-
@mockrelsquery.
|
475
|
-
MockNamedRelationshipQuery.
|
485
|
+
@mockrelsquery.stub(:ids_for_outbound).with(:has_part).and_return(ids)
|
486
|
+
@mockrelsquery.should_receive(:pid).and_return("changeme:5")
|
487
|
+
MockNamedRelationshipQuery.should_receive(:bidirectional_relationship_query).with("changeme:5","testing_bi_query",ids)
|
476
488
|
@mockrelsquery.relationship_query("testing_bi_query")
|
477
489
|
end
|
478
490
|
|
479
491
|
it "should call outbound_relationship_query if an outbound relationship" do
|
480
492
|
ids = ["changeme:1","changeme:2","changeme:3","changeme:4"]
|
481
|
-
@mockrelsquery.
|
482
|
-
MockNamedRelationshipQuery.
|
493
|
+
@mockrelsquery.stub(:ids_for_outbound).with(:is_part_of).and_return(ids)
|
494
|
+
MockNamedRelationshipQuery.should_receive(:outbound_relationship_query).with("testing_outbound_no_solr_fq",ids)
|
483
495
|
@mockrelsquery.relationship_query("testing_outbound_no_solr_fq")
|
484
496
|
end
|
485
497
|
|
486
498
|
it "should call inbound_relationship_query if an inbound relationship" do
|
487
|
-
@mockrelsquery.
|
488
|
-
MockNamedRelationshipQuery.
|
499
|
+
@mockrelsquery.should_receive(:pid).and_return("changeme:5")
|
500
|
+
MockNamedRelationshipQuery.should_receive(:inbound_relationship_query).with("changeme:5","testing_inbound_query")
|
489
501
|
@mockrelsquery.relationship_query("testing_inbound_query")
|
490
502
|
end
|
491
503
|
end
|
@@ -529,7 +541,7 @@ describe ActiveFedora::Relationships do
|
|
529
541
|
graph = RDF::Graph.new
|
530
542
|
subject = RDF::URI.new "info:fedora/test:sample_pid"
|
531
543
|
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:has_model), RDF::URI.new(SpecNode.to_class_uri))
|
532
|
-
@test_object.
|
544
|
+
@test_object.stub(:relationships).and_return(graph)
|
533
545
|
@test_object.conforms_to?(SpecNode).should == true
|
534
546
|
end
|
535
547
|
end
|
@@ -549,7 +561,7 @@ describe ActiveFedora::Relationships do
|
|
549
561
|
graph = RDF::Graph.new
|
550
562
|
subject = RDF::URI.new "info:fedora/test:sample_pid"
|
551
563
|
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:has_model), RDF::URI.new(SpecNode.to_class_uri))
|
552
|
-
@test_object.
|
564
|
+
@test_object.stub(:relationships).and_return(graph)
|
553
565
|
@test_object3.assert_conforms_to('object',@test_object,SpecNode)
|
554
566
|
end
|
555
567
|
end
|
@@ -595,14 +607,14 @@ describe ActiveFedora::Relationships do
|
|
595
607
|
graph = RDF::Graph.new
|
596
608
|
subject = RDF::URI.new "info:fedora/test:sample_pid"
|
597
609
|
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:has_model), RDF::URI.new(model_pid))
|
598
|
-
@test_object2.
|
610
|
+
@test_object2.stub(:relationships).and_return(graph)
|
599
611
|
#should return expected named relationships
|
600
612
|
@test_object2.relationships_by_name.should == {:self=>{"testing"=>[],"testing2"=>[]}}
|
601
613
|
graph = RDF::Graph.new
|
602
614
|
subject = RDF::URI.new "info:fedora/test:sample_pid"
|
603
615
|
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:has_model), RDF::URI.new(model_pid))
|
604
616
|
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:has_part), RDF::URI.new(@test_object.internal_uri))
|
605
|
-
@test_object3.
|
617
|
+
@test_object3.stub(:relationships).and_return(graph)
|
606
618
|
@test_object3.relationships_by_name.should == {:self=>{"testing"=>[@test_object.internal_uri],"testing2"=>[]}}
|
607
619
|
end
|
608
620
|
end
|