active-fedora 3.3.2 → 4.0.0.rc1
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.
- data/Gemfile.lock +21 -22
- data/History.txt +9 -0
- data/README.textile +1 -1
- data/TODO +1 -0
- data/active-fedora.gemspec +3 -3
- data/config/fedora.yml +9 -3
- data/lib/active_fedora.rb +43 -33
- data/lib/active_fedora/base.rb +80 -31
- data/lib/active_fedora/config.rb +38 -0
- data/lib/active_fedora/content_model.rb +0 -6
- data/lib/active_fedora/datastream.rb +22 -0
- data/lib/active_fedora/delegating.rb +24 -25
- data/lib/active_fedora/digital_object.rb +2 -1
- data/lib/active_fedora/file_management.rb +1 -0
- data/lib/active_fedora/fixture_exporter.rb +1 -1
- data/lib/active_fedora/fixture_loader.rb +3 -3
- data/lib/active_fedora/metadata_datastream.rb +6 -0
- data/lib/active_fedora/model.rb +24 -5
- data/lib/active_fedora/nokogiri_datastream.rb +1 -0
- data/lib/active_fedora/ntriples_rdf_datastream.rb +0 -1
- data/lib/active_fedora/persistence.rb +2 -1
- data/lib/active_fedora/predicates.rb +27 -27
- data/lib/active_fedora/rdf_datastream.rb +104 -30
- data/lib/active_fedora/rels_ext_datastream.rb +14 -10
- data/lib/active_fedora/rubydora_connection.rb +4 -27
- data/lib/active_fedora/service_definitions.rb +2 -3
- data/lib/active_fedora/solr_digital_object.rb +22 -8
- data/lib/active_fedora/solr_service.rb +1 -1
- data/lib/active_fedora/unsaved_digital_object.rb +1 -4
- data/lib/active_fedora/version.rb +1 -1
- data/lib/tasks/active_fedora.rake +6 -6
- data/lib/tasks/active_fedora_dev.rake +0 -1
- data/spec/fixtures/mixed_rdf_descMetadata.nt +6 -0
- data/spec/fixtures/rails_root/config/fedora.yml +3 -1
- data/spec/fixtures/sharded_fedora.yml +11 -0
- data/spec/integration/base_file_management_spec.rb +6 -3
- data/spec/integration/base_find_by_fields_spec.rb +15 -16
- data/spec/integration/base_spec.rb +11 -178
- data/spec/integration/datastream_collections_spec.rb +1 -1
- data/spec/integration/full_featured_model_spec.rb +1 -2
- data/spec/integration/model_spec.rb +8 -9
- data/spec/integration/mods_article_integration_spec.rb +1 -1
- data/spec/integration/nokogiri_datastream_spec.rb +1 -1
- data/spec/integration/ntriples_datastream_spec.rb +80 -0
- data/spec/integration/rels_ext_datastream_spec.rb +0 -1
- data/spec/integration/semantic_node_spec.rb +18 -26
- data/spec/integration/solr_service_spec.rb +51 -1
- data/{lib/active_fedora → spec}/samples/hydra-mods_article_datastream.rb +0 -0
- data/{lib/active_fedora → spec}/samples/hydra-rights_metadata_datastream.rb +0 -0
- data/{lib/active_fedora → spec}/samples/marpa-dc_datastream.rb +0 -0
- data/spec/samples/models/hydrangea_article.rb +2 -2
- data/spec/samples/samples.rb +2 -0
- data/{lib/active_fedora → spec}/samples/special_thing.rb +3 -3
- data/spec/spec_helper.rb +1 -0
- data/spec/unit/active_fedora_spec.rb +17 -50
- data/spec/unit/base_extra_spec.rb +4 -0
- data/spec/unit/base_file_management_spec.rb +5 -2
- data/spec/unit/base_spec.rb +692 -628
- data/spec/unit/config_spec.rb +19 -0
- data/spec/unit/content_model_spec.rb +1 -24
- data/spec/unit/datastream_collections_spec.rb +11 -14
- data/spec/unit/datastreams_spec.rb +49 -54
- data/spec/unit/model_spec.rb +24 -53
- data/spec/unit/nokogiri_datastream_spec.rb +6 -1
- data/spec/unit/ntriples_datastream_spec.rb +73 -0
- data/spec/unit/qualified_dublin_core_datastream_spec.rb +1 -1
- data/spec/unit/relationships_spec.rb +6 -3
- data/spec/unit/rels_ext_datastream_spec.rb +19 -0
- data/spec/unit/rubydora_connection_spec.rb +2 -56
- data/spec/unit/solr_service_spec.rb +3 -1
- data/spec/unit/unsaved_digital_object_spec.rb +2 -2
- metadata +46 -33
- data/lib/active_fedora/dcrdf_datastream.rb +0 -11
- data/lib/active_fedora/relationship.rb +0 -47
- data/lib/active_fedora/samples.rb +0 -3
- data/spec/integration/dc_rdf_datastream_spec.rb +0 -24
- data/spec/unit/dc_rdf_datastream_spec.rb +0 -50
- data/spec/unit/relationship_spec.rb +0 -92
@@ -77,12 +77,16 @@ describe ActiveFedora::Base do
|
|
77
77
|
|
78
78
|
mock_datastreams = {:ds1 => mock1, :ds2 => mock2, :rels_ext => mock3}
|
79
79
|
mock_datastreams.values.each {|ds| ds.stubs(:kind_of?).with(ActiveFedora::NokogiriDatastream).returns(false)}
|
80
|
+
mock1.expects(:solrize_profile)
|
81
|
+
mock2.expects(:solrize_profile)
|
82
|
+
mock3.expects(:solrize_profile)
|
80
83
|
mock1.expects(:kind_of?).with(ActiveFedora::MetadataDatastream).returns(true)
|
81
84
|
mock2.expects(:kind_of?).with(ActiveFedora::MetadataDatastream).returns(true)
|
82
85
|
mock3.expects(:kind_of?).with(ActiveFedora::MetadataDatastream).returns(false)
|
83
86
|
#mock3.expects(:kind_of?).with(ActiveFedora::RelsExtDatastream).returns(true)
|
84
87
|
|
85
88
|
@test_object.expects(:datastreams).returns(mock_datastreams)
|
89
|
+
@test_object.expects(:solrize_profile)
|
86
90
|
@test_object.expects(:solrize_relationships)
|
87
91
|
@test_object.send :update_index
|
88
92
|
end
|
@@ -2,8 +2,11 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe ActiveFedora::Base do
|
4
4
|
|
5
|
-
before(:
|
6
|
-
|
5
|
+
before(:all) do
|
6
|
+
class FileMgmt < ActiveFedora::Base
|
7
|
+
include ActiveFedora::FileManagement
|
8
|
+
end
|
9
|
+
@base = FileMgmt.new
|
7
10
|
@base.stubs(:create_date).returns("2008-07-02T05:09:42.015Z")
|
8
11
|
@base.stubs(:modified_date).returns("2008-09-29T21:21:52.892Z")
|
9
12
|
end
|
data/spec/unit/base_spec.rb
CHANGED
@@ -2,725 +2,789 @@ require 'spec_helper'
|
|
2
2
|
@@last_pid = 0
|
3
3
|
|
4
4
|
describe ActiveFedora::Base do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
describe "sharding" do
|
6
|
+
it "should have a shard_index" do
|
7
|
+
ActiveFedora::Base.shard_index(@this_pid).should == 0
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "should have a connection_for_pid" do
|
11
|
+
before do
|
12
|
+
ActiveFedora::Base.fedora_connection = {}
|
10
13
|
end
|
11
|
-
|
12
|
-
|
14
|
+
context "When the server is not sharded" do
|
15
|
+
subject {ActiveFedora::Base.connection_for_pid('foo:bar')}
|
16
|
+
it { should be_kind_of Rubydora::Repository}
|
17
|
+
it "should be the standard connection" do
|
18
|
+
subject.client.url.should == 'http://127.0.0.1:8983/fedora-test'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
context "When the repository is sharded" do
|
22
|
+
before :all do
|
23
|
+
class FooHistory < ActiveFedora::Base
|
24
|
+
def self.shard_index(pid)
|
25
|
+
pid == 'foo:bar' ? 0 : 1
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
before :each do
|
30
|
+
ActiveFedora.config.expects(:sharded?).returns(true)
|
31
|
+
end
|
32
|
+
after :all do
|
33
|
+
Object.send(:remove_const, :FooHistory)
|
34
|
+
end
|
35
|
+
describe "assign_pid" do
|
36
|
+
subject {FooHistory}
|
37
|
+
it "should raise an exception when assign_pid is not overridden" do
|
38
|
+
lambda {subject.assign_pid(stub(:namespace=>'changeme'))}.should raise_error(RuntimeError, "When using shards, you must override FooHistory.assign_pid()")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
describe "the repository" do
|
42
|
+
before do
|
43
|
+
ActiveFedora.config.expects(:credentials).returns([{:url=>'shard1'}, {:url=>'shard2'} ])
|
44
|
+
end
|
45
|
+
describe "for foo:bar" do
|
46
|
+
subject {FooHistory.connection_for_pid('foo:bar')}
|
47
|
+
it "should be shard1" do
|
48
|
+
subject.client.url.should == 'shard1'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
describe "for foo:baz" do
|
52
|
+
subject {FooHistory.connection_for_pid('foo:baz')}
|
53
|
+
it "should be shard1" do
|
54
|
+
subject.client.url.should == 'shard2'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
13
58
|
end
|
14
|
-
has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"withText2", :label=>"withLabel" do |m|
|
15
|
-
m.field "fubar", :text
|
16
|
-
end
|
17
|
-
delegate :fubar, :to=>'withText'
|
18
|
-
delegate :swank, :to=>'someData'
|
19
|
-
end
|
20
|
-
class FooAdaptation < ActiveFedora::Base
|
21
|
-
has_metadata :type=>ActiveFedora::NokogiriDatastream, :name=>'someData'
|
22
59
|
end
|
23
60
|
end
|
24
61
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
begin
|
45
|
-
ActiveFedora::SolrService.stubs(:instance)
|
46
|
-
#@test_object.delete
|
47
|
-
rescue
|
62
|
+
describe "With a test class" do
|
63
|
+
before :all do
|
64
|
+
class FooHistory < ActiveFedora::Base
|
65
|
+
has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"someData" do |m|
|
66
|
+
m.field "fubar", :string
|
67
|
+
m.field "swank", :text
|
68
|
+
end
|
69
|
+
has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"withText" do |m|
|
70
|
+
m.field "fubar", :text
|
71
|
+
end
|
72
|
+
has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"withText2", :label=>"withLabel" do |m|
|
73
|
+
m.field "fubar", :text
|
74
|
+
end
|
75
|
+
delegate :fubar, :to=>'withText'
|
76
|
+
delegate :swank, :to=>'someData'
|
77
|
+
end
|
78
|
+
class FooAdaptation < ActiveFedora::Base
|
79
|
+
has_metadata :type=>ActiveFedora::NokogiriDatastream, :name=>'someData'
|
80
|
+
end
|
48
81
|
end
|
49
|
-
end
|
50
82
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
Rubydora::DigitalObject.any_instance.expects(:save).never
|
55
|
-
result = ActiveFedora::Base.new(nil)
|
56
|
-
result.inner_object.should be_kind_of(ActiveFedora::UnsavedDigitalObject)
|
83
|
+
after :all do
|
84
|
+
Object.send(:remove_const, :FooHistory)
|
85
|
+
Object.send(:remove_const, :FooAdaptation)
|
57
86
|
end
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
ActiveFedora::RubydoraConnection.instance.expects(:nextid).never
|
62
|
-
f = FooHistory.new
|
87
|
+
|
88
|
+
def increment_pid
|
89
|
+
@@last_pid += 1
|
63
90
|
end
|
64
91
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
92
|
+
before(:each) do
|
93
|
+
@this_pid = increment_pid.to_s
|
94
|
+
stub_get(@this_pid)
|
95
|
+
Rubydora::Repository.any_instance.stubs(:client).returns(@mock_client)
|
96
|
+
ActiveFedora::Base.stubs(:assign_pid).returns(@this_pid)
|
70
97
|
|
71
|
-
|
72
|
-
it "should return the specifed class" do
|
73
|
-
FooAdaptation.datastream_class_for_name('someData').should == ActiveFedora::NokogiriDatastream
|
74
|
-
end
|
75
|
-
it "should return the specifed class" do
|
76
|
-
FooAdaptation.datastream_class_for_name('content').should == ActiveFedora::Datastream
|
98
|
+
@test_object = ActiveFedora::Base.new
|
77
99
|
end
|
78
|
-
end
|
79
100
|
|
80
|
-
|
81
|
-
|
82
|
-
|
101
|
+
after(:each) do
|
102
|
+
begin
|
103
|
+
ActiveFedora::SolrService.stubs(:instance)
|
104
|
+
#@test_object.delete
|
105
|
+
rescue
|
106
|
+
end
|
83
107
|
end
|
84
|
-
end
|
85
108
|
|
86
|
-
### Methods for ActiveModel::Conversions
|
87
|
-
it "should have to_param once it's saved" do
|
88
109
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
@test_object.inner_object.expects(:new?).returns(false).at_least_once
|
97
|
-
@test_object.to_key.should == [@test_object.pid]
|
98
|
-
end
|
99
|
-
|
100
|
-
it "should have to_model when it's saved" do
|
101
|
-
@test_object.to_model.should be @test_object
|
102
|
-
end
|
103
|
-
### end ActiveModel::Conversions
|
110
|
+
describe '#new' do
|
111
|
+
it "should create an inner object" do
|
112
|
+
# for doing AFObject.new(params[:foo]) when nothing is in params[:foo]
|
113
|
+
Rubydora::DigitalObject.any_instance.expects(:save).never
|
114
|
+
result = ActiveFedora::Base.new(nil)
|
115
|
+
result.inner_object.should be_kind_of(ActiveFedora::UnsavedDigitalObject)
|
116
|
+
end
|
104
117
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
### End ActiveModel::Naming
|
111
|
-
|
118
|
+
it "should not save or get an pid on init" do
|
119
|
+
Rubydora::DigitalObject.any_instance.expects(:save).never
|
120
|
+
ActiveFedora::Base.expects(:assign_pid).never
|
121
|
+
f = FooHistory.new
|
122
|
+
end
|
112
123
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
it "should create dynamic accessors" do
|
118
|
-
@test_history.withText.should == @test_history.datastreams['withText']
|
124
|
+
it "should be able to create with a custom pid" do
|
125
|
+
f = FooHistory.new(:pid=>'numbnuts:1')
|
126
|
+
f.pid.should == 'numbnuts:1'
|
127
|
+
end
|
119
128
|
end
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
129
|
+
|
130
|
+
describe ".datastream_class_for_name" do
|
131
|
+
it "should return the specifed class" do
|
132
|
+
FooAdaptation.datastream_class_for_name('someData').should == ActiveFedora::NokogiriDatastream
|
133
|
+
end
|
134
|
+
it "should return the specifed class" do
|
135
|
+
FooAdaptation.datastream_class_for_name('content').should == ActiveFedora::Datastream
|
136
|
+
end
|
124
137
|
end
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
138
|
+
|
139
|
+
describe ".internal_uri" do
|
140
|
+
it "should return pid as fedors uri" do
|
141
|
+
@test_object.internal_uri.should eql("info:fedora/#{@test_object.pid}")
|
142
|
+
end
|
129
143
|
end
|
130
|
-
end
|
131
144
|
|
145
|
+
### Methods for ActiveModel::Conversions
|
146
|
+
it "should have to_param once it's saved" do
|
132
147
|
|
148
|
+
@test_object.to_param.should be_nil
|
149
|
+
@test_object.inner_object.expects(:new?).returns(false).at_least_once
|
150
|
+
@test_object.to_param.should == @test_object.pid
|
151
|
+
end
|
133
152
|
|
134
|
-
|
135
|
-
|
136
|
-
@test_object.
|
153
|
+
it "should have to_key once it's saved" do
|
154
|
+
@test_object.to_key.should be_nil
|
155
|
+
@test_object.inner_object.expects(:new?).returns(false).at_least_once
|
156
|
+
@test_object.to_key.should == [@test_object.pid]
|
137
157
|
end
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
@test_object.expects(:create_date).returns(cdate)
|
142
|
-
@test_object.expects(:modified_date).returns(mdate)
|
143
|
-
fields = @test_object.fields
|
144
|
-
fields[:system_create_date][:values].should eql([cdate])
|
145
|
-
fields[:system_modified_date][:values].should eql([mdate])
|
146
|
-
fields[:id][:values].should eql([@test_object.pid])
|
158
|
+
|
159
|
+
it "should have to_model when it's saved" do
|
160
|
+
@test_object.to_model.should be @test_object
|
147
161
|
end
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
162
|
+
### end ActiveModel::Conversions
|
163
|
+
|
164
|
+
### Methods for ActiveModel::Naming
|
165
|
+
it "Should know the model_name" do
|
166
|
+
FooHistory.model_name.should == 'FooHistory'
|
167
|
+
FooHistory.model_name.human.should == 'Foo history'
|
152
168
|
end
|
169
|
+
### End ActiveModel::Naming
|
153
170
|
|
154
|
-
it "should call .fields on all MetadataDatastreams and return the resulting document" do
|
155
|
-
mock1 = mock("ds1", :fields => {})
|
156
|
-
mock2 = mock("ds2", :fields => {})
|
157
|
-
mock1.expects(:kind_of?).with(ActiveFedora::MetadataDatastream).returns(true)
|
158
|
-
mock2.expects(:kind_of?).with(ActiveFedora::MetadataDatastream).returns(true)
|
159
171
|
|
160
|
-
|
161
|
-
|
172
|
+
describe ".datastreams" do
|
173
|
+
before do
|
174
|
+
@test_history = FooHistory.new
|
175
|
+
end
|
176
|
+
it "should create dynamic accessors" do
|
177
|
+
@test_history.withText.should == @test_history.datastreams['withText']
|
178
|
+
end
|
179
|
+
it "dynamic accessors should convert dashes to underscores" do
|
180
|
+
ds = stub('datastream', :dsid=>'eac-cpf')
|
181
|
+
@test_history.add_datastream(ds)
|
182
|
+
@test_history.eac_cpf.should == ds
|
183
|
+
end
|
184
|
+
it "dynamic accessors should not convert datastreams named with underscore" do
|
185
|
+
ds = stub('datastream', :dsid=>'foo_bar')
|
186
|
+
@test_history.add_datastream(ds)
|
187
|
+
@test_history.foo_bar.should == ds
|
188
|
+
end
|
162
189
|
end
|
163
|
-
end
|
164
190
|
|
165
|
-
it 'should provide #find' do
|
166
|
-
ActiveFedora::Base.should respond_to(:find)
|
167
|
-
end
|
168
|
-
|
169
|
-
it "should provide .create_date" do
|
170
|
-
@test_object.should respond_to(:create_date)
|
171
|
-
end
|
172
191
|
|
173
|
-
it "should provide .modified_date" do
|
174
|
-
@test_object.should respond_to(:modified_date)
|
175
|
-
end
|
176
192
|
|
177
|
-
|
178
|
-
|
179
|
-
|
193
|
+
describe ".fields" do
|
194
|
+
it "should provide fields" do
|
195
|
+
@test_object.should respond_to(:fields)
|
196
|
+
end
|
197
|
+
it "should add pid, system_create_date and system_modified_date from object attributes" do
|
198
|
+
cdate = "2008-07-02T05:09:42.015Z"
|
199
|
+
mdate = "2009-07-07T23:37:18.991Z"
|
200
|
+
@test_object.expects(:create_date).returns(cdate)
|
201
|
+
@test_object.expects(:modified_date).returns(mdate)
|
202
|
+
fields = @test_object.fields
|
203
|
+
fields[:system_create_date][:values].should eql([cdate])
|
204
|
+
fields[:system_modified_date][:values].should eql([mdate])
|
205
|
+
fields[:id][:values].should eql([@test_object.pid])
|
206
|
+
end
|
207
|
+
|
208
|
+
it "should add self.class as the :active_fedora_model" do
|
209
|
+
fields = @test_object.fields
|
210
|
+
fields[:active_fedora_model][:values].should eql([@test_object.class.inspect])
|
211
|
+
end
|
212
|
+
|
213
|
+
it "should call .fields on all MetadataDatastreams and return the resulting document" do
|
214
|
+
mock1 = mock("ds1", :fields => {})
|
215
|
+
mock2 = mock("ds2", :fields => {})
|
216
|
+
mock1.expects(:kind_of?).with(ActiveFedora::MetadataDatastream).returns(true)
|
217
|
+
mock2.expects(:kind_of?).with(ActiveFedora::MetadataDatastream).returns(true)
|
218
|
+
|
219
|
+
@test_object.expects(:datastreams).returns({:ds1 => mock1, :ds2 => mock2})
|
220
|
+
@test_object.fields
|
221
|
+
end
|
222
|
+
end
|
180
223
|
|
181
|
-
|
224
|
+
it 'should provide #find' do
|
225
|
+
ActiveFedora::Base.should respond_to(:find)
|
226
|
+
end
|
182
227
|
|
183
|
-
it
|
184
|
-
@test_object.
|
185
|
-
@test_object.rels_ext.should == "foo"
|
228
|
+
it "should provide .create_date" do
|
229
|
+
@test_object.should respond_to(:create_date)
|
186
230
|
end
|
187
|
-
end
|
188
231
|
|
189
|
-
|
190
|
-
|
191
|
-
|
232
|
+
it "should provide .modified_date" do
|
233
|
+
@test_object.should respond_to(:modified_date)
|
234
|
+
end
|
192
235
|
|
193
|
-
|
194
|
-
|
195
|
-
@test_object.add_relationship("predicate", "info:fedora/object")
|
196
|
-
pred = ActiveFedora::Predicates.vocabularies["info:fedora/fedora-system:def/relations-external#"]["predicate"]
|
197
|
-
@test_object.relationships.should have_statement(RDF::Statement.new(RDF::URI.new(@test_object.internal_uri), pred, RDF::URI.new("info:fedora/object")))
|
236
|
+
it 'should respond to .rels_ext' do
|
237
|
+
@test_object.should respond_to(:rels_ext)
|
198
238
|
end
|
199
239
|
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
240
|
+
describe '.rels_ext' do
|
241
|
+
|
242
|
+
it 'should return the RelsExtDatastream object from the datastreams array' do
|
243
|
+
@test_object.expects(:datastreams).returns({"RELS-EXT" => "foo"}).at_least_once
|
244
|
+
@test_object.rels_ext.should == "foo"
|
245
|
+
end
|
206
246
|
end
|
207
|
-
|
208
|
-
it 'should add a relationship to an object only if it does not exist already' do
|
209
|
-
next_pid = increment_pid.to_s
|
210
|
-
ActiveFedora::RubydoraConnection.instance.stubs(:nextid).returns(next_pid)
|
211
|
-
stub_get(next_pid)
|
212
247
|
|
213
|
-
|
214
|
-
@test_object.
|
215
|
-
@test_object.ids_for_outbound(:has_part).should == [@test_object3.pid]
|
216
|
-
#try adding again and make sure not there twice
|
217
|
-
@test_object.add_relationship(:has_part,@test_object3)
|
218
|
-
@test_object.ids_for_outbound(:has_part).should == [@test_object3.pid]
|
248
|
+
it 'should provide #add_relationship' do
|
249
|
+
@test_object.should respond_to(:add_relationship)
|
219
250
|
end
|
220
251
|
|
221
|
-
|
222
|
-
|
223
|
-
|
252
|
+
describe '#add_relationship' do
|
253
|
+
it 'should call #add_relationship on the rels_ext datastream' do
|
254
|
+
@test_object.add_relationship("predicate", "info:fedora/object")
|
255
|
+
pred = ActiveFedora::Predicates.vocabularies["info:fedora/fedora-system:def/relations-external#"]["predicate"]
|
256
|
+
@test_object.relationships.should have_statement(RDF::Statement.new(RDF::URI.new(@test_object.internal_uri), pred, RDF::URI.new("info:fedora/object")))
|
257
|
+
end
|
258
|
+
|
259
|
+
it "should update the RELS-EXT datastream and set the datastream as dirty when relationships are added" do
|
260
|
+
mock_ds = mock("Rels-Ext")
|
261
|
+
mock_ds.expects(:dirty=).with(true).times(2)
|
262
|
+
@test_object.datastreams["RELS-EXT"] = mock_ds
|
263
|
+
@test_object.add_relationship(:is_member_of, "info:fedora/demo:5")
|
264
|
+
@test_object.add_relationship(:is_member_of, "info:fedora/demo:10")
|
265
|
+
end
|
266
|
+
|
267
|
+
it 'should add a relationship to an object only if it does not exist already' do
|
268
|
+
next_pid = increment_pid.to_s
|
269
|
+
ActiveFedora::Base.stubs(:assign_pid).returns(next_pid)
|
270
|
+
stub_get(next_pid)
|
271
|
+
|
272
|
+
@test_object3 = ActiveFedora::Base.new
|
273
|
+
@test_object.add_relationship(:has_part,@test_object3)
|
274
|
+
@test_object.ids_for_outbound(:has_part).should == [@test_object3.pid]
|
275
|
+
#try adding again and make sure not there twice
|
276
|
+
@test_object.add_relationship(:has_part,@test_object3)
|
277
|
+
@test_object.ids_for_outbound(:has_part).should == [@test_object3.pid]
|
278
|
+
end
|
279
|
+
|
280
|
+
it 'should add literal relationships if requested' do
|
281
|
+
@test_object.add_relationship(:conforms_to,"AnInterface",true)
|
282
|
+
@test_object.ids_for_outbound(:conforms_to).should == ["AnInterface"]
|
283
|
+
end
|
224
284
|
end
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
285
|
+
|
286
|
+
it 'should provide #remove_relationship' do
|
287
|
+
@test_object.should respond_to(:remove_relationship)
|
288
|
+
end
|
289
|
+
|
290
|
+
describe '#remove_relationship' do
|
291
|
+
it 'should remove a relationship from the relationships hash' do
|
292
|
+
@test_object3 = ActiveFedora::Base.new()
|
293
|
+
@test_object3.stubs(:pid=>'7')
|
294
|
+
@test_object4 = ActiveFedora::Base.new()
|
295
|
+
@test_object4.stubs(:pid=>'8')
|
296
|
+
@test_object.add_relationship(:has_part,@test_object3)
|
297
|
+
@test_object.add_relationship(:has_part,@test_object4)
|
298
|
+
#check both are there
|
299
|
+
@test_object.ids_for_outbound(:has_part).should == [@test_object3.pid,@test_object4.pid]
|
300
|
+
@test_object.remove_relationship(:has_part,@test_object3)
|
301
|
+
#check only one item removed
|
302
|
+
@test_object.ids_for_outbound(:has_part).should == [@test_object4.pid]
|
303
|
+
@test_object.remove_relationship(:has_part,@test_object4)
|
304
|
+
#check last item removed and predicate removed since now emtpy
|
305
|
+
@test_object.relationships.size.should == 0
|
306
|
+
end
|
247
307
|
end
|
248
|
-
end
|
249
308
|
|
250
|
-
|
251
|
-
|
252
|
-
|
309
|
+
it 'should provide #relationships' do
|
310
|
+
@test_object.should respond_to(:relationships)
|
311
|
+
end
|
253
312
|
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
313
|
+
describe '#relationships' do
|
314
|
+
it 'should return a graph' do
|
315
|
+
@test_object.relationships.kind_of?(RDF::Graph).should be_true
|
316
|
+
@test_object.relationships.size.should == 0
|
317
|
+
end
|
258
318
|
end
|
259
|
-
end
|
260
319
|
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
320
|
+
describe '.assert_content_model' do
|
321
|
+
it "should default to the name of the class" do
|
322
|
+
stub_get(@this_pid)
|
323
|
+
stub_add_ds(@this_pid, ['RELS-EXT'])
|
324
|
+
@test_object.assert_content_model
|
325
|
+
@test_object.relationships(:has_model).should == ["info:fedora/afmodel:ActiveFedora_Base"]
|
326
|
+
|
327
|
+
end
|
268
328
|
end
|
269
|
-
end
|
270
329
|
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
it "should return true and set persisted if object and datastreams all save successfully" do
|
275
|
-
stub_get(@this_pid)
|
276
|
-
stub_add_ds(@this_pid, ['RELS-EXT'])
|
277
|
-
@test_object.persisted?.should be false
|
278
|
-
@test_object.expects(:update_index)
|
279
|
-
stub_get(@this_pid, nil, true)
|
280
|
-
@test_object.save.should == true
|
281
|
-
@test_object.persisted?.should be true
|
282
|
-
end
|
283
|
-
|
284
|
-
it "should call assert_content_model" do
|
285
|
-
stub_ingest(@this_pid)
|
286
|
-
stub_add_ds(@this_pid, ['RELS-EXT'])
|
287
|
-
@test_object.expects(:assert_content_model)
|
288
|
-
@test_object.save.should == true
|
289
|
-
|
330
|
+
describe '.save' do
|
290
331
|
|
291
|
-
end
|
292
|
-
|
293
|
-
it "should call .save on any datastreams that are dirty" do
|
294
|
-
stub_ingest(@this_pid)
|
295
|
-
stub_add_ds(@this_pid, ['withText2', 'withText', 'RELS-EXT'])
|
296
|
-
to = FooHistory.new
|
297
|
-
to.expects(:update_index)
|
298
|
-
|
299
|
-
to.datastreams["someData"].stubs(:changed?).returns(true)
|
300
|
-
to.datastreams["someData"].stubs(:new_object?).returns(true)
|
301
|
-
to.datastreams["someData"].expects(:save)
|
302
|
-
to.expects(:refresh)
|
303
|
-
to.save
|
304
|
-
end
|
305
|
-
it "should call .save on any datastreams that are new" do
|
306
|
-
stub_ingest(@this_pid)
|
307
|
-
stub_add_ds(@this_pid, ['RELS-EXT'])
|
308
|
-
ds = ActiveFedora::Datastream.new(@test_object.inner_object, 'ds_to_add')
|
309
|
-
ds.content = "DS CONTENT"
|
310
|
-
@test_object.add_datastream(ds)
|
311
|
-
ds.expects(:save)
|
312
|
-
@test_object.instance_variable_set(:@new_object, false)
|
313
|
-
@test_object.expects(:refresh)
|
314
|
-
@test_object.expects(:update_index)
|
315
|
-
@test_object.save
|
316
|
-
end
|
317
|
-
it "should not call .save on any datastreams that are not dirty" do
|
318
|
-
stub_ingest(@this_pid)
|
319
|
-
@test_object = FooHistory.new
|
320
|
-
@test_object.expects(:update_index)
|
321
|
-
@test_object.expects(:refresh)
|
322
|
-
|
323
|
-
@test_object.datastreams["someData"].should_not be_nil
|
324
|
-
@test_object.datastreams['someData'].stubs(:changed?).returns(false)
|
325
|
-
@test_object.datastreams['someData'].stubs(:new?).returns(false)
|
326
|
-
@test_object.datastreams['someData'].expects(:save).never
|
327
|
-
@test_object.datastreams['withText2'].expects(:save)
|
328
|
-
@test_object.datastreams['withText'].expects(:save)
|
329
|
-
@test_object.datastreams['RELS-EXT'].expects(:save)
|
330
|
-
@test_object.save
|
331
|
-
end
|
332
|
-
it "should update solr index with all metadata if any MetadataDatastreams have changed" do
|
333
|
-
stub_ingest(@this_pid)
|
334
|
-
stub_add_ds(@this_pid, ['ds1', 'RELS-EXT'])
|
335
|
-
|
336
|
-
dirty_ds = ActiveFedora::MetadataDatastream.new(@test_object.inner_object, 'ds1')
|
337
|
-
rels_ds = ActiveFedora::RelsExtDatastream.new(@test_object.inner_object, 'RELS-EXT')
|
338
|
-
rels_ds.model = @test_object
|
339
|
-
@test_object.add_datastream(rels_ds)
|
340
|
-
@test_object.add_datastream(dirty_ds)
|
341
|
-
@test_object.expects(:update_index)
|
342
332
|
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
it "should update solr index if relationships have changed" do
|
362
|
-
stub_ingest(@this_pid)
|
363
|
-
|
364
|
-
rels_ext = ActiveFedora::RelsExtDatastream.new(@test_object.inner_object, 'RELS-EXT')
|
365
|
-
rels_ext.model = @test_object
|
366
|
-
rels_ext.expects(:changed?).returns(true).twice
|
367
|
-
rels_ext.expects(:save).returns(true)
|
368
|
-
rels_ext.expects(:serialize!)
|
369
|
-
clean_ds = mock("ds2", :digital_object=)
|
370
|
-
clean_ds.stubs(:dirty? => false, :changed? => false, :new? => false)
|
371
|
-
clean_ds.expects(:serialize!)
|
372
|
-
@test_object.datastreams["RELS-EXT"] = rels_ext
|
373
|
-
@test_object.datastreams[:clean_ds] = clean_ds
|
374
|
-
# @test_object.inner_object.stubs(:datastreams).returns({"RELS-EXT" => rels_ext, :clean_ds => clean_ds})
|
375
|
-
# @test_object.stubs(:datastreams).returns({"RELS-EXT" => rels_ext, :clean_ds => clean_ds})
|
376
|
-
@test_object.instance_variable_set(:@new_object, false)
|
377
|
-
@test_object.expects(:refresh)
|
378
|
-
@test_object.expects(:update_index)
|
333
|
+
it "should return true and set persisted if object and datastreams all save successfully" do
|
334
|
+
stub_get(@this_pid)
|
335
|
+
stub_add_ds(@this_pid, ['RELS-EXT'])
|
336
|
+
@test_object.persisted?.should be false
|
337
|
+
@test_object.expects(:update_index)
|
338
|
+
stub_get(@this_pid, nil, true)
|
339
|
+
@test_object.save.should == true
|
340
|
+
@test_object.persisted?.should be true
|
341
|
+
end
|
342
|
+
|
343
|
+
it "should call assert_content_model" do
|
344
|
+
stub_ingest(@this_pid)
|
345
|
+
stub_add_ds(@this_pid, ['RELS-EXT'])
|
346
|
+
@test_object.expects(:assert_content_model)
|
347
|
+
@test_object.save.should == true
|
348
|
+
|
349
|
+
|
350
|
+
end
|
379
351
|
|
380
|
-
|
352
|
+
it "should call .save on any datastreams that are dirty" do
|
353
|
+
stub_ingest(@this_pid)
|
354
|
+
stub_add_ds(@this_pid, ['withText2', 'withText', 'RELS-EXT'])
|
355
|
+
to = FooHistory.new
|
356
|
+
to.expects(:update_index)
|
357
|
+
|
358
|
+
to.datastreams["someData"].stubs(:changed?).returns(true)
|
359
|
+
to.datastreams["someData"].stubs(:new_object?).returns(true)
|
360
|
+
to.datastreams["someData"].expects(:save)
|
361
|
+
to.expects(:refresh)
|
362
|
+
FooHistory.expects(:assign_pid).with(to.inner_object).returns(@this_pid)
|
363
|
+
to.save
|
364
|
+
end
|
365
|
+
it "should call .save on any datastreams that are new" do
|
366
|
+
stub_ingest(@this_pid)
|
367
|
+
stub_add_ds(@this_pid, ['RELS-EXT'])
|
368
|
+
ds = ActiveFedora::Datastream.new(@test_object.inner_object, 'ds_to_add')
|
369
|
+
ds.content = "DS CONTENT"
|
370
|
+
@test_object.add_datastream(ds)
|
371
|
+
ds.expects(:save)
|
372
|
+
@test_object.instance_variable_set(:@new_object, false)
|
373
|
+
@test_object.expects(:refresh)
|
374
|
+
@test_object.expects(:update_index)
|
375
|
+
@test_object.save
|
376
|
+
end
|
377
|
+
it "should not call .save on any datastreams that are not dirty" do
|
378
|
+
stub_ingest(@this_pid)
|
379
|
+
@test_object = FooHistory.new
|
380
|
+
@test_object.expects(:update_index)
|
381
|
+
@test_object.expects(:refresh)
|
382
|
+
|
383
|
+
@test_object.datastreams["someData"].should_not be_nil
|
384
|
+
@test_object.datastreams['someData'].stubs(:changed?).returns(false)
|
385
|
+
@test_object.datastreams['someData'].stubs(:new?).returns(false)
|
386
|
+
@test_object.datastreams['someData'].expects(:save).never
|
387
|
+
@test_object.datastreams['withText2'].expects(:save)
|
388
|
+
@test_object.datastreams['withText'].expects(:save)
|
389
|
+
@test_object.datastreams['RELS-EXT'].expects(:save)
|
390
|
+
FooHistory.expects(:assign_pid).with(@test_object.inner_object).returns(@this_pid)
|
391
|
+
@test_object.save
|
392
|
+
end
|
393
|
+
it "should update solr index with all metadata if any MetadataDatastreams have changed" do
|
394
|
+
stub_ingest(@this_pid)
|
395
|
+
stub_add_ds(@this_pid, ['ds1', 'RELS-EXT'])
|
396
|
+
|
397
|
+
dirty_ds = ActiveFedora::MetadataDatastream.new(@test_object.inner_object, 'ds1')
|
398
|
+
rels_ds = ActiveFedora::RelsExtDatastream.new(@test_object.inner_object, 'RELS-EXT')
|
399
|
+
rels_ds.model = @test_object
|
400
|
+
@test_object.add_datastream(rels_ds)
|
401
|
+
@test_object.add_datastream(dirty_ds)
|
402
|
+
@test_object.expects(:update_index)
|
403
|
+
|
404
|
+
@test_object.save
|
405
|
+
end
|
406
|
+
it "should NOT update solr index if no MetadataDatastreams have changed" do
|
407
|
+
pending "Rels-ext is getting automatically added so we can't test this."
|
408
|
+
ActiveFedora::DigitalObject.any_instance.stubs(:save)
|
409
|
+
mock1 = mock("ds1")
|
410
|
+
mock1.expects( :changed?).returns(false).at_least_once
|
411
|
+
mock1.expects(:serialize!)
|
412
|
+
mock2 = mock("ds2")
|
413
|
+
mock2.expects( :changed?).returns(false).at_least_once
|
414
|
+
mock2.expects(:serialize!)
|
415
|
+
@test_object.stubs(:datastreams).returns({:ds1 => mock1, :ds2 => mock2})
|
416
|
+
@test_object.expects(:update_index).never
|
417
|
+
@test_object.expects(:refresh)
|
418
|
+
@test_object.instance_variable_set(:@new_object, false)
|
419
|
+
|
420
|
+
@test_object.save
|
421
|
+
end
|
422
|
+
it "should update solr index if relationships have changed" do
|
423
|
+
stub_ingest(@this_pid)
|
424
|
+
|
425
|
+
rels_ext = ActiveFedora::RelsExtDatastream.new(@test_object.inner_object, 'RELS-EXT')
|
426
|
+
rels_ext.model = @test_object
|
427
|
+
rels_ext.expects(:changed?).returns(true).twice
|
428
|
+
rels_ext.expects(:save).returns(true)
|
429
|
+
rels_ext.expects(:serialize!)
|
430
|
+
clean_ds = mock("ds2", :digital_object=)
|
431
|
+
clean_ds.stubs(:dirty? => false, :changed? => false, :new? => false)
|
432
|
+
clean_ds.expects(:serialize!)
|
433
|
+
@test_object.datastreams["RELS-EXT"] = rels_ext
|
434
|
+
@test_object.datastreams[:clean_ds] = clean_ds
|
435
|
+
# @test_object.inner_object.stubs(:datastreams).returns({"RELS-EXT" => rels_ext, :clean_ds => clean_ds})
|
436
|
+
# @test_object.stubs(:datastreams).returns({"RELS-EXT" => rels_ext, :clean_ds => clean_ds})
|
437
|
+
@test_object.instance_variable_set(:@new_object, false)
|
438
|
+
@test_object.expects(:refresh)
|
439
|
+
@test_object.expects(:update_index)
|
440
|
+
|
441
|
+
@test_object.save
|
442
|
+
end
|
381
443
|
end
|
382
|
-
end
|
383
444
|
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
445
|
+
describe "#create" do
|
446
|
+
before do
|
447
|
+
stub_ingest(@this_pid)
|
448
|
+
stub_add_ds(@this_pid, ['someData', 'withText', 'withText2', 'RELS-EXT'])
|
449
|
+
end
|
450
|
+
it "should build a new record and save it" do
|
451
|
+
FooHistory.expects(:assign_pid).returns(@this_pid)
|
452
|
+
@hist = FooHistory.create(:fubar=>'ta', :swank=>'da')
|
453
|
+
@hist.fubar.should == ['ta']
|
454
|
+
@hist.swank.should == ['da']
|
455
|
+
end
|
456
|
+
|
393
457
|
end
|
394
|
-
|
395
|
-
end
|
396
458
|
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
459
|
+
describe ".adapt_to" do
|
460
|
+
it "should return an adapted object of the requested type" do
|
461
|
+
@test_object = FooHistory.new()
|
462
|
+
@test_object.adapt_to(FooAdaptation).class.should == FooAdaptation
|
463
|
+
end
|
464
|
+
it "should not make an additional call to fedora to create the adapted object" do
|
465
|
+
@test_object = FooHistory.new()
|
466
|
+
adapted = @test_object.adapt_to(FooAdaptation)
|
467
|
+
end
|
468
|
+
it "should propagate new datastreams to the adapted object" do
|
469
|
+
@test_object = FooHistory.new()
|
470
|
+
@test_object.add_file_datastream("XXX", :dsid=>'MY_DSID')
|
471
|
+
adapted = @test_object.adapt_to(FooAdaptation)
|
472
|
+
adapted.datastreams.keys.should include 'MY_DSID'
|
473
|
+
adapted.datastreams['MY_DSID'].content.should == "XXX"
|
474
|
+
adapted.datastreams['MY_DSID'].changed?.should be_true
|
475
|
+
end
|
476
|
+
it "should propagate modified datastreams to the adapted object" do
|
477
|
+
@test_object = FooHistory.new()
|
478
|
+
orig_ds = @test_object.datastreams['someData']
|
479
|
+
orig_ds.content="YYY"
|
480
|
+
adapted = @test_object.adapt_to(FooAdaptation)
|
481
|
+
adapted.datastreams.keys.should include 'someData'
|
482
|
+
adapted.datastreams['someData'].should == orig_ds
|
483
|
+
adapted.datastreams['someData'].content.should == "YYY"
|
484
|
+
adapted.datastreams['someData'].changed?.should be_true
|
485
|
+
end
|
486
|
+
it "should use the datastream definitions from the adapted object" do
|
487
|
+
@test_object = FooHistory.new()
|
488
|
+
adapted = @test_object.adapt_to(FooAdaptation)
|
489
|
+
adapted.datastreams.keys.should include 'someData'
|
490
|
+
adapted.datastreams['someData'].class.should == ActiveFedora::NokogiriDatastream
|
491
|
+
end
|
429
492
|
end
|
430
|
-
end
|
431
493
|
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
494
|
+
describe ".to_xml" do
|
495
|
+
it "should provide .to_xml" do
|
496
|
+
@test_object.should respond_to(:to_xml)
|
497
|
+
end
|
436
498
|
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
499
|
+
it "should add pid, system_create_date and system_modified_date from object attributes" do
|
500
|
+
@test_object.expects(:create_date).returns("cDate")
|
501
|
+
@test_object.expects(:modified_date).returns("mDate")
|
502
|
+
solr_doc = @test_object.to_solr
|
503
|
+
solr_doc["system_create_dt"].should eql("cDate")
|
504
|
+
solr_doc["system_modified_dt"].should eql("mDate")
|
505
|
+
solr_doc[:id].should eql("#{@test_object.pid}")
|
506
|
+
end
|
445
507
|
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
508
|
+
it "should call .to_xml on all MetadataDatastreams and return the resulting document" do
|
509
|
+
ds1 = ActiveFedora::MetadataDatastream.new(@test_object.inner_object, 'ds1')
|
510
|
+
ds2 = ActiveFedora::MetadataDatastream.new(@test_object.inner_object, 'ds2')
|
511
|
+
[ds1,ds2].each {|ds| ds.expects(:to_xml)}
|
450
512
|
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
end
|
455
|
-
|
456
|
-
describe ".to_solr" do
|
457
|
-
after(:all) do
|
458
|
-
# Revert to default mappings after running tests
|
459
|
-
ActiveFedora::SolrService.load_mappings
|
513
|
+
@test_object.expects(:datastreams).returns({:ds1 => ds1, :ds2 => ds2})
|
514
|
+
@test_object.to_xml
|
515
|
+
end
|
460
516
|
end
|
461
517
|
|
462
|
-
|
463
|
-
|
464
|
-
|
518
|
+
describe ".to_solr" do
|
519
|
+
after(:all) do
|
520
|
+
# Revert to default mappings after running tests
|
521
|
+
ActiveFedora::SolrService.load_mappings
|
522
|
+
end
|
523
|
+
|
524
|
+
it "should provide .to_solr" do
|
525
|
+
@test_object.should respond_to(:to_solr)
|
526
|
+
end
|
527
|
+
|
528
|
+
it "should add pid, system_create_date and system_modified_date from object attributes" do
|
529
|
+
@test_object.expects(:create_date).returns("cDate")
|
530
|
+
@test_object.expects(:modified_date).returns("mDate")
|
531
|
+
solr_doc = @test_object.to_solr
|
532
|
+
solr_doc["system_create_dt"].should eql("cDate")
|
533
|
+
solr_doc["system_modified_dt"].should eql("mDate")
|
534
|
+
solr_doc[:id].should eql("#{@test_object.pid}")
|
535
|
+
end
|
465
536
|
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
537
|
+
it "should omit base metadata and RELS-EXT if :model_only==true" do
|
538
|
+
@test_object.add_relationship(:has_part, "foo", true)
|
539
|
+
solr_doc = @test_object.to_solr(Hash.new, :model_only => true)
|
540
|
+
solr_doc["system_create_dt"].should be_nil
|
541
|
+
solr_doc["system_modified_dt"].should be_nil
|
542
|
+
solr_doc["id"].should be_nil
|
543
|
+
solr_doc["has_part_s"].should be_nil
|
544
|
+
end
|
545
|
+
|
546
|
+
it "should add self.class as the :active_fedora_model" do
|
547
|
+
stub_get(@this_pid)
|
548
|
+
stub_get_content(@this_pid, ['RELS-EXT', 'someData', 'withText2', 'withText'])
|
549
|
+
@test_history = FooHistory.new()
|
550
|
+
solr_doc = @test_history.to_solr
|
551
|
+
solr_doc["active_fedora_model_s"].should eql("FooHistory")
|
552
|
+
end
|
553
|
+
|
554
|
+
it "should use mappings.yml to decide names of solr fields" do
|
555
|
+
cdate = "2008-07-02T05:09:42.015Z"
|
556
|
+
mdate = "2009-07-07T23:37:18.991Z"
|
557
|
+
@test_object.stubs(:create_date).returns(cdate)
|
558
|
+
@test_object.stubs(:modified_date).returns(mdate)
|
559
|
+
solr_doc = @test_object.to_solr
|
560
|
+
solr_doc["system_create_dt"].should eql(cdate)
|
561
|
+
solr_doc["system_modified_dt"].should eql(mdate)
|
562
|
+
solr_doc[:id].should eql("#{@test_object.pid}")
|
563
|
+
solr_doc["active_fedora_model_s"].should eql(@test_object.class.inspect)
|
564
|
+
|
565
|
+
ActiveFedora::SolrService.load_mappings(File.join(File.dirname(__FILE__), "..", "..", "config", "solr_mappings_af_0.1.yml"))
|
566
|
+
solr_doc = @test_object.to_solr
|
567
|
+
[:system_create_dt, :system_modified_dt, :active_fedora_model_s].each do |fn|
|
568
|
+
solr_doc[fn].should == nil
|
569
|
+
end
|
570
|
+
solr_doc["system_create_date"].should eql(cdate)
|
571
|
+
solr_doc["system_modified_date"].should eql(mdate)
|
572
|
+
solr_doc[:id].should eql("#{@test_object.pid}")
|
573
|
+
solr_doc["active_fedora_model_field"].should eql(@test_object.class.inspect)
|
574
|
+
end
|
575
|
+
|
576
|
+
it "should call .to_solr on all MetadataDatastreams and NokogiriDatastreams, passing the resulting document to solr" do
|
577
|
+
mock1 = mock("ds1", :to_solr)
|
578
|
+
mock1.expects(:solrize_profile)
|
579
|
+
mock2 = mock("ds2", :to_solr)
|
580
|
+
mock2.expects(:solrize_profile)
|
581
|
+
ngds = mock("ngds")
|
582
|
+
ngds.expects(:solrize_profile)
|
583
|
+
mock1.expects(:kind_of?).with(ActiveFedora::MetadataDatastream).returns(true)
|
584
|
+
mock2.expects(:kind_of?).with(ActiveFedora::MetadataDatastream).returns(true)
|
585
|
+
|
586
|
+
@test_object.expects(:datastreams).returns({:ds1 => mock1, :ds2 => mock2, :ngds => ngds})
|
587
|
+
@test_object.expects(:solrize_relationships)
|
588
|
+
@test_object.to_solr
|
589
|
+
end
|
590
|
+
it "should call .to_solr on the relationships rels-ext is dirty" do
|
591
|
+
@test_object.add_relationship(:has_collection_member, "info:fedora/foo:member")
|
592
|
+
rels_ext = @test_object.rels_ext
|
593
|
+
rels_ext.dirty?.should == true
|
594
|
+
@test_object.expects(:solrize_relationships)
|
595
|
+
@test_object.to_solr
|
596
|
+
end
|
597
|
+
|
473
598
|
end
|
474
599
|
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
solr_doc["id"].should be_nil
|
481
|
-
solr_doc["has_part_s"].should be_nil
|
600
|
+
describe ".label" do
|
601
|
+
it "should return the label of the inner object" do
|
602
|
+
@test_object.inner_object.expects(:label).returns("foo label")
|
603
|
+
@test_object.label.should == "foo label"
|
604
|
+
end
|
482
605
|
end
|
483
606
|
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
solr_doc["active_fedora_model_s"].should eql("FooHistory")
|
490
|
-
end
|
491
|
-
|
492
|
-
it "should use mappings.yml to decide names of solr fields" do
|
493
|
-
cdate = "2008-07-02T05:09:42.015Z"
|
494
|
-
mdate = "2009-07-07T23:37:18.991Z"
|
495
|
-
@test_object.stubs(:create_date).returns(cdate)
|
496
|
-
@test_object.stubs(:modified_date).returns(mdate)
|
497
|
-
solr_doc = @test_object.to_solr
|
498
|
-
solr_doc["system_create_dt"].should eql(cdate)
|
499
|
-
solr_doc["system_modified_dt"].should eql(mdate)
|
500
|
-
solr_doc[:id].should eql("#{@test_object.pid}")
|
501
|
-
solr_doc["active_fedora_model_s"].should eql(@test_object.class.inspect)
|
502
|
-
|
503
|
-
ActiveFedora::SolrService.load_mappings(File.join(File.dirname(__FILE__), "..", "..", "config", "solr_mappings_af_0.1.yml"))
|
504
|
-
solr_doc = @test_object.to_solr
|
505
|
-
[:system_create_dt, :system_modified_dt, :active_fedora_model_s].each do |fn|
|
506
|
-
solr_doc[fn].should == nil
|
607
|
+
describe ".label=" do
|
608
|
+
it "should set the label of the inner object" do
|
609
|
+
@test_object.label.should_not == "foo label"
|
610
|
+
@test_object.label = "foo label"
|
611
|
+
@test_object.label.should == "foo label"
|
507
612
|
end
|
508
|
-
solr_doc["system_create_date"].should eql(cdate)
|
509
|
-
solr_doc["system_modified_date"].should eql(mdate)
|
510
|
-
solr_doc[:id].should eql("#{@test_object.pid}")
|
511
|
-
solr_doc["active_fedora_model_field"].should eql(@test_object.class.inspect)
|
512
613
|
end
|
513
614
|
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
@test_object.expects(:datastreams).returns({:ds1 => mock1, :ds2 => mock2, :ngds => ngds})
|
522
|
-
@test_object.expects(:solrize_relationships)
|
523
|
-
@test_object.to_solr
|
615
|
+
|
616
|
+
describe "get_values_from_datastream" do
|
617
|
+
it "should look up the named datastream and call get_values with the given pointer/field_name" do
|
618
|
+
mock_ds = mock("Datastream", :get_values=>["value1", "value2"])
|
619
|
+
@test_object.stubs(:datastreams).returns({"ds1"=>mock_ds})
|
620
|
+
@test_object.get_values_from_datastream("ds1", "--my xpath--").should == ["value1", "value2"]
|
621
|
+
end
|
524
622
|
end
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
623
|
+
|
624
|
+
describe "update_datastream_attributes" do
|
625
|
+
it "should look up any datastreams specified as keys in the given hash and call update_attributes on the datastream" do
|
626
|
+
mock_desc_metadata = mock("descMetadata")
|
627
|
+
mock_properties = mock("properties")
|
628
|
+
mock_ds_hash = {'descMetadata'=>mock_desc_metadata, 'properties'=>mock_properties}
|
629
|
+
|
630
|
+
ds_values_hash = {
|
631
|
+
"descMetadata"=>{ [{:person=>0}, :role]=>{"0"=>"role1", "1"=>"role2", "2"=>"role3"} },
|
632
|
+
"properties"=>{ "notes"=>"foo" }
|
633
|
+
}
|
634
|
+
m = FooHistory.new
|
635
|
+
m.stubs(:datastreams).returns(mock_ds_hash)
|
636
|
+
mock_desc_metadata.expects(:update_indexed_attributes).with( ds_values_hash['descMetadata'] )
|
637
|
+
mock_properties.expects(:update_indexed_attributes).with( ds_values_hash['properties'] )
|
638
|
+
m.update_datastream_attributes( ds_values_hash )
|
639
|
+
end
|
640
|
+
it "should not do anything and should return an empty hash if the specified datastream does not exist" do
|
641
|
+
ds_values_hash = {
|
642
|
+
"nonexistentDatastream"=>{ "notes"=>"foo" }
|
643
|
+
}
|
644
|
+
m = FooHistory.new
|
645
|
+
untouched_xml = m.to_xml
|
646
|
+
m.update_datastream_attributes( ds_values_hash ).should == {}
|
647
|
+
m.to_xml.should == untouched_xml
|
648
|
+
end
|
531
649
|
end
|
532
650
|
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
651
|
+
describe "update_attributes" do
|
652
|
+
|
653
|
+
it "should set the attributes and save" do
|
654
|
+
m = FooHistory.new
|
655
|
+
att= {"fubar"=> '1234', "baz" =>'stuff'}
|
656
|
+
|
657
|
+
m.expects(:fubar=).with('1234')
|
658
|
+
m.expects(:baz=).with('stuff')
|
659
|
+
m.expects(:save)
|
660
|
+
m.update_attributes(att)
|
661
|
+
end
|
539
662
|
end
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
663
|
+
|
664
|
+
describe "update_indexed_attributes" do
|
665
|
+
it "should call .update_indexed_attributes on all metadata datastreams & nokogiri datastreams" do
|
666
|
+
m = FooHistory.new
|
667
|
+
att= {"fubar"=>{"-1"=>"mork", "0"=>"york", "1"=>"mangle"}}
|
668
|
+
|
669
|
+
m.datastreams['someData'].expects(:update_indexed_attributes)
|
670
|
+
m.datastreams["withText"].expects(:update_indexed_attributes)
|
671
|
+
m.datastreams['withText2'].expects(:update_indexed_attributes)
|
672
|
+
m.update_indexed_attributes(att)
|
673
|
+
end
|
674
|
+
it "should take a :datastreams argument" do
|
675
|
+
att= {"fubar"=>{"-1"=>"mork", "0"=>"york", "1"=>"mangle"}}
|
676
|
+
stub_get(@this_pid)
|
677
|
+
stub_get_content(@this_pid, ['RELS-EXT', 'someData', 'withText2', 'withText'])
|
678
|
+
m = FooHistory.new()
|
679
|
+
m.update_indexed_attributes(att, :datastreams=>"withText")
|
680
|
+
m.should_not be_nil
|
681
|
+
m.datastreams['someData'].fubar_values.should == []
|
682
|
+
m.datastreams["withText"].fubar_values.should == ['mork', 'york', 'mangle']
|
683
|
+
m.datastreams['withText2'].fubar_values.should == []
|
684
|
+
|
685
|
+
att= {"fubar"=>{"-1"=>"tork", "0"=>"work", "1"=>"bork"}}
|
686
|
+
m.update_indexed_attributes(att, :datastreams=>["someData", "withText2"])
|
687
|
+
m.should_not be_nil
|
688
|
+
m.datastreams['someData'].fubar_values.should == ['tork', 'work', 'bork']
|
689
|
+
m.datastreams["withText"].fubar_values.should == ['mork', 'york', 'mangle']
|
690
|
+
m.datastreams['withText2'].fubar_values.should == ['tork', 'work', 'bork']
|
691
|
+
end
|
547
692
|
end
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
693
|
+
|
694
|
+
it "should expose solr for real." do
|
695
|
+
sinmock = mock('solr instance')
|
696
|
+
conmock = mock("solr conn")
|
697
|
+
sinmock.expects(:conn).returns(conmock)
|
698
|
+
conmock.expects(:query).with('pid: foobar', {}).returns({:baz=>:bif})
|
699
|
+
ActiveFedora::SolrService.expects(:instance).returns(sinmock)
|
700
|
+
FooHistory.solr_search("pid: foobar").should == {:baz=>:bif}
|
556
701
|
end
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
ds_values_hash = {
|
566
|
-
"descMetadata"=>{ [{:person=>0}, :role]=>{"0"=>"role1", "1"=>"role2", "2"=>"role3"} },
|
567
|
-
"properties"=>{ "notes"=>"foo" }
|
568
|
-
}
|
569
|
-
m = FooHistory.new
|
570
|
-
m.stubs(:datastreams).returns(mock_ds_hash)
|
571
|
-
mock_desc_metadata.expects(:update_indexed_attributes).with( ds_values_hash['descMetadata'] )
|
572
|
-
mock_properties.expects(:update_indexed_attributes).with( ds_values_hash['properties'] )
|
573
|
-
m.update_datastream_attributes( ds_values_hash )
|
574
|
-
end
|
575
|
-
it "should not do anything and should return an empty hash if the specified datastream does not exist" do
|
576
|
-
ds_values_hash = {
|
577
|
-
"nonexistentDatastream"=>{ "notes"=>"foo" }
|
578
|
-
}
|
579
|
-
m = FooHistory.new
|
580
|
-
untouched_xml = m.to_xml
|
581
|
-
m.update_datastream_attributes( ds_values_hash ).should == {}
|
582
|
-
m.to_xml.should == untouched_xml
|
702
|
+
it "should expose solr for real. and pass args through" do
|
703
|
+
sinmock = mock('solr instance')
|
704
|
+
conmock = mock("solr conn")
|
705
|
+
sinmock.expects(:conn).returns(conmock)
|
706
|
+
conmock.expects(:query).with('pid: foobar', {:ding => :dang}).returns({:baz=>:bif})
|
707
|
+
ActiveFedora::SolrService.expects(:instance).returns(sinmock)
|
708
|
+
FooHistory.solr_search("pid: foobar", {:ding=>:dang}).should == {:baz=>:bif}
|
583
709
|
end
|
584
|
-
end
|
585
|
-
|
586
|
-
describe "update_attributes" do
|
587
710
|
|
588
|
-
|
589
|
-
m = FooHistory.new
|
590
|
-
att= {"fubar"=> '1234', "baz" =>'stuff'}
|
591
|
-
|
592
|
-
m.expects(:fubar=).with('1234')
|
593
|
-
m.expects(:baz=).with('stuff')
|
594
|
-
m.expects(:save)
|
595
|
-
m.update_attributes(att)
|
596
|
-
end
|
597
|
-
end
|
598
|
-
|
599
|
-
describe "update_indexed_attributes" do
|
600
|
-
it "should call .update_indexed_attributes on all metadata datastreams & nokogiri datastreams" do
|
601
|
-
m = FooHistory.new
|
602
|
-
att= {"fubar"=>{"-1"=>"mork", "0"=>"york", "1"=>"mangle"}}
|
711
|
+
describe '#relationships_by_name' do
|
603
712
|
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
stub_get_content(@this_pid, ['RELS-EXT', 'someData', 'withText2', 'withText'])
|
613
|
-
m = FooHistory.new()
|
614
|
-
m.update_indexed_attributes(att, :datastreams=>"withText")
|
615
|
-
m.should_not be_nil
|
616
|
-
m.datastreams['someData'].fubar_values.should == []
|
617
|
-
m.datastreams["withText"].fubar_values.should == ['mork', 'york', 'mangle']
|
618
|
-
m.datastreams['withText2'].fubar_values.should == []
|
713
|
+
before do
|
714
|
+
class MockNamedRelationships < ActiveFedora::Base
|
715
|
+
include ActiveFedora::FileManagement
|
716
|
+
has_relationship "testing", :has_part, :type=>ActiveFedora::Base
|
717
|
+
has_relationship "testing2", :has_member, :type=>ActiveFedora::Base
|
718
|
+
has_relationship "testing_inbound", :has_part, :type=>ActiveFedora::Base, :inbound=>true
|
719
|
+
end
|
720
|
+
end
|
619
721
|
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
722
|
+
it 'should return current relationships by name' do
|
723
|
+
next_pid = increment_pid.to_s
|
724
|
+
ActiveFedora::Base.stubs(:assign_pid).returns(next_pid)
|
725
|
+
stub_get(next_pid)
|
726
|
+
@test_object2 = MockNamedRelationships.new
|
727
|
+
@test_object2.add_relationship(:has_model, MockNamedRelationships.to_class_uri)
|
728
|
+
@test_object.add_relationship(:has_model, ActiveFedora::Base.to_class_uri)
|
729
|
+
#should return expected named relationships
|
730
|
+
@test_object2.relationships_by_name
|
731
|
+
@test_object2.relationships_by_name[:self]["testing"].should == []
|
732
|
+
@test_object2.relationships_by_name[:self]["testing2"].should == []
|
733
|
+
@test_object2.relationships_by_name[:self]["parts_outbound"].should == []
|
734
|
+
@test_object2.add_relationship_by_name("testing",@test_object)
|
735
|
+
# @test_object2.relationships_by_name.should == {:self=>{"testing"=>[@test_object.internal_uri],"testing2"=>[],"part_of"=>[], "parts_outbound"=>[@test_object.internal_uri], "collection_members"=>[]}}
|
736
|
+
|
737
|
+
@test_object2.relationships_by_name[:self]["testing"].should == [@test_object.internal_uri]
|
738
|
+
@test_object2.relationships_by_name[:self]["testing2"].should == []
|
739
|
+
@test_object2.relationships_by_name[:self]["parts_outbound"].should == [@test_object.internal_uri]
|
740
|
+
end
|
626
741
|
end
|
627
|
-
end
|
628
|
-
|
629
|
-
it "should expose solr for real." do
|
630
|
-
sinmock = mock('solr instance')
|
631
|
-
conmock = mock("solr conn")
|
632
|
-
sinmock.expects(:conn).returns(conmock)
|
633
|
-
conmock.expects(:query).with('pid: foobar', {}).returns({:baz=>:bif})
|
634
|
-
ActiveFedora::SolrService.expects(:instance).returns(sinmock)
|
635
|
-
FooHistory.solr_search("pid: foobar").should == {:baz=>:bif}
|
636
|
-
end
|
637
|
-
it "should expose solr for real. and pass args through" do
|
638
|
-
sinmock = mock('solr instance')
|
639
|
-
conmock = mock("solr conn")
|
640
|
-
sinmock.expects(:conn).returns(conmock)
|
641
|
-
conmock.expects(:query).with('pid: foobar', {:ding => :dang}).returns({:baz=>:bif})
|
642
|
-
ActiveFedora::SolrService.expects(:instance).returns(sinmock)
|
643
|
-
FooHistory.solr_search("pid: foobar", {:ding=>:dang}).should == {:baz=>:bif}
|
644
|
-
end
|
645
742
|
|
646
|
-
describe '#relationships_by_name' do
|
647
743
|
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
has_relationship "testing_inbound", :has_part, :type=>ActiveFedora::Base, :inbound=>true
|
744
|
+
describe '#create_relationship_name_methods' do
|
745
|
+
before do
|
746
|
+
class MockCreateNamedRelationshipMethodsBase < ActiveFedora::Base
|
747
|
+
include ActiveFedora::Relationships
|
748
|
+
register_relationship_desc :self, "testing", :is_part_of, :type=>ActiveFedora::Base
|
749
|
+
create_relationship_name_methods "testing"
|
750
|
+
end
|
656
751
|
end
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
@test_object2.relationships_by_name[:self]["testing"].should == [@test_object.internal_uri]
|
675
|
-
@test_object2.relationships_by_name[:self]["testing2"].should == []
|
676
|
-
@test_object2.relationships_by_name[:self]["parts_outbound"].should == [@test_object.internal_uri]
|
677
|
-
end
|
678
|
-
end
|
679
|
-
|
680
|
-
|
681
|
-
describe '#create_relationship_name_methods' do
|
682
|
-
before do
|
683
|
-
ActiveSupport::Deprecation.stubs(:warn)
|
684
|
-
class MockCreateNamedRelationshipMethodsBase < ActiveFedora::Base
|
685
|
-
register_relationship_desc :self, "testing", :is_part_of, :type=>ActiveFedora::Base
|
686
|
-
create_relationship_name_methods "testing"
|
752
|
+
|
753
|
+
it 'should append and remove using helper methods for each outbound relationship' do
|
754
|
+
next_pid = increment_pid.to_s
|
755
|
+
ActiveFedora::Base.stubs(:assign_pid).returns(next_pid)
|
756
|
+
stub_get(next_pid)
|
757
|
+
@test_object2 = MockCreateNamedRelationshipMethodsBase.new
|
758
|
+
@test_object2.should respond_to(:testing_append)
|
759
|
+
@test_object2.should respond_to(:testing_remove)
|
760
|
+
#test executing each one to make sure code added is correct
|
761
|
+
model_pid =ActiveFedora::Base.to_class_uri
|
762
|
+
@test_object.add_relationship(:has_model,model_pid)
|
763
|
+
@test_object2.add_relationship(:has_model,model_pid)
|
764
|
+
@test_object2.testing_append(@test_object)
|
765
|
+
#create relationship to access generate_uri method for an object
|
766
|
+
@test_object2.relationships_by_name[:self]["testing"].should == [@test_object.internal_uri]
|
767
|
+
@test_object2.testing_remove(@test_object)
|
768
|
+
@test_object2.relationships_by_name[:self]["testing"].should == []
|
687
769
|
end
|
688
770
|
end
|
689
|
-
|
690
|
-
it 'should append and remove using helper methods for each outbound relationship' do
|
691
|
-
next_pid = increment_pid.to_s
|
692
|
-
ActiveFedora::RubydoraConnection.instance.stubs(:nextid).returns(next_pid)
|
693
|
-
stub_get(next_pid)
|
694
|
-
@test_object2 = MockCreateNamedRelationshipMethodsBase.new
|
695
|
-
@test_object2.should respond_to(:testing_append)
|
696
|
-
@test_object2.should respond_to(:testing_remove)
|
697
|
-
#test executing each one to make sure code added is correct
|
698
|
-
model_pid =ActiveFedora::Base.to_class_uri
|
699
|
-
@test_object.add_relationship(:has_model,model_pid)
|
700
|
-
@test_object2.add_relationship(:has_model,model_pid)
|
701
|
-
@test_object2.testing_append(@test_object)
|
702
|
-
#create relationship to access generate_uri method for an object
|
703
|
-
@test_object2.relationships_by_name[:self]["testing"].should == [@test_object.internal_uri]
|
704
|
-
@test_object2.testing_remove(@test_object)
|
705
|
-
@test_object2.relationships_by_name[:self]["testing"].should == []
|
706
|
-
end
|
707
|
-
end
|
708
771
|
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
772
|
+
describe ".solrize_relationships" do
|
773
|
+
it "should serialize the relationships into a Hash" do
|
774
|
+
graph = RDF::Graph.new
|
775
|
+
subject = RDF::URI.new "info:fedora/test:sample_pid"
|
776
|
+
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:is_member_of), RDF::URI.new('info:fedora/demo:10'))
|
777
|
+
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:is_part_of), RDF::URI.new('info:fedora/demo:11'))
|
778
|
+
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:has_part), RDF::URI.new('info:fedora/demo:12'))
|
779
|
+
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:conforms_to), "AnInterface")
|
780
|
+
|
781
|
+
@test_object.expects(:relationships).returns(graph)
|
782
|
+
solr_doc = @test_object.solrize_relationships
|
783
|
+
solr_doc["is_member_of_s"].should == ["info:fedora/demo:10"]
|
784
|
+
solr_doc["is_part_of_s"].should == ["info:fedora/demo:11"]
|
785
|
+
solr_doc["has_part_s"].should == ["info:fedora/demo:12"]
|
786
|
+
solr_doc["conforms_to_s"].should == ["AnInterface"]
|
787
|
+
end
|
724
788
|
end
|
725
789
|
end
|
726
790
|
end
|