active-fedora 3.1.0.pre13 → 3.1.0.pre14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -47,7 +47,6 @@ module ActiveFedora
47
47
  # @param target an object to store
48
48
  def build_statement(uri, predicate, target)
49
49
  raise "Not allowed anymore" if uri == :self
50
- raise "Doesn't seem to be a URI(#{uri})" unless /^info/.match(uri)
51
50
  target = target.internal_uri if target.respond_to? :internal_uri
52
51
  subject = RDF::URI.new(uri) #TODO cache
53
52
  begin
@@ -55,6 +54,7 @@ module ActiveFedora
55
54
  rescue URI::InvalidURIError
56
55
  literal = false
57
56
  end
57
+ raise ArgumentError, "Invalid target \"#{target}\". Must have namespace." unless literal || /^info/.match(target)
58
58
  object = literal ? RDF::Literal.new(target) : RDF::URI.new(target)
59
59
 
60
60
  RDF::Statement.new(subject, find_graph_predicate(predicate), object)
@@ -1,3 +1,3 @@
1
1
  module ActiveFedora
2
- VERSION = "3.1.0.pre13"
2
+ VERSION = "3.1.0.pre14"
3
3
  end
@@ -4,7 +4,7 @@ describe ActiveFedora::Base do
4
4
 
5
5
  before(:each) do
6
6
  @test_container = ActiveFedora::Base.new
7
- @test_container.add_relationship(:has_collection_member, "foo:2")
7
+ @test_container.add_relationship(:has_collection_member, "info:fedora/foo:2")
8
8
  @test_container.save
9
9
  end
10
10
 
@@ -17,4 +17,4 @@ describe ActiveFedora::Base do
17
17
  container_copy.collection_members(:response_format=>:id_array).should == ["foo:2"]
18
18
  end
19
19
 
20
- end
20
+ end
@@ -78,7 +78,7 @@ describe ActiveFedora::RelsExtDatastream do
78
78
  it "should load relationships from fedora into parent object" do
79
79
  class SpecNode; include ActiveFedora::SemanticNode; end
80
80
  SpecNode.predicate_mappings[SpecNode.default_predicate_namespace].each_key do |p|
81
- @test_object.add_relationship(p, "demo:#{rand(100)}")
81
+ @test_object.add_relationship(p, "info:fedora/demo:#{rand(100)}")
82
82
  end
83
83
  @test_object.save
84
84
  # make sure that _something_ was actually added to the object's relationships hash
@@ -520,7 +520,7 @@ describe ActiveFedora::Base do
520
520
  end
521
521
  it "should call .to_solr on the RELS-EXT datastream if it is dirty" do
522
522
  @mock_repo.expects(:object).with(:pid => @this_pid).returns("")
523
- @test_object.add_relationship(:has_collection_member, "foo member")
523
+ @test_object.add_relationship(:has_collection_member, "info:fedora/foo:member")
524
524
  rels_ext = @test_object.rels_ext
525
525
  rels_ext.dirty?.should == true
526
526
  rels_ext.expects(:to_solr)
@@ -79,7 +79,7 @@ describe ActiveFedora::RelsExtDatastream do
79
79
  @test_obj.delete
80
80
  end
81
81
  it "should handle un-mapped predicates gracefully" do
82
- @test_obj.add_relationship("foo", "foo:bar")
82
+ @test_obj.add_relationship("foo", "info:fedora/foo:bar")
83
83
  @test_obj.save
84
84
  @test_obj.relationships.size.should == 5
85
85
  @test_obj.ids_for_outbound("foo").should == ["foo:bar"]
@@ -15,600 +15,586 @@ class SpecNode2
15
15
  end
16
16
 
17
17
  describe ActiveFedora::SemanticNode do
18
-
19
- def increment_pid
20
- @@last_pid += 1
21
- end
22
-
23
- before(:all) do
24
- @pid = "test:sample_pid"
25
- @uri = "info:fedora/#{@pid}"
26
- @sample_solr_hits = [{"id"=>"_PID1_", "has_model_s"=>["info:fedora/afmodel:AudioRecord"]},
27
- {"id"=>"_PID2_", "has_model_s"=>["info:fedora/afmodel:AudioRecord"]},
28
- {"id"=>"_PID3_", "has_model_s"=>["info:fedora/afmodel:AudioRecord"]}]
18
+ describe "build_statement" do
19
+ before do
20
+ @node = SpecNode2.new
21
+ end
22
+ it "should raise an error when the target is a pid, not a uri" do
23
+ lambda { @node.build_statement('info:fedora/spec:9', :is_part_of, 'spec:7') }.should raise_error ArgumentError
24
+ end
25
+ it "should run the happy path" do
26
+ stm = @node.build_statement('info:fedora/spec:9', :is_part_of, 'info:fedora/spec:7')
27
+ stm.object.to_s.should == "info:fedora/spec:7"
28
+ end
29
29
  end
30
30
 
31
- before(:each) do
32
- class SpecNode
33
- include ActiveFedora::RelationshipsHelper
34
- include ActiveFedora::SemanticNode
31
+ describe "with a bunch of objects" do
32
+ def increment_pid
33
+ @@last_pid += 1
34
+ end
35
35
 
36
- attr_accessor :pid
37
- def initialize (params={})
38
- self.pid = params[:pid]
39
- end
40
- def internal_uri
41
- 'info:fedora/' + pid.to_s
42
- end
36
+ before(:all) do
37
+ @pid = "test:sample_pid"
38
+ @uri = "info:fedora/#{@pid}"
39
+ @sample_solr_hits = [{"id"=>"_PID1_", "has_model_s"=>["info:fedora/afmodel:AudioRecord"]},
40
+ {"id"=>"_PID2_", "has_model_s"=>["info:fedora/afmodel:AudioRecord"]},
41
+ {"id"=>"_PID3_", "has_model_s"=>["info:fedora/afmodel:AudioRecord"]}]
43
42
  end
44
-
45
- class AudioRecord
46
- attr_accessor :pid
47
- def initialize (params={})
48
- self.pid = params[:pid]
43
+
44
+ before(:each) do
45
+ class SpecNode
46
+ include ActiveFedora::RelationshipsHelper
47
+ include ActiveFedora::SemanticNode
48
+
49
+ attr_accessor :pid
50
+ def initialize (params={})
51
+ self.pid = params[:pid]
52
+ end
53
+ def internal_uri
54
+ 'info:fedora/' + pid.to_s
55
+ end
49
56
  end
50
- def internal_uri
51
- 'info:fedora/' + pid.to_s
57
+
58
+ class AudioRecord
59
+ attr_accessor :pid
60
+ def initialize (params={})
61
+ self.pid = params[:pid]
62
+ end
63
+ def internal_uri
64
+ 'info:fedora/' + pid.to_s
65
+ end
52
66
  end
67
+
68
+ @node = SpecNode.new
69
+ @node.stubs(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content=>''))
70
+ @node.pid = increment_pid
71
+ @test_object = SpecNode2.new
72
+ @test_object.pid = increment_pid
73
+ @test_object.stubs(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content=>''))
74
+ @stub_relationship = stub("mock_relationship", :subject => @pid, :predicate => "isMemberOf", :object => "demo:8", :class => ActiveFedora::Relationship)
75
+ @test_relationship = ActiveFedora::Relationship.new(:subject => @pid, :predicate => "isMemberOf", :object => "demo:9")
76
+ @test_relationship1 = ActiveFedora::Relationship.new(:subject => :self, :predicate => :is_member_of, :object => "demo:10")
77
+ @test_relationship2 = ActiveFedora::Relationship.new(:subject => :self, :predicate => :is_part_of, :object => "demo:11")
78
+ @test_relationship3 = ActiveFedora::Relationship.new(:subject => @pid, :predicate => :has_part, :object => "demo:12")
79
+ @test_cmodel_relationship1 = ActiveFedora::Relationship.new(:subject => @pid, :predicate => :has_model, :object => "afmodel:SampleModel")
80
+ @test_cmodel_relationship2 = ActiveFedora::Relationship.new(:subject => @pid, :predicate => "hasModel", :object => "afmodel:OtherModel")
53
81
  end
54
82
 
55
- @node = SpecNode.new
56
- @node.stubs(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content=>''))
57
- @node.pid = increment_pid
58
- @test_object = SpecNode2.new
59
- @test_object.pid = increment_pid
60
- @test_object.stubs(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content=>''))
61
- @stub_relationship = stub("mock_relationship", :subject => @pid, :predicate => "isMemberOf", :object => "demo:8", :class => ActiveFedora::Relationship)
62
- @test_relationship = ActiveFedora::Relationship.new(:subject => @pid, :predicate => "isMemberOf", :object => "demo:9")
63
- @test_relationship1 = ActiveFedora::Relationship.new(:subject => :self, :predicate => :is_member_of, :object => "demo:10")
64
- @test_relationship2 = ActiveFedora::Relationship.new(:subject => :self, :predicate => :is_part_of, :object => "demo:11")
65
- @test_relationship3 = ActiveFedora::Relationship.new(:subject => @pid, :predicate => :has_part, :object => "demo:12")
66
- @test_cmodel_relationship1 = ActiveFedora::Relationship.new(:subject => @pid, :predicate => :has_model, :object => "afmodel:SampleModel")
67
- @test_cmodel_relationship2 = ActiveFedora::Relationship.new(:subject => @pid, :predicate => "hasModel", :object => "afmodel:OtherModel")
68
- end
69
-
70
- after(:each) do
71
- Object.send(:remove_const, :SpecNode)
72
- begin
73
- @test_object.delete
74
- rescue
75
- end
76
- begin
77
- @test_object2.delete
78
- rescue
79
- end
80
- begin
81
- @test_object3.delete
82
- rescue
83
+ after(:each) do
84
+ Object.send(:remove_const, :SpecNode)
85
+ begin
86
+ @test_object.delete
87
+ rescue
88
+ end
89
+ begin
90
+ @test_object2.delete
91
+ rescue
92
+ end
93
+ begin
94
+ @test_object3.delete
95
+ rescue
96
+ end
97
+ begin
98
+ @test_object4.delete
99
+ rescue
100
+ end
101
+ begin
102
+ @test_object5.delete
103
+ rescue
104
+ end
83
105
  end
84
- begin
85
- @test_object4.delete
86
- rescue
106
+
107
+ it 'should provide .default_predicate_namespace' do
108
+ SpecNode.should respond_to(:default_predicate_namespace)
109
+ SpecNode.default_predicate_namespace.should == 'info:fedora/fedora-system:def/relations-external#'
87
110
  end
88
- begin
89
- @test_object5.delete
90
- rescue
111
+
112
+ it 'should provide .predicate_mappings' do
113
+ SpecNode.should respond_to(:predicate_mappings)
91
114
  end
92
- end
93
-
94
- it 'should provide .default_predicate_namespace' do
95
- SpecNode.should respond_to(:default_predicate_namespace)
96
- SpecNode.default_predicate_namespace.should == 'info:fedora/fedora-system:def/relations-external#'
97
- end
98
-
99
- it 'should provide .predicate_mappings' do
100
- SpecNode.should respond_to(:predicate_mappings)
101
- end
102
115
 
103
- describe "#predicate_mappings" do
116
+ describe "#predicate_mappings" do
104
117
 
105
- it 'should return a hash' do
106
- SpecNode.predicate_mappings.should be_kind_of Hash
107
- end
118
+ it 'should return a hash' do
119
+ SpecNode.predicate_mappings.should be_kind_of Hash
120
+ end
108
121
 
109
- it "should provide mappings to the fedora ontology via the info:fedora/fedora-system:def/relations-external default namespace mapping" do
110
- SpecNode.predicate_mappings.keys.include?(SpecNode.default_predicate_namespace).should be_true
111
- SpecNode.predicate_mappings[SpecNode.default_predicate_namespace].should be_kind_of Hash
112
- end
122
+ it "should provide mappings to the fedora ontology via the info:fedora/fedora-system:def/relations-external default namespace mapping" do
123
+ SpecNode.predicate_mappings.keys.include?(SpecNode.default_predicate_namespace).should be_true
124
+ SpecNode.predicate_mappings[SpecNode.default_predicate_namespace].should be_kind_of Hash
125
+ end
113
126
 
114
- it 'should provide predicate mappings for entire Fedora Relationship Ontology' do
115
- desired_mappings = Hash[:is_member_of => "isMemberOf",
116
- :has_member => "hasMember",
117
- :is_part_of => "isPartOf",
118
- :has_part => "hasPart",
119
- :is_member_of_collection => "isMemberOfCollection",
120
- :has_collection_member => "hasCollectionMember",
121
- :is_constituent_of => "isConstituentOf",
122
- :has_constituent => "hasConstituent",
123
- :is_subset_of => "isSubsetOf",
124
- :has_subset => "hasSubset",
125
- :is_derivation_of => "isDerivationOf",
126
- :has_derivation => "hasDerivation",
127
- :is_dependent_of => "isDependentOf",
128
- :has_dependent => "hasDependent",
129
- :is_description_of => "isDescriptionOf",
130
- :has_description => "hasDescription",
131
- :is_metadata_for => "isMetadataFor",
132
- :has_metadata => "hasMetadata",
133
- :is_annotation_of => "isAnnotationOf",
134
- :has_annotation => "hasAnnotation",
135
- :has_equivalent => "hasEquivalent",
136
- :conforms_to => "conformsTo",
137
- :has_model => "hasModel"]
138
- desired_mappings.each_pair do |k,v|
139
- SpecNode.predicate_mappings[SpecNode.default_predicate_namespace].should have_key(k)
140
- SpecNode.predicate_mappings[SpecNode.default_predicate_namespace][k].should == v
127
+ it 'should provide predicate mappings for entire Fedora Relationship Ontology' do
128
+ desired_mappings = Hash[:is_member_of => "isMemberOf",
129
+ :has_member => "hasMember",
130
+ :is_part_of => "isPartOf",
131
+ :has_part => "hasPart",
132
+ :is_member_of_collection => "isMemberOfCollection",
133
+ :has_collection_member => "hasCollectionMember",
134
+ :is_constituent_of => "isConstituentOf",
135
+ :has_constituent => "hasConstituent",
136
+ :is_subset_of => "isSubsetOf",
137
+ :has_subset => "hasSubset",
138
+ :is_derivation_of => "isDerivationOf",
139
+ :has_derivation => "hasDerivation",
140
+ :is_dependent_of => "isDependentOf",
141
+ :has_dependent => "hasDependent",
142
+ :is_description_of => "isDescriptionOf",
143
+ :has_description => "hasDescription",
144
+ :is_metadata_for => "isMetadataFor",
145
+ :has_metadata => "hasMetadata",
146
+ :is_annotation_of => "isAnnotationOf",
147
+ :has_annotation => "hasAnnotation",
148
+ :has_equivalent => "hasEquivalent",
149
+ :conforms_to => "conformsTo",
150
+ :has_model => "hasModel"]
151
+ desired_mappings.each_pair do |k,v|
152
+ SpecNode.predicate_mappings[SpecNode.default_predicate_namespace].should have_key(k)
153
+ SpecNode.predicate_mappings[SpecNode.default_predicate_namespace][k].should == v
154
+ end
141
155
  end
142
156
  end
143
- end
144
157
 
145
- it 'should provide .internal_uri' do
146
- @node.should respond_to(:internal_uri)
147
- end
148
-
149
- it 'should provide #has_relationship' do
150
- SpecNode.should respond_to(:has_relationship)
151
- SpecNode.should respond_to(:has_relationship)
152
- end
153
-
154
- describe '#has_relationship' do
155
- it "should create finders based on provided relationship name" do
156
- SpecNode.has_relationship("parts", :is_part_of, :inbound => true)
157
- local_node = SpecNode.new
158
- local_node.should respond_to(:parts_ids)
159
- local_node.should respond_to(:parts_query)
160
- # local_node.should respond_to(:parts)
161
- local_node.should_not respond_to(:containers)
162
- SpecNode.has_relationship("containers", :is_member_of)
163
- local_node.should respond_to(:containers_ids)
164
- local_node.should respond_to(:containers_query)
165
- end
166
-
167
- it "should add a subject and predicate to the relationships array" do
168
- SpecNode.has_relationship("parents", :is_part_of)
169
- SpecNode.relationships.should have_key(:self)
170
- SpecNode.relationships[:self].should have_key(:is_part_of)
171
- end
172
-
173
- it "should use :inbound as the subject if :inbound => true" do
174
- SpecNode.has_relationship("parents", :is_part_of, :inbound => true)
175
- SpecNode.relationships.should have_key(:inbound)
176
- SpecNode.relationships[:inbound].should have_key(:is_part_of)
177
- end
178
-
179
- it 'should create inbound relationship finders' do
180
- SpecNode.expects(:create_inbound_relationship_finders)
181
- SpecNode.has_relationship("parts", :is_part_of, :inbound => true)
158
+ it 'should provide .internal_uri' do
159
+ @node.should respond_to(:internal_uri)
182
160
  end
183
161
 
184
- it 'should create outbound relationship finders' do
185
- SpecNode.expects(:create_outbound_relationship_finders).times(2)
186
- SpecNode.has_relationship("parts", :is_part_of, :inbound => false)
187
- SpecNode.has_relationship("container", :is_member_of)
162
+ it 'should provide #has_relationship' do
163
+ SpecNode.should respond_to(:has_relationship)
164
+ SpecNode.should respond_to(:has_relationship)
188
165
  end
189
166
 
190
- it "should create outbound relationship finders that return an array of fedora PIDs" do
191
- SpecNode.has_relationship("containers", :is_member_of, :inbound => false)
192
- local_node = SpecNode.new
193
- local_node.internal_uri = "info:fedora/#{@pid}"
167
+ describe '#has_relationship' do
168
+ it "should create finders based on provided relationship name" do
169
+ SpecNode.has_relationship("parts", :is_part_of, :inbound => true)
170
+ local_node = SpecNode.new
171
+ local_node.should respond_to(:parts_ids)
172
+ local_node.should respond_to(:parts_query)
173
+ # local_node.should respond_to(:parts)
174
+ local_node.should_not respond_to(:containers)
175
+ SpecNode.has_relationship("containers", :is_member_of)
176
+ local_node.should respond_to(:containers_ids)
177
+ local_node.should respond_to(:containers_query)
178
+ end
179
+
180
+ it "should add a subject and predicate to the relationships array" do
181
+ SpecNode.has_relationship("parents", :is_part_of)
182
+ SpecNode.relationships.should have_key(:self)
183
+ SpecNode.relationships[:self].should have_key(:is_part_of)
184
+ end
194
185
 
195
- # local_node.add_relationship(ActiveFedora::Relationship.new(:subject => :self, :predicate => :is_member_of, :object => "info:fedora/container:A") )
196
- # local_node.add_relationship(ActiveFedora::Relationship.new(:subject => :self, :predicate => :is_member_of, :object => "info:fedora/container:B") )
197
- local_node.expects(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content=>'')).at_least_once
198
- local_node.add_relationship(:is_member_of, "info:fedora/container:A")
199
- local_node.add_relationship(:is_member_of, "info:fedora/container:B")
186
+ it "should use :inbound as the subject if :inbound => true" do
187
+ SpecNode.has_relationship("parents", :is_part_of, :inbound => true)
188
+ SpecNode.relationships.should have_key(:inbound)
189
+ SpecNode.relationships[:inbound].should have_key(:is_part_of)
190
+ end
191
+
192
+ it 'should create inbound relationship finders' do
193
+ SpecNode.expects(:create_inbound_relationship_finders)
194
+ SpecNode.has_relationship("parts", :is_part_of, :inbound => true)
195
+ end
196
+
197
+ it 'should create outbound relationship finders' do
198
+ SpecNode.expects(:create_outbound_relationship_finders).times(2)
199
+ SpecNode.has_relationship("parts", :is_part_of, :inbound => false)
200
+ SpecNode.has_relationship("container", :is_member_of)
201
+ end
202
+
203
+ it "should create outbound relationship finders that return an array of fedora PIDs" do
204
+ SpecNode.has_relationship("containers", :is_member_of, :inbound => false)
205
+ local_node = SpecNode.new
206
+ local_node.internal_uri = "info:fedora/#{@pid}"
207
+
208
+ # local_node.add_relationship(ActiveFedora::Relationship.new(:subject => :self, :predicate => :is_member_of, :object => "info:fedora/container:A") )
209
+ # local_node.add_relationship(ActiveFedora::Relationship.new(:subject => :self, :predicate => :is_member_of, :object => "info:fedora/container:B") )
210
+ local_node.expects(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content=>'')).at_least_once
211
+ local_node.add_relationship(:is_member_of, "info:fedora/container:A")
212
+ local_node.add_relationship(:is_member_of, "info:fedora/container:B")
200
213
 
201
- containers_result = local_node.containers_ids
202
- containers_result.should be_instance_of(Array)
203
- containers_result.should include("container:A")
204
- containers_result.should include("container:B")
205
- end
206
-
207
- class MockHasRelationship < SpecNode2
208
- has_relationship "testing", :has_part, :type=>SpecNode2
209
- has_relationship "testing2", :has_member, :type=>SpecNode2
210
- has_relationship "testing_inbound", :has_part, :type=>SpecNode2, :inbound=>true
211
- end
214
+ containers_result = local_node.containers_ids
215
+ containers_result.should be_instance_of(Array)
216
+ containers_result.should include("container:A")
217
+ containers_result.should include("container:B")
218
+ end
212
219
 
213
- #can only duplicate predicates if not both inbound or not both outbound
214
- =begin
215
- class MockHasRelationshipDuplicatePredicate < SpecNode2
216
- has_relationship "testing", :has_member, :type=>SpecNode2
217
- had_exception = false
218
- begin
220
+ class MockHasRelationship < SpecNode2
221
+ has_relationship "testing", :has_part, :type=>SpecNode2
219
222
  has_relationship "testing2", :has_member, :type=>SpecNode2
220
- rescue
221
- had_exception = true
223
+ has_relationship "testing_inbound", :has_part, :type=>SpecNode2, :inbound=>true
222
224
  end
223
- raise "Did not raise exception if duplicate predicate used" unless had_exception
224
- end
225
- =end
226
-
227
- =begin
228
- #can only duplicate predicates if not both inbound or not both outbound
229
- class MockHasRelationshipDuplicatePredicate2 < SpecNode2
230
- has_relationship "testing", :has_member, :type=>SpecNode2, :inbound=>true
231
- had_exception = false
232
- begin
233
- has_relationship "testing2", :has_member, :type=>SpecNode2, :inbound=>true
234
- rescue
235
- had_exception = true
225
+
226
+ it 'should create relationship descriptions both inbound and outbound' do
227
+ @test_object2 = MockHasRelationship.new
228
+ @test_object2.pid = increment_pid
229
+ @test_object2.stubs(:testing_inbound).returns({})
230
+ @test_object2.expects(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content =>'')).at_least_once
231
+ @test_object2.add_relationship(:has_model, ActiveFedora::ContentModel.pid_from_ruby_class(SpecNode2))
232
+ @test_object2.should respond_to(:testing_append)
233
+ @test_object2.should respond_to(:testing_remove)
234
+ @test_object2.should respond_to(:testing2_append)
235
+ @test_object2.should respond_to(:testing2_remove)
236
+ #make sure append/remove method not created for inbound rel
237
+ @test_object2.should_not respond_to(:testing_inbound_append)
238
+ @test_object2.should_not respond_to(:testing_inbound_remove)
239
+
240
+ @test_object2.relationships_desc.should ==
241
+ {:inbound=>{"testing_inbound"=>{:type=>SpecNode2,
242
+ :predicate=>:has_part,
243
+ :inbound=>true,
244
+ :singular=>nil}},
245
+ :self=>{"testing"=>{:type=>SpecNode2,
246
+ :predicate=>:has_part,
247
+ :inbound=>false,
248
+ :singular=>nil},
249
+ "testing2"=>{:type=>SpecNode2,
250
+ :predicate=>:has_member,
251
+ :inbound=>false,
252
+ :singular=>nil}}}
236
253
  end
237
- raise "Did not raise exception if duplicate predicate used" unless had_exception
238
254
  end
239
- =end
240
255
 
241
- it 'should create relationship descriptions both inbound and outbound' do
242
- @test_object2 = MockHasRelationship.new
243
- @test_object2.pid = increment_pid
244
- @test_object2.stubs(:testing_inbound).returns({})
245
- @test_object2.expects(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content =>'')).at_least_once
246
- @test_object2.add_relationship(:has_model, ActiveFedora::ContentModel.pid_from_ruby_class(SpecNode2))
247
- @test_object2.should respond_to(:testing_append)
248
- @test_object2.should respond_to(:testing_remove)
249
- @test_object2.should respond_to(:testing2_append)
250
- @test_object2.should respond_to(:testing2_remove)
251
- #make sure append/remove method not created for inbound rel
252
- @test_object2.should_not respond_to(:testing_inbound_append)
253
- @test_object2.should_not respond_to(:testing_inbound_remove)
256
+ describe '#create_inbound_relationship_finders' do
254
257
 
255
- @test_object2.relationships_desc.should ==
256
- {:inbound=>{"testing_inbound"=>{:type=>SpecNode2,
257
- :predicate=>:has_part,
258
- :inbound=>true,
259
- :singular=>nil}},
260
- :self=>{"testing"=>{:type=>SpecNode2,
261
- :predicate=>:has_part,
262
- :inbound=>false,
263
- :singular=>nil},
264
- "testing2"=>{:type=>SpecNode2,
265
- :predicate=>:has_member,
266
- :inbound=>false,
267
- :singular=>nil}}}
268
- end
269
- end
270
-
271
- describe '#create_inbound_relationship_finders' do
272
-
273
- it 'should respond to #create_inbound_relationship_finders' do
274
- SpecNode.should respond_to(:create_inbound_relationship_finders)
275
- end
276
-
277
- it "should create finders based on provided relationship name" do
278
- SpecNode.create_inbound_relationship_finders("parts", :is_part_of, :inbound => true)
279
- local_node = SpecNode.new
280
- local_node.should respond_to(:parts_ids)
281
- local_node.should_not respond_to(:containers)
282
- SpecNode.create_inbound_relationship_finders("containers", :is_member_of, :inbound => true)
283
- local_node.should respond_to(:containers_ids)
284
- local_node.should respond_to(:containers)
285
- local_node.should respond_to(:containers_from_solr)
286
- local_node.should respond_to(:containers_query)
287
- end
288
-
289
- it "resulting finder should search against solr and use Model#load_instance to build an array of objects" do
290
- solr_result = (mock("solr result", :is_a? => true, :hits => @sample_solr_hits))
291
- SpecNode.create_inbound_relationship_finders("parts", :is_part_of, :inbound => true)
292
- local_node = SpecNode.new()
293
- local_node.expects(:pid).returns("test:sample_pid")
294
- SpecNode.expects(:relationships_desc).returns({:inbound=>{"parts"=>{:predicate=>:is_part_of}}}).at_least_once()
295
- ActiveFedora::SolrService.instance.conn.expects(:query).with("is_part_of_s:info\\:fedora/test\\:sample_pid", :rows=>25).returns(solr_result)
296
- local_node.parts.map(&:pid).should == ["_PID1_", "_PID2_", "_PID3_"]
297
- end
298
-
299
- it "resulting finder should accept :solr as :response_format value and return the raw Solr Result" do
300
- solr_result = mock("solr result")
301
- SpecNode.create_inbound_relationship_finders("constituents", :is_constituent_of, :inbound => true)
302
- local_node = SpecNode.new
303
- mock_repo = mock("repo")
304
- mock_repo.expects(:find_model).never
305
- local_node.expects(:pid).returns("test:sample_pid")
306
- SpecNode.expects(:relationships_desc).returns({:inbound=>{"constituents"=>{:predicate=>:is_constituent_of}}}).at_least_once()
307
- ActiveFedora::SolrService.instance.conn.expects(:query).with("is_constituent_of_s:info\\:fedora/test\\:sample_pid", :rows=>101).returns(solr_result)
308
- local_node.constituents(:response_format => :solr, :rows=>101).should equal(solr_result)
309
- end
310
-
311
-
312
- it "resulting _ids finder should search against solr and return an array of fedora PIDs" do
313
- SpecNode.create_inbound_relationship_finders("parts", :is_part_of, :inbound => true)
314
- local_node = SpecNode.new
315
- local_node.expects(:pid).returns("test:sample_pid")
316
- SpecNode.expects(:relationships_desc).returns({:inbound=>{"parts"=>{:predicate=>:is_part_of}}}).at_least_once()
317
- ActiveFedora::SolrService.instance.conn.expects(:query).with("is_part_of_s:info\\:fedora/test\\:sample_pid", :rows=>25).returns(mock("solr result", :hits => [Hash["id"=>"pid1"], Hash["id"=>"pid2"]]))
318
- local_node.parts(:response_format => :id_array).should == ["pid1", "pid2"]
319
- end
320
-
321
- it "resulting _ids finder should call the basic finder with :result_format => :id_array" do
322
- SpecNode.create_inbound_relationship_finders("parts", :is_part_of, :inbound => true)
323
- local_node = SpecNode.new
324
- local_node.expects(:parts).with(:response_format => :id_array)
325
- local_node.parts_ids
326
- end
327
-
328
- it "resulting _query finder should call relationship_query" do
329
- SpecNode.create_inbound_relationship_finders("parts", :is_part_of, :inbound => true)
330
- local_node = SpecNode.new
331
- local_node.expects(:relationship_query).with("parts")
332
- local_node.parts_query
333
- end
334
-
335
- it "resulting finder should provide option of filtering results by :type"
336
- end
337
-
338
- describe '#create_outbound_relationship_finders' do
339
-
340
- it 'should respond to #create_outbound_relationship_finders' do
341
- SpecNode.should respond_to(:create_outbound_relationship_finders)
342
- end
343
-
344
- it "should create finders based on provided relationship name" do
345
- SpecNode.create_outbound_relationship_finders("parts", :is_part_of)
346
- local_node = SpecNode.new
347
- local_node.should respond_to(:parts_ids)
348
- #local_node.should respond_to(:parts) #.with(:type => "AudioRecord")
349
- local_node.should_not respond_to(:containers)
350
- SpecNode.create_outbound_relationship_finders("containers", :is_member_of)
351
- local_node.should respond_to(:containers_ids)
352
- local_node.should respond_to(:containers)
353
- local_node.should respond_to(:containers_from_solr)
354
- local_node.should respond_to(:containers_query)
355
- end
356
-
357
- describe " resulting finder" do
358
- it "should read from relationships array and use Repository.find_model to build an array of objects" do
359
- SpecNode.create_outbound_relationship_finders("containers", :is_member_of)
258
+ it 'should respond to #create_inbound_relationship_finders' do
259
+ SpecNode.should respond_to(:create_inbound_relationship_finders)
260
+ end
261
+
262
+ it "should create finders based on provided relationship name" do
263
+ SpecNode.create_inbound_relationship_finders("parts", :is_part_of, :inbound => true)
360
264
  local_node = SpecNode.new
361
- local_node.expects(:ids_for_outbound).with(:is_member_of).returns(["my:_PID1_", "my:_PID2_", "my:_PID3_"])
362
- mock_repo = mock("repo")
363
- solr_result = mock("solr result", :is_a? => true)
364
- solr_result.expects(:hits).returns(
365
- [{"id"=> "my:_PID1_", "has_model_s"=>["info:fedora/afmodel:SpecNode"]},
366
- {"id"=> "my:_PID2_", "has_model_s"=>["info:fedora/afmodel:SpecNode"]},
367
- {"id"=> "my:_PID3_", "has_model_s"=>["info:fedora/afmodel:SpecNode"]}])
368
-
369
- ActiveFedora::SolrService.instance.conn.expects(:query).with("id:my\\:_PID1_ OR id:my\\:_PID2_ OR id:my\\:_PID3_").returns(solr_result)
370
- local_node.containers.map(&:pid).should == ["my:_PID1_", "my:_PID2_", "my:_PID3_"]
265
+ local_node.should respond_to(:parts_ids)
266
+ local_node.should_not respond_to(:containers)
267
+ SpecNode.create_inbound_relationship_finders("containers", :is_member_of, :inbound => true)
268
+ local_node.should respond_to(:containers_ids)
269
+ local_node.should respond_to(:containers)
270
+ local_node.should respond_to(:containers_from_solr)
271
+ local_node.should respond_to(:containers_query)
371
272
  end
372
-
373
- it "should accept :solr as :response_format value and return the raw Solr Result" do
273
+
274
+ it "resulting finder should search against solr and use Model#load_instance to build an array of objects" do
275
+ solr_result = (mock("solr result", :is_a? => true, :hits => @sample_solr_hits))
276
+ SpecNode.create_inbound_relationship_finders("parts", :is_part_of, :inbound => true)
277
+ local_node = SpecNode.new()
278
+ local_node.expects(:pid).returns("test:sample_pid")
279
+ SpecNode.expects(:relationships_desc).returns({:inbound=>{"parts"=>{:predicate=>:is_part_of}}}).at_least_once()
280
+ ActiveFedora::SolrService.instance.conn.expects(:query).with("is_part_of_s:info\\:fedora/test\\:sample_pid", :rows=>25).returns(solr_result)
281
+ local_node.parts.map(&:pid).should == ["_PID1_", "_PID2_", "_PID3_"]
282
+ end
283
+
284
+ it "resulting finder should accept :solr as :response_format value and return the raw Solr Result" do
374
285
  solr_result = mock("solr result")
375
- SpecNode.create_outbound_relationship_finders("constituents", :is_constituent_of)
286
+ SpecNode.create_inbound_relationship_finders("constituents", :is_constituent_of, :inbound => true)
376
287
  local_node = SpecNode.new
377
288
  mock_repo = mock("repo")
378
289
  mock_repo.expects(:find_model).never
379
- local_node.expects(:rels_ext).returns(stub('rels-ext', :content=>''))
380
- ActiveFedora::SolrService.instance.conn.expects(:query).returns(solr_result)
381
- local_node.constituents(:response_format => :solr).should equal(solr_result)
290
+ local_node.expects(:pid).returns("test:sample_pid")
291
+ SpecNode.expects(:relationships_desc).returns({:inbound=>{"constituents"=>{:predicate=>:is_constituent_of}}}).at_least_once()
292
+ ActiveFedora::SolrService.instance.conn.expects(:query).with("is_constituent_of_s:info\\:fedora/test\\:sample_pid", :rows=>101).returns(solr_result)
293
+ local_node.constituents(:response_format => :solr, :rows=>101).should equal(solr_result)
382
294
  end
383
295
 
384
- it "(:response_format => :id_array) should read from relationships array" do
385
- SpecNode.create_outbound_relationship_finders("containers", :is_member_of)
296
+
297
+ it "resulting _ids finder should search against solr and return an array of fedora PIDs" do
298
+ SpecNode.create_inbound_relationship_finders("parts", :is_part_of, :inbound => true)
386
299
  local_node = SpecNode.new
387
- local_node.expects(:ids_for_outbound).with(:is_member_of).returns([])
388
- local_node.containers_ids
300
+ local_node.expects(:pid).returns("test:sample_pid")
301
+ SpecNode.expects(:relationships_desc).returns({:inbound=>{"parts"=>{:predicate=>:is_part_of}}}).at_least_once()
302
+ ActiveFedora::SolrService.instance.conn.expects(:query).with("is_part_of_s:info\\:fedora/test\\:sample_pid", :rows=>25).returns(mock("solr result", :hits => [Hash["id"=>"pid1"], Hash["id"=>"pid2"]]))
303
+ local_node.parts(:response_format => :id_array).should == ["pid1", "pid2"]
389
304
  end
390
-
391
- it "(:response_format => :id_array) should return an array of fedora PIDs" do
392
- SpecNode.create_outbound_relationship_finders("containers", :is_member_of)
305
+
306
+ it "resulting _ids finder should call the basic finder with :result_format => :id_array" do
307
+ SpecNode.create_inbound_relationship_finders("parts", :is_part_of, :inbound => true)
393
308
  local_node = SpecNode.new
394
- local_node.expects(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content=>'')).at_least_once
395
- local_node.add_relationship(@test_relationship1.predicate, @test_relationship1.object)
396
- result = local_node.containers_ids
397
- result.should be_instance_of(Array)
398
- result.should include("demo:10")
309
+ local_node.expects(:parts).with(:response_format => :id_array)
310
+ local_node.parts_ids
311
+ end
312
+
313
+ it "resulting _query finder should call relationship_query" do
314
+ SpecNode.create_inbound_relationship_finders("parts", :is_part_of, :inbound => true)
315
+ local_node = SpecNode.new
316
+ local_node.expects(:relationship_query).with("parts")
317
+ local_node.parts_query
399
318
  end
400
319
 
401
- it "should provide option of filtering results by :type"
320
+ it "resulting finder should provide option of filtering results by :type"
402
321
  end
403
322
 
404
- describe " resulting _ids finder" do
405
- it "should call the basic finder with :result_format => :id_array" do
323
+ describe '#create_outbound_relationship_finders' do
324
+
325
+ it 'should respond to #create_outbound_relationship_finders' do
326
+ SpecNode.should respond_to(:create_outbound_relationship_finders)
327
+ end
328
+
329
+ it "should create finders based on provided relationship name" do
406
330
  SpecNode.create_outbound_relationship_finders("parts", :is_part_of)
407
331
  local_node = SpecNode.new
408
- local_node.expects(:parts).with(:response_format => :id_array)
409
- local_node.parts_ids
332
+ local_node.should respond_to(:parts_ids)
333
+ #local_node.should respond_to(:parts) #.with(:type => "AudioRecord")
334
+ local_node.should_not respond_to(:containers)
335
+ SpecNode.create_outbound_relationship_finders("containers", :is_member_of)
336
+ local_node.should respond_to(:containers_ids)
337
+ local_node.should respond_to(:containers)
338
+ local_node.should respond_to(:containers_from_solr)
339
+ local_node.should respond_to(:containers_query)
410
340
  end
411
- end
341
+
342
+ describe " resulting finder" do
343
+ it "should read from relationships array and use Repository.find_model to build an array of objects" do
344
+ SpecNode.create_outbound_relationship_finders("containers", :is_member_of)
345
+ local_node = SpecNode.new
346
+ local_node.expects(:ids_for_outbound).with(:is_member_of).returns(["my:_PID1_", "my:_PID2_", "my:_PID3_"])
347
+ mock_repo = mock("repo")
348
+ solr_result = mock("solr result", :is_a? => true)
349
+ solr_result.expects(:hits).returns(
350
+ [{"id"=> "my:_PID1_", "has_model_s"=>["info:fedora/afmodel:SpecNode"]},
351
+ {"id"=> "my:_PID2_", "has_model_s"=>["info:fedora/afmodel:SpecNode"]},
352
+ {"id"=> "my:_PID3_", "has_model_s"=>["info:fedora/afmodel:SpecNode"]}])
412
353
 
413
- it "resulting _query finder should call relationship_query" do
414
- SpecNode.create_outbound_relationship_finders("containers", :is_member_of)
415
- local_node = SpecNode.new
416
- local_node.expects(:relationship_query).with("containers")
417
- local_node.containers_query
418
- end
419
- end
420
-
421
- describe ".create_bidirectional_relationship_finder" do
422
- before(:each) do
423
- SpecNode.create_bidirectional_relationship_finders("all_parts", :has_part, :is_part_of)
424
- @local_node = SpecNode.new
425
- @local_node.pid = @pid
426
- @local_node.internal_uri = @uri
427
- end
428
- it "should create inbound & outbound finders" do
429
- @local_node.should respond_to(:all_parts_inbound)
430
- @local_node.should respond_to(:all_parts_outbound)
431
- end
432
- it "should rely on inbound & outbound finders" do
433
- @local_node.expects(:all_parts_inbound).with(:rows => 25).returns(["foo1"])
434
- @local_node.expects(:all_parts_outbound).with(:rows => 25).returns(["foo2"])
435
- @local_node.all_parts.should == ["foo1", "foo2"]
436
- end
437
- it "(:response_format => :id_array) should rely on inbound & outbound finders" do
438
- @local_node.expects(:all_parts_inbound).with(:response_format=>:id_array, :rows => 34).returns(["fooA"])
439
- @local_node.expects(:all_parts_outbound).with(:response_format=>:id_array, :rows => 34).returns(["fooB"])
440
- @local_node.all_parts(:response_format=>:id_array, :rows => 34).should == ["fooA", "fooB"]
441
- end
442
- it "(:response_format => :solr) should construct a solr query that combines inbound and outbound searches" do
443
- # get the id array for outbound relationships then construct solr query by combining id array with inbound relationship search
444
- @local_node.expects(:ids_for_outbound).with(:has_part).returns(["mypid:1"])
445
- id_array_query = ActiveFedora::SolrService.construct_query_for_pids(["mypid:1"])
446
- solr_result = mock("solr result")
447
- ActiveFedora::SolrService.instance.conn.expects(:query).with("#{id_array_query} OR (is_part_of_s:info\\:fedora/test\\:sample_pid)", :rows=>25).returns(solr_result)
448
- @local_node.all_parts(:response_format=>:solr)
449
- end
354
+ ActiveFedora::SolrService.instance.conn.expects(:query).with("id:my\\:_PID1_ OR id:my\\:_PID2_ OR id:my\\:_PID3_").returns(solr_result)
355
+ local_node.containers.map(&:pid).should == ["my:_PID1_", "my:_PID2_", "my:_PID3_"]
356
+ end
357
+
358
+ it "should accept :solr as :response_format value and return the raw Solr Result" do
359
+ solr_result = mock("solr result")
360
+ SpecNode.create_outbound_relationship_finders("constituents", :is_constituent_of)
361
+ local_node = SpecNode.new
362
+ mock_repo = mock("repo")
363
+ mock_repo.expects(:find_model).never
364
+ local_node.expects(:rels_ext).returns(stub('rels-ext', :content=>''))
365
+ ActiveFedora::SolrService.instance.conn.expects(:query).returns(solr_result)
366
+ local_node.constituents(:response_format => :solr).should equal(solr_result)
367
+ end
368
+
369
+ it "(:response_format => :id_array) should read from relationships array" do
370
+ SpecNode.create_outbound_relationship_finders("containers", :is_member_of)
371
+ local_node = SpecNode.new
372
+ local_node.expects(:ids_for_outbound).with(:is_member_of).returns([])
373
+ local_node.containers_ids
374
+ end
375
+
376
+ it "(:response_format => :id_array) should return an array of fedora PIDs" do
377
+ SpecNode.create_outbound_relationship_finders("containers", :is_member_of)
378
+ local_node = SpecNode.new
379
+ local_node.expects(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content=>'')).at_least_once
380
+ local_node.add_relationship(@test_relationship1.predicate, @test_relationship1.object)
381
+ result = local_node.containers_ids
382
+ result.should be_instance_of(Array)
383
+ result.should include("demo:10")
384
+ end
385
+
386
+ it "should provide option of filtering results by :type"
387
+ end
388
+
389
+ describe " resulting _ids finder" do
390
+ it "should call the basic finder with :result_format => :id_array" do
391
+ SpecNode.create_outbound_relationship_finders("parts", :is_part_of)
392
+ local_node = SpecNode.new
393
+ local_node.expects(:parts).with(:response_format => :id_array)
394
+ local_node.parts_ids
395
+ end
396
+ end
450
397
 
451
- it "should register both inbound and outbound predicate components" do
452
- @local_node.class.relationships[:inbound].has_key?(:is_part_of).should == true
453
- @local_node.class.relationships[:self].has_key?(:has_part).should == true
454
- end
455
-
456
- it "should register relationship names for inbound, outbound" do
457
- @local_node.relationship_names.include?("all_parts_inbound").should == true
458
- @local_node.relationship_names.include?("all_parts_outbound").should == true
398
+ it "resulting _query finder should call relationship_query" do
399
+ SpecNode.create_outbound_relationship_finders("containers", :is_member_of)
400
+ local_node = SpecNode.new
401
+ local_node.expects(:relationship_query).with("containers")
402
+ local_node.containers_query
403
+ end
459
404
  end
405
+
406
+ describe ".create_bidirectional_relationship_finder" do
407
+ before(:each) do
408
+ SpecNode.create_bidirectional_relationship_finders("all_parts", :has_part, :is_part_of)
409
+ @local_node = SpecNode.new
410
+ @local_node.pid = @pid
411
+ @local_node.internal_uri = @uri
412
+ end
413
+ it "should create inbound & outbound finders" do
414
+ @local_node.should respond_to(:all_parts_inbound)
415
+ @local_node.should respond_to(:all_parts_outbound)
416
+ end
417
+ it "should rely on inbound & outbound finders" do
418
+ @local_node.expects(:all_parts_inbound).with(:rows => 25).returns(["foo1"])
419
+ @local_node.expects(:all_parts_outbound).with(:rows => 25).returns(["foo2"])
420
+ @local_node.all_parts.should == ["foo1", "foo2"]
421
+ end
422
+ it "(:response_format => :id_array) should rely on inbound & outbound finders" do
423
+ @local_node.expects(:all_parts_inbound).with(:response_format=>:id_array, :rows => 34).returns(["fooA"])
424
+ @local_node.expects(:all_parts_outbound).with(:response_format=>:id_array, :rows => 34).returns(["fooB"])
425
+ @local_node.all_parts(:response_format=>:id_array, :rows => 34).should == ["fooA", "fooB"]
426
+ end
427
+ it "(:response_format => :solr) should construct a solr query that combines inbound and outbound searches" do
428
+ # get the id array for outbound relationships then construct solr query by combining id array with inbound relationship search
429
+ @local_node.expects(:ids_for_outbound).with(:has_part).returns(["mypid:1"])
430
+ id_array_query = ActiveFedora::SolrService.construct_query_for_pids(["mypid:1"])
431
+ solr_result = mock("solr result")
432
+ ActiveFedora::SolrService.instance.conn.expects(:query).with("#{id_array_query} OR (is_part_of_s:info\\:fedora/test\\:sample_pid)", :rows=>25).returns(solr_result)
433
+ @local_node.all_parts(:response_format=>:solr)
434
+ end
460
435
 
461
- it "should register finder methods for the bidirectional relationship name" do
462
- @local_node.should respond_to(:all_parts)
463
- @local_node.should respond_to(:all_parts_ids)
464
- @local_node.should respond_to(:all_parts_query)
465
- @local_node.should respond_to(:all_parts_from_solr)
466
- end
436
+ it "should register both inbound and outbound predicate components" do
437
+ @local_node.class.relationships[:inbound].has_key?(:is_part_of).should == true
438
+ @local_node.class.relationships[:self].has_key?(:has_part).should == true
439
+ end
440
+
441
+ it "should register relationship names for inbound, outbound" do
442
+ @local_node.relationship_names.include?("all_parts_inbound").should == true
443
+ @local_node.relationship_names.include?("all_parts_outbound").should == true
444
+ end
467
445
 
468
- it "resulting _query finder should call relationship_query" do
469
- SpecNode.create_bidirectional_relationship_finders("containers", :is_member_of, :has_member)
470
- local_node = SpecNode.new
471
- local_node.expects(:relationship_query).with("containers")
472
- local_node.containers_query
473
- end
474
- end
475
-
476
- describe "#has_bidirectional_relationship" do
477
- it "should ..." do
478
- SpecNode.expects(:create_bidirectional_relationship_finders).with("all_parts", :has_part, :is_part_of, {})
479
- SpecNode.has_bidirectional_relationship("all_parts", :has_part, :is_part_of)
480
- end
446
+ it "should register finder methods for the bidirectional relationship name" do
447
+ @local_node.should respond_to(:all_parts)
448
+ @local_node.should respond_to(:all_parts_ids)
449
+ @local_node.should respond_to(:all_parts_query)
450
+ @local_node.should respond_to(:all_parts_from_solr)
451
+ end
481
452
 
482
- it "should have relationships_by_name and relationships hashes contain bidirectionally related objects" do
483
- SpecNode.has_bidirectional_relationship("all_parts", :has_part, :is_part_of)
484
- @local_node = SpecNode.new
485
- @local_node.pid = "mypid1"
486
- @local_node2 = SpecNode.new
487
- @local_node2.pid = "mypid2"
488
- r = ActiveFedora::Relationship.new({:subject=>:self,:predicate=>:has_model,:object=>ActiveFedora::ContentModel.pid_from_ruby_class(SpecNode)})
489
- @local_node.expects(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content=>'')).at_least_once
490
- @local_node.add_relationship(r.predicate, r.object)
491
- @local_node2.expects(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content=>'')).at_least_once
492
- @local_node2.add_relationship(r.predicate, r.object)
493
- r2 = ActiveFedora::Relationship.new({:subject=>:self,:predicate=>:has_part,:object=>@local_node2})
494
- @local_node.add_relationship(r2.predicate, r2.object)
495
- r3 = ActiveFedora::Relationship.new({:subject=>:self,:predicate=>:has_part,:object=>@local_node})
496
- @local_node2.add_relationship(r3.predicate, r3.object)
497
- @local_node.ids_for_outbound(:has_part).should == [@local_node2.pid]
498
- @local_node.ids_for_outbound(:has_model).should == ['afmodel:SpecNode']
499
- @local_node2.ids_for_outbound(:has_part).should == [@local_node.pid]
500
- @local_node2.ids_for_outbound(:has_model).should == ['afmodel:SpecNode']
501
- @local_node.relationships_by_name(false).should == {:self=>{"all_parts_outbound"=>[r2.object]},:inbound=>{"all_parts_inbound"=>[]}}
502
- @local_node2.relationships_by_name(false).should == {:self=>{"all_parts_outbound"=>[r3.object]},:inbound=>{"all_parts_inbound"=>[]}}
453
+ it "resulting _query finder should call relationship_query" do
454
+ SpecNode.create_bidirectional_relationship_finders("containers", :is_member_of, :has_member)
455
+ local_node = SpecNode.new
456
+ local_node.expects(:relationship_query).with("containers")
457
+ local_node.containers_query
458
+ end
503
459
  end
504
- end
505
-
506
- describe ".add_relationship" do
507
- it "should add relationship to the relationships hash" do
508
- @node.add_relationship(@test_relationship.predicate, @test_relationship.object)
509
- @node.ids_for_outbound("isMemberOf").should == ['demo:9']
460
+
461
+ describe "#has_bidirectional_relationship" do
462
+ it "should ..." do
463
+ SpecNode.expects(:create_bidirectional_relationship_finders).with("all_parts", :has_part, :is_part_of, {})
464
+ SpecNode.has_bidirectional_relationship("all_parts", :has_part, :is_part_of)
465
+ end
466
+
467
+ it "should have relationships_by_name and relationships hashes contain bidirectionally related objects" do
468
+ SpecNode.has_bidirectional_relationship("all_parts", :has_part, :is_part_of)
469
+ @local_node = SpecNode.new
470
+ @local_node.pid = "mypid1"
471
+ @local_node2 = SpecNode.new
472
+ @local_node2.pid = "mypid2"
473
+ r = ActiveFedora::Relationship.new({:subject=>:self,:predicate=>:has_model,:object=>ActiveFedora::ContentModel.pid_from_ruby_class(SpecNode)})
474
+ @local_node.expects(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content=>'')).at_least_once
475
+ @local_node.add_relationship(r.predicate, r.object)
476
+ @local_node2.expects(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content=>'')).at_least_once
477
+ @local_node2.add_relationship(r.predicate, r.object)
478
+ r2 = ActiveFedora::Relationship.new({:subject=>:self,:predicate=>:has_part,:object=>@local_node2})
479
+ @local_node.add_relationship(r2.predicate, r2.object)
480
+ r3 = ActiveFedora::Relationship.new({:subject=>:self,:predicate=>:has_part,:object=>@local_node})
481
+ @local_node2.add_relationship(r3.predicate, r3.object)
482
+ @local_node.ids_for_outbound(:has_part).should == [@local_node2.pid]
483
+ @local_node.ids_for_outbound(:has_model).should == ['afmodel:SpecNode']
484
+ @local_node2.ids_for_outbound(:has_part).should == [@local_node.pid]
485
+ @local_node2.ids_for_outbound(:has_model).should == ['afmodel:SpecNode']
486
+ @local_node.relationships_by_name(false).should == {:self=>{"all_parts_outbound"=>[r2.object]},:inbound=>{"all_parts_inbound"=>[]}}
487
+ @local_node2.relationships_by_name(false).should == {:self=>{"all_parts_outbound"=>[r3.object]},:inbound=>{"all_parts_inbound"=>[]}}
488
+ end
510
489
  end
511
490
 
512
- it "adding relationship to an instance should not affect class-level relationships hash" do
513
- local_test_node1 = SpecNode.new
514
- local_test_node2 = SpecNode.new
515
- local_test_node1.expects(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content=>'')).at_least_once
516
- local_test_node1.add_relationship(@test_relationship1.predicate, @test_relationship1.object)
517
- local_test_node2.expects(:rels_ext).returns(stub('rels-ext', :content=>''))
491
+ describe ".add_relationship" do
492
+ it "should add relationship to the relationships hash" do
493
+ @node.add_relationship(@test_relationship.predicate, @test_relationship.object)
494
+ @node.ids_for_outbound("isMemberOf").should == ['demo:9']
495
+ end
496
+
497
+ it "adding relationship to an instance should not affect class-level relationships hash" do
498
+ local_test_node1 = SpecNode.new
499
+ local_test_node2 = SpecNode.new
500
+ local_test_node1.expects(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content=>'')).at_least_once
501
+ local_test_node1.add_relationship(@test_relationship1.predicate, @test_relationship1.object)
502
+ local_test_node2.expects(:rels_ext).returns(stub('rels-ext', :content=>''))
503
+
504
+ local_test_node1.ids_for_outbound(:is_member_of).should == ["demo:10"]
505
+ local_test_node2.ids_for_outbound(:is_member_of).should == []
506
+ end
518
507
 
519
- local_test_node1.ids_for_outbound(:is_member_of).should == ["demo:10"]
520
- local_test_node2.ids_for_outbound(:is_member_of).should == []
521
508
  end
522
509
 
523
- end
524
-
525
- describe '#relationships' do
526
-
527
- it "should return a hash" do
528
- SpecNode.relationships.class.should == Hash
529
- end
510
+ describe '#relationships' do
511
+
512
+ it "should return a hash" do
513
+ SpecNode.relationships.class.should == Hash
514
+ end
530
515
 
531
- end
516
+ end
532
517
 
533
-
534
- it "should provide a relationship setter"
535
- it "should provide a relationship getter"
536
- it "should provide a relationship deleter"
537
518
 
538
- describe '.register_triple' do
539
- it 'should add triples to the relationships hash' do
540
- @node.register_triple(@node.internal_uri, :is_part_of, "info:fedora/demo:10")
541
- @node.register_triple(@node.internal_uri, :is_member_of, "info:fedora/demo:11")
542
- @node.ids_for_outbound(:is_part_of).should == ['demo:10']
543
- @node.ids_for_outbound(:is_member_of).should == ['demo:11']
519
+ it "should provide a relationship setter"
520
+ it "should provide a relationship getter"
521
+ it "should provide a relationship deleter"
522
+
523
+ describe '.register_triple' do
524
+ it 'should add triples to the relationships hash' do
525
+ @node.register_triple(@node.internal_uri, :is_part_of, "info:fedora/demo:10")
526
+ @node.register_triple(@node.internal_uri, :is_member_of, "info:fedora/demo:11")
527
+ @node.ids_for_outbound(:is_part_of).should == ['demo:10']
528
+ @node.ids_for_outbound(:is_member_of).should == ['demo:11']
529
+ end
530
+
531
+ it "should not be a class level method"
544
532
  end
545
533
 
546
- it "should not be a class level method"
547
- end
548
-
549
- it 'should provide #predicate_lookup that maps symbols to common RELS-EXT predicates' do
550
- SpecNode.should respond_to(:predicate_lookup)
551
- SpecNode.predicate_lookup(:is_part_of).should == "isPartOf"
552
- SpecNode.predicate_lookup(:is_member_of).should == "isMemberOf"
553
- SpecNode.predicate_lookup("isPartOfCollection").should == "isPartOfCollection"
554
- SpecNode.predicate_config[:predicate_mapping].merge!({"some_namespace"=>{:has_foo=>"hasFOO"}})
555
- SpecNode.find_predicate(:has_foo).should == ["hasFOO","some_namespace"]
556
- SpecNode.predicate_lookup(:has_foo,"some_namespace").should == "hasFOO"
557
- #SpecNode.predicate_lookup(:has_foo)
558
- lambda { SpecNode.predicate_lookup(:has_foo) }.should raise_error ActiveFedora::UnregisteredPredicateError
559
- end
560
-
561
-
562
- it "should provide .outbound_relationships" do
563
- @node.should respond_to(:outbound_relationships)
564
- end
565
-
534
+ it 'should provide #predicate_lookup that maps symbols to common RELS-EXT predicates' do
535
+ SpecNode.should respond_to(:predicate_lookup)
536
+ SpecNode.predicate_lookup(:is_part_of).should == "isPartOf"
537
+ SpecNode.predicate_lookup(:is_member_of).should == "isMemberOf"
538
+ SpecNode.predicate_lookup("isPartOfCollection").should == "isPartOfCollection"
539
+ SpecNode.predicate_config[:predicate_mapping].merge!({"some_namespace"=>{:has_foo=>"hasFOO"}})
540
+ SpecNode.find_predicate(:has_foo).should == ["hasFOO","some_namespace"]
541
+ SpecNode.predicate_lookup(:has_foo,"some_namespace").should == "hasFOO"
542
+ #SpecNode.predicate_lookup(:has_foo)
543
+ lambda { SpecNode.predicate_lookup(:has_foo) }.should raise_error ActiveFedora::UnregisteredPredicateError
544
+ end
545
+
546
+
547
+ it "should provide .outbound_relationships" do
548
+ @node.should respond_to(:outbound_relationships)
549
+ end
566
550
 
567
- describe '#remove_relationship' do
568
- it 'should remove a relationship from the relationships hash' do
569
- r = ActiveFedora::Relationship.new({:subject=>:self,:predicate=>:has_part,:object=>"info:fedora/3"})
570
- r2 = ActiveFedora::Relationship.new({:subject=>:self,:predicate=>:has_part,:object=>"info:fedora/4"})
571
- @test_object.expects(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content=>'')).times(6)
572
- @test_object.add_relationship(r.predicate, r.object)
573
- @test_object.add_relationship(r2.predicate, r2.object)
574
- #check both are there
575
- @test_object.ids_for_outbound(:has_part).should include "3", "4"
576
- @test_object.remove_relationship(r.predicate, r.object)
577
- #check returns false if relationship does not exist and does nothing with different predicate
578
- rBad = ActiveFedora::Relationship.new({:subject=>:self,:predicate=>:has_member,:object=>"info:fedora/4"})
579
- @test_object.remove_relationship(rBad.predicate, rBad.object)
580
- #check only one item removed
581
- @test_object.ids_for_outbound(:has_part).should == ['4']
582
- @test_object.remove_relationship(r2.predicate, r2.object)
583
- #check last item removed and predicate removed since now emtpy
584
- @test_object.ids_for_outbound(:has_part).should == []
585
551
 
552
+ describe '#remove_relationship' do
553
+ it 'should remove a relationship from the relationships hash' do
554
+ r = ActiveFedora::Relationship.new({:subject=>:self,:predicate=>:has_part,:object=>"info:fedora/3"})
555
+ r2 = ActiveFedora::Relationship.new({:subject=>:self,:predicate=>:has_part,:object=>"info:fedora/4"})
556
+ @test_object.expects(:rels_ext).returns(stub("rels_ext", :dirty= => true, :content=>'')).times(6)
557
+ @test_object.add_relationship(r.predicate, r.object)
558
+ @test_object.add_relationship(r2.predicate, r2.object)
559
+ #check both are there
560
+ @test_object.ids_for_outbound(:has_part).should include "3", "4"
561
+ @test_object.remove_relationship(r.predicate, r.object)
562
+ #check returns false if relationship does not exist and does nothing with different predicate
563
+ rBad = ActiveFedora::Relationship.new({:subject=>:self,:predicate=>:has_member,:object=>"info:fedora/4"})
564
+ @test_object.remove_relationship(rBad.predicate, rBad.object)
565
+ #check only one item removed
566
+ @test_object.ids_for_outbound(:has_part).should == ['4']
567
+ @test_object.remove_relationship(r2.predicate, r2.object)
568
+ #check last item removed and predicate removed since now emtpy
569
+ @test_object.ids_for_outbound(:has_part).should == []
570
+
571
+ end
586
572
  end
587
- end
588
-
589
- describe '#relationship_exists?' do
590
- it 'should return true if a relationship does exist' do
591
- @test_object3 = SpecNode2.new
592
- @test_object3.pid = increment_pid
593
- r = ActiveFedora::Relationship.new({:subject=>:self,:predicate=>:has_member,:object=>@test_object3})
594
- @test_object.relationship_exists?(@test_object.internal_uri,r.predicate,r.object).should == false
595
- @test_object.expects(:rels_ext).returns(stub("rels_ext", :dirty= => true))
596
- @test_object.add_relationship(r.predicate, r.object)
597
- @test_object.relationship_exists?(@test_object.internal_uri,r.predicate,r.object).should == true
573
+
574
+ describe '#relationship_exists?' do
575
+ it 'should return true if a relationship does exist' do
576
+ @test_object3 = SpecNode2.new
577
+ @test_object3.pid = increment_pid
578
+ r = ActiveFedora::Relationship.new({:subject=>:self,:predicate=>:has_member,:object=>@test_object3})
579
+ @test_object.relationship_exists?(@test_object.internal_uri,r.predicate,r.object).should == false
580
+ @test_object.expects(:rels_ext).returns(stub("rels_ext", :dirty= => true))
581
+ @test_object.add_relationship(r.predicate, r.object)
582
+ @test_object.relationship_exists?(@test_object.internal_uri,r.predicate,r.object).should == true
583
+ end
598
584
  end
599
- end
600
585
 
601
- describe '#assert_kind_of' do
602
- it 'should raise an exception if object supplied is not the correct type' do
603
- had_exception = false
604
- begin
605
- @test_object.assert_kind_of 'SpecNode2', @test_object, ActiveFedora::Base
606
- rescue
607
- had_exception = true
586
+ describe '#assert_kind_of' do
587
+ it 'should raise an exception if object supplied is not the correct type' do
588
+ had_exception = false
589
+ begin
590
+ @test_object.assert_kind_of 'SpecNode2', @test_object, ActiveFedora::Base
591
+ rescue
592
+ had_exception = true
593
+ end
594
+ raise "Failed to throw exception with kind of mismatch" unless had_exception
595
+ #now should not throw any exception
596
+ @test_object.assert_kind_of 'SpecNode2', @test_object, SpecNode2
608
597
  end
609
- raise "Failed to throw exception with kind of mismatch" unless had_exception
610
- #now should not throw any exception
611
- @test_object.assert_kind_of 'SpecNode2', @test_object, SpecNode2
612
598
  end
613
599
  end
614
600
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active-fedora
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1923832003
4
+ hash: 1923832005
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 3
8
8
  - 1
9
9
  - 0
10
10
  - pre
11
- - 13
12
- version: 3.1.0.pre13
11
+ - 14
12
+ version: 3.1.0.pre14
13
13
  platform: ruby
14
14
  authors:
15
15
  - Matt Zumwalt