active-fedora 5.1.0 → 5.2.0
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/active-fedora.gemspec +1 -2
- data/lib/active_fedora/datastreams.rb +14 -14
- data/lib/active_fedora/file_management.rb +5 -3
- data/lib/active_fedora/metadata_datastream_helper.rb +5 -1
- data/lib/active_fedora/nokogiri_datastream.rb +17 -4
- data/lib/active_fedora/rdf_datastream.rb +59 -36
- data/lib/active_fedora/relationships.rb +28 -11
- data/lib/active_fedora/version.rb +1 -1
- data/spec/config_helper.rb +3 -3
- data/spec/integration/base_spec.rb +15 -3
- data/spec/integration/bug_spec.rb +0 -3
- data/spec/integration/datastream_collections_spec.rb +9 -9
- data/spec/integration/datastream_spec.rb +1 -1
- data/spec/integration/full_featured_model_spec.rb +3 -4
- data/spec/integration/ntriples_datastream_spec.rb +0 -1
- data/spec/integration/rels_ext_datastream_spec.rb +12 -1
- data/spec/integration/semantic_node_spec.rb +10 -0
- data/spec/integration/solr_service_spec.rb +2 -2
- data/spec/spec_helper.rb +4 -7
- data/spec/support/mock_fedora.rb +10 -10
- data/spec/unit/active_fedora_spec.rb +8 -8
- data/spec/unit/association_proxy_spec.rb +2 -1
- data/spec/unit/base_cma_spec.rb +2 -2
- data/spec/unit/base_datastream_management_spec.rb +9 -9
- data/spec/unit/base_extra_spec.rb +25 -25
- data/spec/unit/base_file_management_spec.rb +32 -23
- data/spec/unit/base_spec.rb +94 -151
- data/spec/unit/callback_spec.rb +16 -11
- data/spec/unit/code_configurator_spec.rb +4 -4
- data/spec/unit/content_model_spec.rb +8 -8
- data/spec/unit/datastream_collections_spec.rb +23 -23
- data/spec/unit/datastream_spec.rb +7 -7
- data/spec/unit/datastreams_spec.rb +189 -304
- data/spec/unit/file_configurator_spec.rb +56 -56
- data/spec/unit/has_many_collection_spec.rb +1 -1
- data/spec/unit/model_spec.rb +51 -56
- data/spec/unit/nokogiri_datastream_spec.rb +24 -25
- data/spec/unit/ntriples_datastream_spec.rb +18 -27
- data/spec/unit/property_spec.rb +0 -2
- data/spec/unit/qualified_dublin_core_datastream_spec.rb +1 -2
- data/spec/unit/rdfxml_rdf_datastream_spec.rb +1 -1
- data/spec/unit/relationship_graph_spec.rb +1 -1
- data/spec/unit/relationships_spec.rb +64 -52
- data/spec/unit/rels_ext_datastream_spec.rb +7 -7
- data/spec/unit/semantic_node_spec.rb +5 -5
- data/spec/unit/service_definitions_spec.rb +18 -16
- data/spec/unit/solr_config_options_spec.rb +6 -6
- data/spec/unit/solr_service_spec.rb +16 -16
- metadata +5 -21
data/spec/unit/callback_spec.rb
CHANGED
@@ -31,19 +31,24 @@ describe ActiveFedora::Base do
|
|
31
31
|
end
|
32
32
|
|
33
33
|
it "Should have after_initialize, before_save,after_save, before_create, after_create, after_update, before_update, before_destroy" do
|
34
|
-
CallbackStub.any_instance.
|
35
|
-
CallbackStub.any_instance.
|
36
|
-
CallbackStub.any_instance.
|
37
|
-
CallbackStub.any_instance.
|
38
|
-
CallbackStub.any_instance.
|
39
|
-
CallbackStub.
|
40
|
-
CallbackStub.any_instance.expects(:b_update)
|
41
|
-
CallbackStub.any_instance.expects(:a_update)
|
42
|
-
CallbackStub.any_instance.expects(:do_stuff)
|
43
|
-
cb = CallbackStub.new
|
34
|
+
CallbackStub.any_instance.should_receive(:a_init)
|
35
|
+
CallbackStub.any_instance.should_receive :b_create
|
36
|
+
CallbackStub.any_instance.should_receive :a_create
|
37
|
+
CallbackStub.any_instance.should_receive(:b_save)
|
38
|
+
CallbackStub.any_instance.should_receive(:a_save)
|
39
|
+
cb = CallbackStub.new :pid => 'test:123'
|
44
40
|
cb.save
|
41
|
+
end
|
42
|
+
it "Should have after_initialize, before_save,after_save, before_create, after_create, after_update, before_update, before_destroy" do
|
43
|
+
CallbackStub.any_instance.should_receive(:a_init)
|
44
|
+
CallbackStub.any_instance.should_receive(:b_save)
|
45
|
+
CallbackStub.any_instance.should_receive(:a_save)
|
46
|
+
CallbackStub.any_instance.should_receive(:a_find)
|
47
|
+
CallbackStub.any_instance.should_receive(:b_update)
|
48
|
+
CallbackStub.any_instance.should_receive(:a_update)
|
49
|
+
CallbackStub.any_instance.should_receive(:do_stuff)
|
45
50
|
|
46
|
-
cb2 = CallbackStub.find(
|
51
|
+
cb2 = CallbackStub.find('test:123')
|
47
52
|
cb2.save
|
48
53
|
|
49
54
|
cb2.destroy
|
@@ -38,10 +38,10 @@ describe ActiveFedora::FileConfigurator do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
it "should initialize from code" do
|
41
|
-
YAML.
|
42
|
-
File.
|
43
|
-
File.
|
44
|
-
File.
|
41
|
+
YAML.should_receive(:load).never
|
42
|
+
File.should_receive(:exists?).never
|
43
|
+
File.should_receive(:read).never
|
44
|
+
File.should_receive(:open).never
|
45
45
|
ActiveFedora.init(@config_params)
|
46
46
|
ActiveFedora.fedora_config.credentials.should == @config_params[:fedora_config]
|
47
47
|
ActiveFedora.solr_config.should == @config_params[:solr_config]
|
@@ -20,8 +20,8 @@ describe ActiveFedora::ContentModel do
|
|
20
20
|
|
21
21
|
before(:each) do
|
22
22
|
stub_get('__nextid__')
|
23
|
-
ActiveFedora::Base.
|
24
|
-
Rubydora::Repository.any_instance.
|
23
|
+
ActiveFedora::Base.stub(:assign_pid).and_return("__nextid__")
|
24
|
+
Rubydora::Repository.any_instance.stub(:client).and_return(@mock_client)
|
25
25
|
@test_cmodel = ActiveFedora::ContentModel.new
|
26
26
|
end
|
27
27
|
|
@@ -54,12 +54,12 @@ describe ActiveFedora::ContentModel do
|
|
54
54
|
describe "models_asserted_by" do
|
55
55
|
it "should return an array of all of the content models asserted by the given object" do
|
56
56
|
mock_object = mock("ActiveFedora Object")
|
57
|
-
mock_object.
|
57
|
+
mock_object.should_receive(:relationships).with(:has_model).and_return(["info:fedora/fedora-system:ServiceDefinition-3.0", "info:fedora/afmodel:SampleModel", "info:fedora/afmodel:NonDefinedModel"])
|
58
58
|
ActiveFedora::ContentModel.models_asserted_by(mock_object).should == ["info:fedora/fedora-system:ServiceDefinition-3.0", "info:fedora/afmodel:SampleModel", "info:fedora/afmodel:NonDefinedModel"]
|
59
59
|
end
|
60
60
|
it "should return an empty array if the object doesn't have a RELS-EXT datastream" do
|
61
61
|
mock_object = mock("ActiveFedora Object")
|
62
|
-
mock_object.
|
62
|
+
mock_object.should_receive(:relationships).with(:has_model).and_return([])
|
63
63
|
ActiveFedora::ContentModel.models_asserted_by(mock_object).should == []
|
64
64
|
end
|
65
65
|
end
|
@@ -67,23 +67,23 @@ describe ActiveFedora::ContentModel do
|
|
67
67
|
describe "known_models_asserted_by" do
|
68
68
|
it "should figure out the applicable models to load" do
|
69
69
|
mock_object = mock("ActiveFedora Object")
|
70
|
-
mock_object.
|
70
|
+
mock_object.should_receive(:relationships).with(:has_model).and_return(["info:fedora/fedora-system:ServiceDefinition-3.0", "info:fedora/afmodel:SampleModel", "info:fedora/afmodel:NonDefinedModel"])
|
71
71
|
ActiveFedora::ContentModel.known_models_for(mock_object).should == [SampleModel]
|
72
72
|
end
|
73
73
|
it "should support namespaced models" do
|
74
74
|
pending "This is harder than it looks."
|
75
75
|
mock_object = mock("ActiveFedora Object")
|
76
|
-
mock_object.
|
76
|
+
mock_object.should_receive(:relationships).with(:has_model).and_return(["info:fedora/afmodel:Sample_NamespacedModel"])
|
77
77
|
ActiveFedora::ContentModel.known_models_for(mock_object).should == [Sample::NamespacedModel]
|
78
78
|
end
|
79
79
|
it "should default to using ActiveFedora::Base as the model" do
|
80
80
|
mock_object = mock("ActiveFedora Object")
|
81
|
-
mock_object.
|
81
|
+
mock_object.should_receive(:relationships).with(:has_model).and_return(["info:fedora/afmodel:NonDefinedModel"])
|
82
82
|
ActiveFedora::ContentModel.known_models_for(mock_object).should == [ActiveFedora::Base]
|
83
83
|
end
|
84
84
|
it "should still work even if the object doesn't have a RELS-EXT datastream" do
|
85
85
|
mock_object = mock("ActiveFedora Object")
|
86
|
-
mock_object.
|
86
|
+
mock_object.should_receive(:relationships).with(:has_model).and_return([])
|
87
87
|
ActiveFedora::ContentModel.known_models_for(mock_object).should == [ActiveFedora::Base]
|
88
88
|
end
|
89
89
|
end
|
@@ -65,8 +65,8 @@ describe ActiveFedora::DatastreamCollections do
|
|
65
65
|
@test_object2 = MockAddNamedDatastream.new
|
66
66
|
@f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"))
|
67
67
|
@f2 = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ))
|
68
|
-
@f.
|
69
|
-
@f2.
|
68
|
+
@f.stub(:content_type).and_return("image/jpeg")
|
69
|
+
@f2.stub(:original_filename).and_return("dino.jpg")
|
70
70
|
end
|
71
71
|
|
72
72
|
it 'cannot add a datastream with name that does not exist' do
|
@@ -96,7 +96,7 @@ describe ActiveFedora::DatastreamCollections do
|
|
96
96
|
end
|
97
97
|
|
98
98
|
it "should check the file for a content type" do
|
99
|
-
@f.
|
99
|
+
@f.should_receive(:content_type).and_return("image/jpeg")
|
100
100
|
@test_object2.add_named_datastream("thumbnail",{:file=>@f})
|
101
101
|
end
|
102
102
|
|
@@ -105,7 +105,7 @@ describe ActiveFedora::DatastreamCollections do
|
|
105
105
|
end
|
106
106
|
|
107
107
|
it "should encsure mimetype and content type match" do
|
108
|
-
@f.
|
108
|
+
@f.stub(:content_type).and_return("image/tiff")
|
109
109
|
expect { @test_object2.add_named_datastream("thumbnail",{:file=>f}) }.to raise_error
|
110
110
|
end
|
111
111
|
|
@@ -118,7 +118,7 @@ describe ActiveFedora::DatastreamCollections do
|
|
118
118
|
|
119
119
|
it "should cgecj that a dsid forms to the prefix" do
|
120
120
|
#if dsid supplied check that conforms to prefix
|
121
|
-
@f.
|
121
|
+
@f.stub(:content_type).and_return("image/jpeg")
|
122
122
|
expect { @test_object2.add_named_datastream("thumbnail",{:file=>@f,:dsid=>"DS1"}) }.to raise_error
|
123
123
|
end
|
124
124
|
|
@@ -155,8 +155,8 @@ describe ActiveFedora::DatastreamCollections do
|
|
155
155
|
@test_object2 = MockAddNamedFileDatastream.new
|
156
156
|
f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"))
|
157
157
|
#these normally supplied in multi-part post request
|
158
|
-
f.
|
159
|
-
f.
|
158
|
+
f.stub(:original_filename).and_return("minivan.jpg")
|
159
|
+
f.stub(:content_type).and_return("image/jpeg")
|
160
160
|
@test_object2.add_named_file_datastream("thumbnail",f)
|
161
161
|
thumb = @test_object2.thumbnail.first
|
162
162
|
thumb.class.should == ActiveFedora::Datastream
|
@@ -183,10 +183,10 @@ describe ActiveFedora::DatastreamCollections do
|
|
183
183
|
@test_object2 = MockUpdateNamedDatastream.new
|
184
184
|
f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"))
|
185
185
|
f2 = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ))
|
186
|
-
f.
|
187
|
-
f.
|
188
|
-
f2.
|
189
|
-
f2.
|
186
|
+
f.stub(:content_type).and_return("image/jpeg")
|
187
|
+
f.stub(:original_filename).and_return("minivan.jpg")
|
188
|
+
f2.stub(:content_type).and_return("image/jpeg")
|
189
|
+
f2.stub(:original_filename).and_return("dino.jpg")
|
190
190
|
#check raise exception if dsid not supplied
|
191
191
|
@test_object2.add_named_datastream("thumbnail",{:file=>f})
|
192
192
|
had_exception = false
|
@@ -273,11 +273,11 @@ describe ActiveFedora::DatastreamCollections do
|
|
273
273
|
it 'should return a hash of datastream names to arrays of datastreams' do
|
274
274
|
@test_object2 = MockNamedDatastreams.new
|
275
275
|
f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg" ))
|
276
|
-
f.
|
277
|
-
f.
|
276
|
+
f.stub(:content_type).and_return("image/jpeg")
|
277
|
+
f.stub(:original_filename).and_return("minivan.jpg")
|
278
278
|
f2 = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ))
|
279
|
-
f2.
|
280
|
-
f2.
|
279
|
+
f2.stub(:content_type).and_return("image/jpeg")
|
280
|
+
f2.stub(:original_filename).and_return("dino.jpg")
|
281
281
|
@test_object2.thumbnail_file_append(f)
|
282
282
|
@test_object2.high_file_append(f2)
|
283
283
|
@test_object2.external_append({:dsLocation=>"http://myresource.com"})
|
@@ -319,11 +319,11 @@ describe ActiveFedora::DatastreamCollections do
|
|
319
319
|
it 'should provide a hash of datastreams names to array of datastream ids' do
|
320
320
|
@test_object2 = MockNamedDatastreamsIds.new
|
321
321
|
f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg" ))
|
322
|
-
f.
|
323
|
-
f.
|
322
|
+
f.stub(:content_type).and_return("image/jpeg")
|
323
|
+
f.stub(:original_filename).and_return("minivan.jpg")
|
324
324
|
f2 = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ))
|
325
|
-
f2.
|
326
|
-
f2.
|
325
|
+
f2.stub(:content_type).and_return("image/jpeg")
|
326
|
+
f2.stub(:original_filename).and_return("dino.jpg")
|
327
327
|
@test_object2.thumbnail_file_append(f)
|
328
328
|
@test_object2.high_file_append(f2)
|
329
329
|
@test_object2.external_append({:dsLocation=>"http://myresource.com"})
|
@@ -349,8 +349,8 @@ describe ActiveFedora::DatastreamCollections do
|
|
349
349
|
@test_object2.should respond_to(:high_ids)
|
350
350
|
f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"))
|
351
351
|
f2 = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ))
|
352
|
-
f2.
|
353
|
-
f.
|
352
|
+
f2.stub(:original_filename).and_return("dino.jpg")
|
353
|
+
f.stub(:content_type).and_return("image/jpeg")
|
354
354
|
@test_object2.add_named_datastream("thumbnail",{:content_type=>"image/jpeg",:blob=>f, :label=>"testDS"})
|
355
355
|
@test_object2.add_named_datastream("high",{:content_type=>"image/jpeg",:blob=>f2})
|
356
356
|
@test_object2.add_named_datastream("high",{:content_type=>"image/jpeg",:blob=>f2})
|
@@ -388,8 +388,8 @@ describe ActiveFedora::DatastreamCollections do
|
|
388
388
|
@test_object2.should respond_to(:thumbnail_append)
|
389
389
|
@test_object2.should respond_to(:ead_append)
|
390
390
|
f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"))
|
391
|
-
f.
|
392
|
-
f.
|
391
|
+
f.stub(:content_type).and_return("image/jpeg")
|
392
|
+
f.stub(:original_filename).and_return("minivan.jpg")
|
393
393
|
@test_object2.thumbnail_file_append(f)
|
394
394
|
t2_thumb1 = @test_object2.thumbnail.first
|
395
395
|
t2_thumb1.mimeType.should == "image/jpeg"
|
@@ -14,7 +14,7 @@ describe ActiveFedora::Datastream do
|
|
14
14
|
its(:metadata?) { should be_false}
|
15
15
|
|
16
16
|
it "should escape dots in to_param" do
|
17
|
-
@test_datastream.
|
17
|
+
@test_datastream.stub(:dsid).and_return('foo.bar')
|
18
18
|
@test_datastream.to_param.should == 'foo%2ebar'
|
19
19
|
end
|
20
20
|
|
@@ -64,10 +64,10 @@ describe ActiveFedora::Datastream do
|
|
64
64
|
describe '#save' do
|
65
65
|
it "should set changed" do
|
66
66
|
mock_repo = mock('repository')
|
67
|
-
mock_repo.
|
68
|
-
mock_repo.
|
69
|
-
mock_repo.
|
70
|
-
@test_object.inner_object.
|
67
|
+
mock_repo.stub(:config).and_return({})
|
68
|
+
mock_repo.stub(:add_datastream).with(:versionable => true, :pid => @test_object.pid, :dsid => 'abcd', :controlGroup => 'M', :dsState => 'A', :content => 'hi there')
|
69
|
+
mock_repo.stub(:datastream).with(:dsid => 'abcd', :pid => @test_object.pid).and_return('')
|
70
|
+
@test_object.inner_object.stub(:repository).and_return(mock_repo)
|
71
71
|
@test_datastream.save
|
72
72
|
@test_datastream.should_not be_changed
|
73
73
|
end
|
@@ -122,8 +122,8 @@ describe ActiveFedora::Datastream do
|
|
122
122
|
EOS
|
123
123
|
|
124
124
|
mock_repo = mock('repository', :config=>{})
|
125
|
-
@test_object.inner_object.
|
126
|
-
mock_repo.
|
125
|
+
@test_object.inner_object.stub(:repository).and_return(mock_repo)
|
126
|
+
mock_repo.should_receive(:datastream).with(:dsid => 'abcd', :pid => @test_object.pid).and_return(ds_profile)
|
127
127
|
@test_datastream.size.should == 9999
|
128
128
|
end
|
129
129
|
|
@@ -1,358 +1,243 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe ActiveFedora::Datastreams do
|
4
|
-
|
5
|
-
@test_object = ActiveFedora::Base.new
|
6
|
-
end
|
7
|
-
|
8
|
-
it "should respond_to has_metadata" do
|
9
|
-
ActiveFedora::Base.respond_to?(:has_metadata).should be_true
|
10
|
-
end
|
4
|
+
subject { ActiveFedora::Base.new }
|
11
5
|
|
12
|
-
describe
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
mock_fds.expects(:metadata?).returns(false)
|
18
|
-
mock_ngds = mock("nokogiri ds")
|
19
|
-
mock_ngds.expects(:metadata?).returns(true)
|
20
|
-
|
21
|
-
[mock_mds1,mock_mds2].each do |ds|
|
22
|
-
ds.expects(:metadata?).returns(true)
|
6
|
+
describe '.has_metadata' do
|
7
|
+
before do
|
8
|
+
class FooHistory < ActiveFedora::Base
|
9
|
+
has_metadata :name => 'dsid'
|
10
|
+
has_metadata :name => 'complex_ds', :versionable => true, :autocreate => true, :type => 'Z', :label => 'My Label', :control_group => 'Z'
|
23
11
|
end
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should have a ds_specs entry" do
|
15
|
+
FooHistory.ds_specs.should have_key('dsid')
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should have reasonable defaults" do
|
19
|
+
FooHistory.ds_specs['dsid'].should include(:autocreate => false)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should let you override defaults" do
|
23
|
+
FooHistory.ds_specs['complex_ds'].should include(:versionable => true, :autocreate => true, :type => 'Z', :label => 'My Label', :control_group => 'Z')
|
32
24
|
end
|
33
25
|
end
|
34
26
|
|
35
|
-
describe
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
ds.versionable.should be_true
|
27
|
+
describe '.has_file_datastream' do
|
28
|
+
before do
|
29
|
+
class FooHistory < ActiveFedora::Base
|
30
|
+
has_file_datastream :name => 'dsid'
|
31
|
+
end
|
41
32
|
end
|
42
|
-
|
43
|
-
|
44
|
-
|
33
|
+
|
34
|
+
it "should have reasonable defaults" do
|
35
|
+
FooHistory.ds_specs['dsid'].should include(:type => ActiveFedora::Datastream, :label => 'File Datastream', :control_group => 'M')
|
45
36
|
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "#serialize_datastreams" do
|
40
|
+
it "should touch each datastream" do
|
41
|
+
m1 = mock()
|
42
|
+
m2 = mock()
|
46
43
|
|
44
|
+
m1.should_receive(:serialize!)
|
45
|
+
m2.should_receive(:serialize!)
|
46
|
+
subject.stub(:datastreams => { :m1 => m1, :m2 => m2})
|
47
|
+
subject.serialize_datastreams
|
48
|
+
end
|
47
49
|
end
|
48
50
|
|
49
|
-
describe "
|
50
|
-
|
51
|
-
|
52
|
-
|
51
|
+
describe "#add_disseminator_location_to_datastreams" do
|
52
|
+
it "should infer dsLocations for E datastreams without hitting Fedora" do
|
53
|
+
|
54
|
+
mock_specs = {:e => { :disseminator => 'xyz' }}
|
55
|
+
mock_ds = mock(:controlGroup => 'E')
|
56
|
+
ActiveFedora::Base.stub(:ds_specs => mock_specs)
|
57
|
+
ActiveFedora.stub(:config_for_environment => { :url => 'http://localhost'})
|
58
|
+
subject.stub(:pid => 'test:1', :datastreams => {:e => mock_ds})
|
59
|
+
mock_ds.should_receive(:dsLocation=).with("http://localhost/objects/test:1/methods/xyz")
|
60
|
+
subject.add_disseminator_location_to_datastreams
|
53
61
|
end
|
62
|
+
end
|
54
63
|
|
64
|
+
describe "#corresponding_datastream_name" do
|
55
65
|
before(:each) do
|
56
|
-
|
57
|
-
stub_get(@this_pid)
|
58
|
-
Rubydora::Repository.any_instance.stubs(:client).returns(@mock_client)
|
59
|
-
ActiveFedora::Base.stubs(:assign_pid).returns(@this_pid)
|
60
|
-
#ActiveFedora::RubydoraConnection.instance.stubs(:nextid).returns(@this_pid)
|
66
|
+
subject.stub(:datastreams => { 'abc' => mock(), 'a_b_c' => mock(), 'a-b' => mock()})
|
61
67
|
end
|
62
68
|
|
63
|
-
|
64
|
-
|
65
|
-
class FooHistory < ActiveFedora::Base
|
66
|
-
end
|
67
|
-
end
|
68
|
-
after do
|
69
|
-
Object.send(:remove_const, :FooHistory)
|
70
|
-
end
|
71
|
-
subject { FooHistory}
|
72
|
-
it "should update the ds_spec" do
|
73
|
-
FooHistory.ds_specs.keys.should == ['RELS-EXT']
|
74
|
-
FooHistory.has_metadata :type=>ActiveFedora::Datastream, :name=>'new_ds'
|
75
|
-
FooHistory.ds_specs.keys.should include 'new_ds'
|
76
|
-
end
|
77
|
-
it "should be able to set a type" do
|
78
|
-
FooHistory.has_metadata :type=>ActiveFedora::Datastream, :name=>'new_ds', :control_group=>'R'
|
79
|
-
FooHistory.ds_specs['new_ds'][:control_group].should == 'R'
|
80
|
-
end
|
81
|
-
it "should be able to set versionable to false" do
|
82
|
-
FooHistory.has_metadata :type=>ActiveFedora::Datastream, :name=>'new_ds', :versionable=>false
|
83
|
-
FooHistory.has_file_datastream :type=>ActiveFedora::Datastream, :name=>'newer_ds', :versionable=>false
|
84
|
-
FooHistory.ds_specs['new_ds'][:versionable].should be_false
|
85
|
-
FooHistory.ds_specs['newer_ds'][:versionable].should be_false
|
86
|
-
end
|
87
|
-
it "should be able to set versionable to true" do
|
88
|
-
FooHistory.has_metadata :type=>ActiveFedora::Datastream, :name=>'new_ds', :versionable=>true
|
89
|
-
FooHistory.ds_specs['new_ds'][:versionable].should be_true
|
90
|
-
end
|
91
|
-
it "should not set versionable if it's not supplied" do
|
92
|
-
FooHistory.has_metadata :type=>ActiveFedora::Datastream, :name=>'new_ds'
|
93
|
-
FooHistory.ds_specs['new_ds'].keys.should_not include :versionable
|
94
|
-
end
|
95
|
-
|
69
|
+
it "should use the name, if it exists" do
|
70
|
+
subject.corresponding_datastream_name('abc').should == 'abc'
|
96
71
|
end
|
97
72
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"someData", :autocreate => true do |m|
|
102
|
-
m.field "fubar", :string
|
103
|
-
m.field "swank", :text
|
104
|
-
end
|
105
|
-
has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"withText2", :label=>"withLabel", :autocreate => true do |m|
|
106
|
-
m.field "fubar", :text
|
107
|
-
end
|
108
|
-
|
109
|
-
has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"no_autocreate", :autocreate => false, :label=>"withLabel" do |m|
|
110
|
-
m.field "fubar", :text
|
111
|
-
end
|
112
|
-
end
|
113
|
-
stub_ingest(@this_pid)
|
114
|
-
stub_add_ds(@this_pid, ['RELS-EXT', 'someData', 'withText', 'withText2','no_autocreate'])
|
115
|
-
|
116
|
-
@n = FooHistory.new()
|
117
|
-
FooHistory.stubs(:assign_pid).returns(@this_pid)
|
118
|
-
@n.datastreams['RELS-EXT'].expects(:changed?).returns(true).at_least_once
|
119
|
-
@n.expects(:update_index)
|
120
|
-
end
|
73
|
+
it "should hash-erize underscores" do
|
74
|
+
subject.corresponding_datastream_name('a_b').should == 'a-b'
|
75
|
+
end
|
121
76
|
|
122
|
-
|
123
|
-
|
124
|
-
|
77
|
+
it "should return nil if nothing matches" do
|
78
|
+
subject.corresponding_datastream_name('xyz').should be_nil
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "#datastreams" do
|
83
|
+
it "should return the datastream hash proxy" do
|
84
|
+
subject.stub(:load_datastreams)
|
85
|
+
subject.datastreams.should be_a_kind_of(ActiveFedora::DatastreamHash)
|
86
|
+
end
|
87
|
+
end
|
125
88
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
89
|
+
describe "#configure_datastream" do
|
90
|
+
it "should look up the ds_spec" do
|
91
|
+
mock_dsspec = { :type => nil }
|
92
|
+
subject.stub(:ds_specs => {'abc' => mock_dsspec})
|
93
|
+
subject.configure_datastream(mock(:dsid => 'abc'))
|
94
|
+
end
|
130
95
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
96
|
+
it "should be ok if there is no ds spec" do
|
97
|
+
mock_dsspec = mock()
|
98
|
+
subject.stub(:ds_specs => {})
|
99
|
+
subject.configure_datastream(mock(:dsid => 'abc'))
|
100
|
+
end
|
135
101
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
102
|
+
it "should configure RelsExtDatastream" do
|
103
|
+
mock_dsspec = { :type => ActiveFedora::RelsExtDatastream }
|
104
|
+
subject.stub(:ds_specs => {'abc' => mock_dsspec})
|
105
|
+
|
106
|
+
ds = mock(:dsid => 'abc')
|
107
|
+
ds.should_receive(:model=).with(subject)
|
108
|
+
|
109
|
+
subject.configure_datastream(ds)
|
143
110
|
end
|
144
111
|
|
112
|
+
it "should run a Proc" do
|
113
|
+
ds = mock(:dsid => 'abc')
|
114
|
+
@count = 0
|
115
|
+
mock_dsspec = { :block => lambda { |x| @count += 1 } }
|
116
|
+
subject.stub(:ds_specs => {'abc' => mock_dsspec})
|
145
117
|
|
146
|
-
it "should create specified datastreams with appropriate control group" do
|
147
|
-
ActiveFedora.stubs(:config_for_environment).returns(:url=>'sub_url')
|
148
|
-
stub_ingest(@this_pid)
|
149
|
-
stub_add_ds(@this_pid, ['RELS-EXT', 'DC', 'rightsMetadata', 'properties', 'descMetadata', 'UKETD_DC'])
|
150
|
-
stub_get(@this_pid, ['RELS-EXT', 'DC', 'rightsMetadata', 'properties', 'descMetadata', 'UKETD_DC'])
|
151
|
-
class UketdObject < ActiveFedora::Base
|
152
|
-
has_metadata :name => "rightsMetadata", :label=>"Rights metadata", :type => ActiveFedora::NokogiriDatastream
|
153
|
-
|
154
|
-
# Uses the Hydra MODS Article profile for tracking most of the descriptive metadata
|
155
|
-
# TODO: define terminology for ETD
|
156
|
-
has_metadata :name => "descMetadata", :label=>"MODS metadata", :control_group=>"M", :type => ActiveFedora::NokogiriDatastream
|
157
118
|
|
158
|
-
|
119
|
+
expect {
|
120
|
+
subject.configure_datastream(ds)
|
121
|
+
}.to change { @count }.by(1)
|
122
|
+
end
|
123
|
+
end
|
159
124
|
|
160
|
-
|
125
|
+
describe "#datastream_from_spec" do
|
126
|
+
it "should fetch the rubydora datastream" do
|
127
|
+
subject.inner_object.should_receive(:datastream_object_for).with('dsid', {})
|
128
|
+
subject.datastream_from_spec({}, 'dsid')
|
129
|
+
end
|
130
|
+
end
|
161
131
|
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
132
|
+
describe "#load_datastreams" do
|
133
|
+
it "should load and configure persisted datastreams and should add any datastreams left over in the ds specs" do
|
134
|
+
pending
|
135
|
+
end
|
136
|
+
end
|
167
137
|
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
@n.datastreams["properties"].controlGroup.should eql("X")
|
175
|
-
@n.datastreams["descMetadata"].controlGroup.should eql("M")
|
176
|
-
@n.datastreams["UKETD_DC"].controlGroup.should eql("E")
|
177
|
-
@n.datastreams["UKETD_DC"].dsLocation.should == "sub_url/objects/#{@this_pid}/methods/hull-sDef:uketdObject/getUKETDMetadata"
|
178
|
-
end
|
179
|
-
|
180
|
-
|
181
|
-
context ":control_group => 'E'" do
|
182
|
-
before do
|
183
|
-
stub_get(@this_pid)
|
184
|
-
stub_add_ds(@this_pid, ['RELS-EXT', 'externalDisseminator', 'externalUrl'])
|
185
|
-
end
|
138
|
+
describe "#add_datastream" do
|
139
|
+
it "should add the datastream to the object" do
|
140
|
+
ds = mock(:dsid => 'Abc')
|
141
|
+
subject.add_datastream(ds)
|
142
|
+
subject.datastreams['Abc'].should == ds
|
143
|
+
end
|
186
144
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
end
|
191
|
-
|
192
|
-
it "should allow :control_group => 'E' with a :url option" do
|
193
|
-
class MoreFooHistory < ActiveFedora::Base
|
194
|
-
has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"externalDisseminator",:control_group => "E", :url => "http://exampl.com/mypic.jpg"
|
195
|
-
end
|
196
|
-
stub_ingest(@this_pid)
|
197
|
-
@n = MoreFooHistory.new
|
198
|
-
MoreFooHistory.stubs(:assign_pid).returns(@this_pid)
|
199
|
-
@n.save
|
200
|
-
@n.datastreams['externalDisseminator'].dsLocation.should == "http://exampl.com/mypic.jpg"
|
201
|
-
end
|
202
|
-
|
203
|
-
describe "control_group E without a url" do
|
204
|
-
before do
|
205
|
-
class MoreFooHistory < ActiveFedora::Base
|
206
|
-
has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"externalDisseminator",:control_group => "E"
|
207
|
-
end
|
208
|
-
stub_ingest(@this_pid)
|
209
|
-
@n = MoreFooHistory.new
|
210
|
-
MoreFooHistory.stubs(:assign_pid).returns(@this_pid)
|
211
|
-
end
|
212
|
-
it "should allow :control_group => 'E' without a :url option" do
|
213
|
-
@n.datastreams['externalDisseminator'].dsLocation.present?.should == false
|
214
|
-
@n.save
|
215
|
-
end
|
216
|
-
|
217
|
-
it "should fail validation if a :url is not added before save" do
|
218
|
-
@n.datastreams['externalDisseminator'].validate_content_present.should == false
|
219
|
-
@n.save
|
220
|
-
end
|
221
|
-
|
222
|
-
it "should pass validation if a :url is added before save" do
|
223
|
-
@n.datastreams['externalDisseminator'].dsLocation = "http://exampl.com/mypic.jpg"
|
224
|
-
@n.datastreams['externalDisseminator'].validate_content_present.should == true
|
225
|
-
@n.save
|
226
|
-
end
|
227
|
-
end
|
145
|
+
it "should mint a dsid" do
|
146
|
+
ds = ActiveFedora::Datastream.new
|
147
|
+
subject.add_datastream(ds).should == 'DS1'
|
228
148
|
end
|
149
|
+
end
|
229
150
|
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
stub_ingest(@this_pid)
|
242
|
-
class MoreFooHistory < ActiveFedora::Base
|
243
|
-
has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"externalDisseminator",:control_group => "R", :url => "http://exampl.com/mypic.jpg"
|
244
|
-
end
|
245
|
-
@n = MoreFooHistory.new
|
246
|
-
MoreFooHistory.stubs(:assign_pid).returns(@this_pid)
|
247
|
-
@n.save
|
248
|
-
end
|
249
|
-
|
250
|
-
describe "control_group R without url" do
|
251
|
-
before do
|
252
|
-
class MoreFooHistory < ActiveFedora::Base
|
253
|
-
has_metadata :type=>ActiveFedora::SimpleDatastream, :name=>"externalDisseminator",:control_group => "R"
|
254
|
-
end
|
255
|
-
MoreFooHistory.stubs(:assign_pid).returns(@this_pid)
|
256
|
-
stub_ingest(@this_pid)
|
257
|
-
@n = MoreFooHistory.new
|
258
|
-
end
|
259
|
-
it "should allow :control_group => 'R' without a :url option" do
|
260
|
-
@n.datastreams['externalDisseminator'].dsLocation.present?.should == false
|
261
|
-
@n.save
|
262
|
-
end
|
263
|
-
|
264
|
-
it "should fail validation if a :url is not added before save" do
|
265
|
-
@n.datastreams['externalDisseminator'].validate_content_present.should == false
|
266
|
-
@n.save
|
267
|
-
end
|
268
|
-
|
269
|
-
it "should pass validation if a :url is added before save" do
|
270
|
-
@n.datastreams['externalDisseminator'].dsLocation = "http://exampl.com/mypic.jpg"
|
271
|
-
@n.datastreams['externalDisseminator'].validate_content_present.should == true
|
272
|
-
@n.save
|
273
|
-
end
|
274
|
-
end
|
151
|
+
describe "#metadata_streams" do
|
152
|
+
it "should only be metadata datastreams" do
|
153
|
+
ds1 = mock(:metadata? => true)
|
154
|
+
ds2 = mock(:metadata? => true)
|
155
|
+
ds3 = mock(:metadata? => true)
|
156
|
+
relsextds = ActiveFedora::RelsExtDatastream.new
|
157
|
+
file_ds = mock(:metadata? => false)
|
158
|
+
subject.stub(:datastreams => {:a => ds1, :b => ds2, :c => ds3, :d => relsextds, :e => file_ds})
|
159
|
+
subject.metadata_streams.should include(ds1, ds2, ds3)
|
160
|
+
subject.metadata_streams.should_not include(relsextds)
|
161
|
+
subject.metadata_streams.should_not include(file_ds)
|
275
162
|
end
|
276
163
|
end
|
277
164
|
|
278
|
-
describe "#
|
279
|
-
it
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
ds.mimeType.should == "image/jpeg"
|
287
|
-
end
|
288
|
-
it 'should create a datastream object from a string' do
|
289
|
-
ds = @test_object.create_datastream("ActiveFedora::Datastream", 'NAME', {:blob=>"My file data"})
|
290
|
-
ds.class.should == ActiveFedora::Datastream
|
291
|
-
ds.dsLabel.should == nil
|
292
|
-
ds.mimeType.should == "application/octet-stream"
|
293
|
-
end
|
294
|
-
|
295
|
-
it 'should not set dsLocation if dsLocation is nil' do
|
296
|
-
ActiveFedora::Datastream.any_instance.expects(:dsLocation=).never
|
297
|
-
ds = @test_object.create_datastream("ActiveFedora::Datastream", 'NAME', {:dsLocation=>nil})
|
298
|
-
end
|
299
|
-
|
300
|
-
it 'should set attributes passed in onto the datastream' do
|
301
|
-
ds = @test_object.create_datastream("ActiveFedora::Datastream", 'NAME', {:dsLocation=>"a1", :mimeType=>'image/png', :controlGroup=>'X', :dsLabel=>'My Label', :checksumType=>'SHA-1'})
|
302
|
-
ds.location.should == 'a1'
|
303
|
-
ds.mimeType.should == 'image/png'
|
304
|
-
ds.controlGroup.should == 'X'
|
305
|
-
ds.label.should == 'My Label'
|
306
|
-
ds.checksumType.should == 'SHA-1'
|
165
|
+
describe "#generate_dsid" do
|
166
|
+
it "should create an autoincrementing dsid" do
|
167
|
+
subject.generate_dsid('FOO').should == 'FOO1'
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should start from the highest existin dsid" do
|
171
|
+
subject.stub(:datastreams => {'FOO56' => mock()})
|
172
|
+
subject.generate_dsid('FOO').should == 'FOO57'
|
307
173
|
end
|
308
174
|
end
|
309
175
|
|
310
|
-
describe "
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
has_file_datastream :name=>"second", :label=>"Second file", :type=>FileDS, :control_group=>'X'
|
316
|
-
end
|
176
|
+
describe "#dc" do
|
177
|
+
it "should be the DC datastream" do
|
178
|
+
m = mock
|
179
|
+
subject.stub(:datastreams => { 'DC' => m})
|
180
|
+
subject.dc.should == m
|
317
181
|
end
|
318
|
-
|
319
|
-
|
320
|
-
|
182
|
+
end
|
183
|
+
|
184
|
+
|
185
|
+
describe "#relsext" do
|
186
|
+
it "should be the RELS-EXT datastream" do
|
187
|
+
m = mock
|
188
|
+
subject.stub(:datastreams => { 'RELS-EXT' => m})
|
189
|
+
subject.rels_ext.should == m
|
321
190
|
end
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
FooHistory.ds_specs['second'][:label].should == "Second file"
|
328
|
-
FooHistory.ds_specs['second'][:control_group].should == "X"
|
191
|
+
|
192
|
+
it "should make one up otherwise" do
|
193
|
+
subject.stub(:datastreams => {})
|
194
|
+
|
195
|
+
subject.rels_ext.should be_a_kind_of(ActiveFedora::RelsExtDatastream)
|
329
196
|
end
|
330
197
|
end
|
331
198
|
|
332
199
|
describe "#add_file_datastream" do
|
333
|
-
|
334
|
-
|
200
|
+
# tested elsewhere :/
|
201
|
+
end
|
202
|
+
|
203
|
+
describe "#create_datastream" do
|
204
|
+
it "should mint a DSID" do
|
205
|
+
ds = subject.create_datastream(ActiveFedora::Datastream, nil, {})
|
206
|
+
ds.dsid.should == 'DS1'
|
335
207
|
end
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
@test_object.datastreams.keys.should include 'content1'
|
208
|
+
|
209
|
+
it "should raise an argument error if the supplied dsid is nonsense" do
|
210
|
+
expect { subject.create_datastream(ActiveFedora::Datastream, 0) }.to raise_error(ArgumentError)
|
340
211
|
end
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
212
|
+
|
213
|
+
it "should try to get a mime type from the blob" do
|
214
|
+
mock_file = mock(:content_type => 'x-application/asdf')
|
215
|
+
ds = subject.create_datastream(ActiveFedora::Datastream, nil, {:blob => mock_file})
|
216
|
+
ds.mimeType.should == 'x-application/asdf'
|
345
217
|
end
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
218
|
+
|
219
|
+
it "should provide a default mime type" do
|
220
|
+
mock_file = mock()
|
221
|
+
ds = subject.create_datastream(ActiveFedora::Datastream, nil, {:blob => mock_file})
|
222
|
+
ds.mimeType.should == 'application/octet-stream'
|
350
223
|
end
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
224
|
+
|
225
|
+
it "should use the filename as a default label" do
|
226
|
+
mock_file = mock(:path => '/asdf/fdsa')
|
227
|
+
ds = subject.create_datastream(ActiveFedora::Datastream, nil, {:blob => mock_file})
|
228
|
+
ds.dsLabel.should == 'fdsa'
|
355
229
|
end
|
356
230
|
end
|
357
231
|
|
232
|
+
describe "#additional_attributes_for_external_and_redirect_control_groups" do
|
233
|
+
before(:all) do
|
234
|
+
@behavior = ActiveFedora::Datastreams.deprecation_behavior
|
235
|
+
ActiveFedora::Datastreams.deprecation_behavior = :silence
|
236
|
+
end
|
237
|
+
|
238
|
+
after :all do
|
239
|
+
ActiveFedora::Datastreams.deprecation_behavior = @behavior
|
240
|
+
end
|
241
|
+
|
242
|
+
end
|
358
243
|
end
|