active-fedora 1.1.13 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,103 @@
1
+ require File.join( File.dirname(__FILE__), "../spec_helper" )
2
+
3
+ require 'active_fedora'
4
+ require "rexml/document"
5
+ require 'ftools'
6
+
7
+ class MockMetaHelperSolr < ActiveFedora::Base
8
+ has_metadata :name => "properties", :type => ActiveFedora::MetadataDatastream do |m|
9
+ m.field "holding_id", :string
10
+ end
11
+
12
+ has_metadata :name => "descMetadata", :type => ActiveFedora::QualifiedDublinCoreDatastream do |m|
13
+ m.field "created", :date, :xml_node => "created"
14
+ m.field "language", :string, :xml_node => "language"
15
+ m.field "creator", :string, :xml_node => "creator"
16
+ # Created remaining fields
17
+ m.field "geography", :string, :xml_node => "geography"
18
+ m.field "title", :string, :xml_node => "title"
19
+ end
20
+ end
21
+
22
+ describe ActiveFedora::MetadataDatastreamHelper do
23
+
24
+ before(:each) do
25
+ @test_object = ActiveFedora::Base.new
26
+ @test_object.save
27
+ end
28
+
29
+ after(:each) do
30
+ begin
31
+ @test_object.delete
32
+ rescue
33
+ end
34
+ begin
35
+ @test_object2.delete
36
+ rescue
37
+ end
38
+ begin
39
+ @test_object3.delete
40
+ rescue
41
+ end
42
+ end
43
+
44
+ describe '#from_solr' do
45
+ it 'should return an object with the appropriate metadata fields filled in' do
46
+ @test_object = MockMetaHelperSolr.new
47
+ @test_object.new_object = true
48
+ attributes = {"holding_id"=>{0=>"Holding 1"},
49
+ "language"=>{0=>"Italian"},
50
+ "creator"=>{0=>"Linguist, A."},
51
+ "geography"=>{0=>"Italy"},
52
+ "title"=>{0=>"Italian and Spanish: A Comparison of Common Phrases"}}
53
+ @test_object.update_indexed_attributes(attributes)
54
+ @test_object.save
55
+
56
+ @test_object2 = MockMetaHelperSolr.new
57
+ @test_object2.new_object = true
58
+ attributes = {"holding_id"=>{0=>"Holding 2"},
59
+ "language"=>{0=>"Spanish;Latin"},
60
+ "creator"=>{0=>"Linguist, A."},
61
+ "geography"=>{0=>"Spain"},
62
+ "title"=>{0=>"A study of the evolution of Spanish from Latin"}}
63
+ @test_object2.update_indexed_attributes(attributes)
64
+ @test_object2.save
65
+
66
+ @test_object3 = MockMetaHelperSolr.new
67
+ @test_object3.new_object = true
68
+ attributes = {"holding_id"=>{0=>"Holding 3"},
69
+ "language"=>{0=>"Spanish;Latin"},
70
+ "creator"=>{0=>"Linguist, A."},
71
+ "geography"=>{0=>"Spain"},
72
+ "title"=>{0=>"An obscure look into early nomadic tribes of Spain"}}
73
+ @test_object3.update_indexed_attributes(attributes)
74
+ @test_object3.save
75
+
76
+ #from_solr gets called indirectly
77
+ test_from_solr_object = MockMetaHelperSolr.load_instance_from_solr(@test_object.pid)
78
+ test_from_solr_object2 = MockMetaHelperSolr.load_instance_from_solr(@test_object2.pid)
79
+ test_from_solr_object3 = MockMetaHelperSolr.load_instance_from_solr(@test_object3.pid)
80
+
81
+ test_from_solr_object.fields[:language][:values].should == ["Italian"]
82
+ test_from_solr_object.fields[:creator][:values].should == ["Linguist, A."]
83
+ test_from_solr_object.fields[:geography][:values].should == ["Italy"]
84
+ test_from_solr_object.fields[:title][:values].should == ["Italian and Spanish: A Comparison of Common Phrases"]
85
+ test_from_solr_object.fields[:holding_id][:values].should == ["Holding 1"]
86
+
87
+ test_from_solr_object2.fields[:language][:values].should == ["Spanish;Latin"]
88
+ test_from_solr_object2.fields[:creator][:values].should == ["Linguist, A."]
89
+ test_from_solr_object2.fields[:geography][:values].should == ["Spain"]
90
+ test_from_solr_object2.fields[:title][:values].should == ["A study of the evolution of Spanish from Latin"]
91
+ test_from_solr_object2.fields[:holding_id][:values].should == ["Holding 2"]
92
+
93
+ test_from_solr_object3.fields[:language][:values].should == ["Spanish;Latin"]
94
+ test_from_solr_object3.fields[:creator][:values].should == ["Linguist, A."]
95
+ test_from_solr_object3.fields[:geography][:values].should == ["Spain"]
96
+ test_from_solr_object3.fields[:title][:values].should == ["An obscure look into early nomadic tribes of Spain"]
97
+ test_from_solr_object3.fields[:holding_id][:values].should == ["Holding 3"]
98
+
99
+
100
+ end
101
+ end
102
+
103
+ end
@@ -13,30 +13,31 @@ describe ActiveFedora::Model do
13
13
 
14
14
 
15
15
  before(:each) do
16
- module SpecModel
16
+ module ModelIntegrationSpec
17
17
 
18
18
  class Basic < ActiveFedora::Base
19
- #include ActiveFedora::Model
19
+ include ActiveFedora::Model
20
20
  end
21
21
 
22
22
  end
23
- @test_instance = SpecModel::Basic.new
23
+
24
+ @test_instance = ModelIntegrationSpec::Basic.new
24
25
  @test_instance.save
25
26
 
26
27
  end
27
28
 
28
29
  after(:each) do
29
30
  @test_instance.delete
30
- Object.send(:remove_const, :SpecModel)
31
+ Object.send(:remove_const, :ModelIntegrationSpec)
31
32
  end
32
33
 
33
34
  describe '#find' do
34
35
  it "should return an array of instances of the calling Class" do
35
36
  pending
36
- result = SpecModel::Basic.find(:all)
37
+ result = ModelIntegrationSpec::Basic.find(:all)
37
38
  result.should be_instance_of(Array)
38
39
  result.each do |obj|
39
- obj.class.should == SpecModel::Basic
40
+ obj.class.should == ModelIntegrationSpec::Basic
40
41
  end
41
42
  end
42
43
  end
@@ -44,9 +45,9 @@ describe ActiveFedora::Model do
44
45
  describe '#find_model' do
45
46
 
46
47
  it "should return an object of the given Model whose inner object is nil" do
47
- #result = SpecModel::Basic.find_model(@test_instance.pid, SpecModel::Basic)
48
- result = Fedora::Repository.instance.find_model(@test_instance.pid, SpecModel::Basic)
49
- result.class.should == SpecModel::Basic
48
+ #result = ModelIntegrationSpec::Basic.find_model(@test_instance.pid, ModelIntegrationSpec::Basic)
49
+ result = Fedora::Repository.instance.find_model(@test_instance.pid, ModelIntegrationSpec::Basic)
50
+ result.class.should == ModelIntegrationSpec::Basic
50
51
  result.inner_object.new_object?.should be_false
51
52
  end
52
53
  end
@@ -4,6 +4,13 @@ require 'active_fedora'
4
4
  require "rexml/document"
5
5
  require 'ftools'
6
6
 
7
+ class MockAFRelsSolr < ActiveFedora::Base
8
+ has_relationship "testing", :has_part, :type=>MockAFRelsSolr
9
+ has_relationship "testing2", :has_member, :type=>MockAFRelsSolr
10
+ has_relationship "testing_inbound", :has_part, :type=>MockAFRelsSolr, :inbound=>true
11
+ has_relationship "testing_inbound2", :has_member, :type=>MockAFRelsSolr, :inbound=>true
12
+ end
13
+
7
14
  describe ActiveFedora::RelsExtDatastream do
8
15
 
9
16
  before(:all) do
@@ -29,7 +36,26 @@ describe ActiveFedora::RelsExtDatastream do
29
36
  end
30
37
 
31
38
  after(:each) do
39
+ begin
32
40
  @test_object.delete
41
+ rescue
42
+ end
43
+ begin
44
+ @test_object2.delete
45
+ rescue
46
+ end
47
+ begin
48
+ @test_object3.delete
49
+ rescue
50
+ end
51
+ begin
52
+ @test_object4.delete
53
+ rescue
54
+ end
55
+ begin
56
+ @test_object5.delete
57
+ rescue
58
+ end
33
59
  end
34
60
 
35
61
 
@@ -64,4 +90,63 @@ describe ActiveFedora::RelsExtDatastream do
64
90
  @test_object.relationships[:self].should have_key(:is_member_of)
65
91
  ActiveFedora::Base.load_instance(@test_object.pid).relationships.should == @test_object.relationships
66
92
  end
93
+
94
+ describe '#from_solr' do
95
+
96
+ it "should respond_to from_solr" do
97
+ @test_datastream.respond_to?(:from_solr).should be_true
98
+ end
99
+
100
+ it 'should populate the relationships hash based on data in solr only for any possible fedora predicates' do
101
+ @test_object2 = MockAFRelsSolr.new
102
+ @test_object2.new_object = true
103
+ @test_object2.save
104
+ @test_object3 = MockAFRelsSolr.new
105
+ @test_object3.new_object = true
106
+ @test_object3.save
107
+ @test_object4 = MockAFRelsSolr.new
108
+ @test_object4.new_object = true
109
+ @test_object4.save
110
+ @test_object5 = MockAFRelsSolr.new
111
+ @test_object5.new_object = true
112
+ @test_object5.save
113
+ #append to named relationship 'testing'
114
+ @test_object2.testing_append(@test_object3)
115
+ @test_object2.testing2_append(@test_object4)
116
+ @test_object5.testing_append(@test_object2)
117
+ @test_object5.testing2_append(@test_object3)
118
+ @test_object2.save
119
+ @test_object5.save
120
+ r2 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object2)
121
+ r3 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object3)
122
+ r4 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object4)
123
+ r5 = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>@test_object5)
124
+ model_rel = ActiveFedora::Relationship.new(:subject=>:self, :predicate=>:dummy, :object=>ActiveFedora::ContentModel.pid_from_ruby_class(MockAFRelsSolr))
125
+ #check inbound correct, testing goes to :has_part and testing2 goes to :has_member
126
+ #get solr doc for @test_object2
127
+ solr_doc = MockAFRelsSolr.find_by_solr(@test_object2.pid).hits.first
128
+ test_from_solr_object2 = MockAFRelsSolr.new
129
+ test_from_solr_object2.rels_ext.from_solr(solr_doc)
130
+ solr_doc = MockAFRelsSolr.find_by_solr(@test_object3.pid).hits.first
131
+ test_from_solr_object3 = MockAFRelsSolr.new
132
+ test_from_solr_object3.rels_ext.from_solr(solr_doc)
133
+ solr_doc = MockAFRelsSolr.find_by_solr(@test_object4.pid).hits.first
134
+ test_from_solr_object4 = MockAFRelsSolr.new
135
+ test_from_solr_object4.rels_ext.from_solr(solr_doc)
136
+ solr_doc = MockAFRelsSolr.find_by_solr(@test_object5.pid).hits.first
137
+ test_from_solr_object5 = MockAFRelsSolr.new
138
+ test_from_solr_object5.rels_ext.from_solr(solr_doc)
139
+
140
+ test_from_solr_object2.relationships.should == {:self=>{:has_part=>[r3.object],:has_member=>[r4.object],:has_model=>[model_rel.object]}}
141
+ test_from_solr_object2.named_relationships.should == {:self=>{"testing"=>[r3.object],"testing2"=>[r4.object]}}
142
+ test_from_solr_object3.relationships.should == {:self=>{:has_model=>[model_rel.object]}}
143
+ test_from_solr_object3.named_relationships.should == {:self=>{"testing"=>[],"testing2"=>[]}}
144
+ test_from_solr_object4.relationships.should == {:self=>{:has_model=>[model_rel.object]}}
145
+ test_from_solr_object4.named_relationships.should == {:self=>{"testing"=>[],"testing2"=>[]}}
146
+ test_from_solr_object5.relationships.should == {:self=>{:has_model=>[model_rel.object],
147
+ :has_part=>[r2.object],
148
+ :has_member=>[r3.object]}}
149
+ test_from_solr_object5.named_relationships.should == {:self=>{"testing"=>[r2.object],"testing2"=>[r3.object]}}
150
+ end
151
+ end
67
152
  end
@@ -90,6 +90,5 @@ describe ActiveFedora::SemanticNode do
90
90
  id.should satisfy {|id| id == @container1.pid || @container2.pid}
91
91
  end
92
92
  end
93
- end
94
-
93
+ end
95
94
  end
@@ -6,9 +6,27 @@ describe ActiveFedora::SolrService do
6
6
  describe "#reify_solr_results" do
7
7
  before(:all) do
8
8
  class FooObject < ActiveFedora::Base
9
+ has_metadata :name => "properties", :type => ActiveFedora::MetadataDatastream do |m|
10
+ m.field "holding_id", :string
11
+ end
12
+
13
+ has_metadata :name => "descMetadata", :type => ActiveFedora::QualifiedDublinCoreDatastream do |m|
14
+ m.field "created", :date, :xml_node => "created"
15
+ m.field "language", :string, :xml_node => "language"
16
+ m.field "creator", :string, :xml_node => "creator"
17
+ # Created remaining fields
18
+ m.field "geography", :string, :xml_node => "geography"
19
+ m.field "title", :string, :xml_node => "title"
20
+ end
9
21
  end
10
22
  @test_object = ActiveFedora::Base.new
11
23
  @foo_object = FooObject.new
24
+ attributes = {"holding_id"=>{0=>"Holding 1"},
25
+ "language"=>{0=>"Italian"},
26
+ "creator"=>{0=>"Linguist, A."},
27
+ "geography"=>{0=>"Italy"},
28
+ "title"=>{0=>"Italian and Spanish: A Comparison of Common Phrases"}}
29
+ @foo_object.update_indexed_attributes(attributes)
12
30
  @test_object.save
13
31
  @foo_object.save
14
32
  end
@@ -26,5 +44,23 @@ describe ActiveFedora::SolrService do
26
44
  end
27
45
  end
28
46
 
47
+ it 'should load objects from solr data if a :load_from_solr option is passed in' do
48
+ query = "id\:#{ActiveFedora::SolrService.escape_uri_for_query(@test_object.pid)} OR id\:#{ActiveFedora::SolrService.escape_uri_for_query(@foo_object.pid)}"
49
+ solr_result = ActiveFedora::SolrService.instance.conn.query(query)
50
+ result = ActiveFedora::SolrService.reify_solr_results(solr_result,{:load_from_solr=>true})
51
+ result.length.should == 2
52
+ result.each do |r|
53
+ (r.class == ActiveFedora::Base || r.class == FooObject).should be_true
54
+ end
55
+ end
56
+
57
+ it 'should call load_instance_from_solr if :load_from_solr option passed in' do
58
+ query = "id\:#{ActiveFedora::SolrService.escape_uri_for_query(@test_object.pid)} OR id\:#{ActiveFedora::SolrService.escape_uri_for_query(@foo_object.pid)}"
59
+ solr_result = ActiveFedora::SolrService.instance.conn.query(query)
60
+ ActiveFedora::Base.expects(:load_instance_from_solr).times(1)
61
+ FooObject.expects(:load_instance_from_solr).times(1)
62
+ result = ActiveFedora::SolrService.reify_solr_results(solr_result,{:load_from_solr=>true})
63
+ end
64
+
29
65
  end
30
66
  end
@@ -1,5 +1,4 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
- require "active_fedora"
3
2
 
4
3
  # Some tentative extensions to ActiveFedora::Base
5
4
 
@@ -0,0 +1,580 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require "active_fedora"
3
+
4
+ # Some tentative extensions to ActiveFedora::Base
5
+
6
+ describe ActiveFedora::Base do
7
+
8
+ def increment_pid
9
+ @@last_pid += 1
10
+ end
11
+
12
+ before(:each) do
13
+ Fedora::Repository.instance.stubs(:nextid).returns(increment_pid)
14
+ @test_object = ActiveFedora::Base.new
15
+ @test_object.new_object = true
16
+ end
17
+
18
+ after(:each) do
19
+ begin
20
+ @test_object.delete
21
+ rescue
22
+ end
23
+
24
+ begin
25
+ @test_object2.delete
26
+ rescue
27
+ end
28
+
29
+ begin
30
+ @test_object3.delete
31
+ rescue
32
+ end
33
+ end
34
+
35
+ it 'should provide #datastream_names' do
36
+ @test_object.should respond_to(:datastream_names)
37
+ end
38
+
39
+ describe '#datastream_names' do
40
+ class MockDatastreamNames < ActiveFedora::Base
41
+ has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
42
+ has_datastream :name=>"EAD", :type=>ActiveFedora::Datastream, :mimeType=>"application/xml", :controlGroup=>'M'
43
+ end
44
+
45
+ it 'should return an array of datastream names defined by has_datastream' do
46
+ Fedora::Repository.instance.stubs(:nextid).returns(increment_pid)
47
+ @test_object2 = MockDatastreamNames.new
48
+ @test_object2.datastream_names.should == ["thumbnail","EAD"]
49
+ end
50
+ end
51
+
52
+ it 'should provide #add_named_datastream' do
53
+ @test_object.should respond_to(:add_named_datastream)
54
+ end
55
+
56
+ describe '#add_named_datastream' do
57
+ class MockAddNamedDatastream < ActiveFedora::Base
58
+ has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
59
+ has_datastream :name=>"high", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
60
+ has_datastream :name=>"anymime", :type=>ActiveFedora::Datastream, :controlGroup=>'M'
61
+ has_datastream :name=>"external", :type=>ActiveFedora::Datastream, :controlGroup=>'E'
62
+ end
63
+
64
+ it 'should add a named datastream to a fedora object' do
65
+ Fedora::Repository.instance.stubs(:nextid).returns(increment_pid)
66
+ @test_object2 = MockAddNamedDatastream.new
67
+ f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"))
68
+ f2 = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ))
69
+ f2.stubs(:original_filename).returns("dino.jpg")
70
+ f.stubs(:content_type).returns("image/jpeg")
71
+ #check cannot add a datastream with name that does not exist
72
+ had_exception = false
73
+ begin
74
+ @test_object2.add_named_datastream("thumb",{:content_type=>"image/jpeg",:blob=>f})
75
+ rescue
76
+ had_exception = true
77
+ end
78
+ raise "Did not raise exception with datastream name that does not exist" unless had_exception
79
+ #check that either blob or file opt must be set
80
+ had_exception = false
81
+ begin
82
+ @test_object2.add_named_datastream("thumbnail",{:content_type=>"image/jpeg"})
83
+ rescue
84
+ had_exception = true
85
+ end
86
+ raise "Did not raise exception with blob not set" unless had_exception
87
+
88
+ @test_object2.add_named_datastream("thumbnail",{:content_type=>"image/jpeg",:blob=>f})
89
+ @test_object2.add_named_datastream("thumbnail",{:content_type=>"image/jpeg",:file=>f})
90
+ #check dslabel set from either opt[label] or opt[blob].original_file_name
91
+ @test_object2.add_named_datastream("high",{:content_type=>"image/jpeg",:blob=>f2, :label=>"my_image"})
92
+ @test_object2.high.first.attributes[:dsLabel].should == "my_image"
93
+ @test_object2.add_named_datastream("high",{:content_type=>"image/jpeg",:blob=>f2})
94
+ @test_object2.high.first.attributes[:dsLabel].should == "dino.jpg"
95
+ #check opt[content_type] must be set or opt[blob] responds to content_type, already checking if content_type option set above
96
+ f.expects(:content_type).returns("image/jpeg")
97
+ @test_object2.add_named_datastream("thumbnail",{:file=>f})
98
+ had_exception = false
99
+ begin
100
+ @test_object2.add_named_datastream("thumbnail",{:file=>f2})
101
+ rescue
102
+ had_exception = true
103
+ end
104
+ raise "Did not raise exception if content_type not set" unless had_exception
105
+ #check mimetype and content type must match if mimetype is specified (if not specified can be anything)
106
+ f.stubs(:content_type).returns("image/tiff")
107
+ had_exception = false
108
+ begin
109
+ @test_object2.add_named_datastream("thumbnail",{:file=>f})
110
+ rescue
111
+ had_exception = true
112
+ end
113
+ raise "Did not raise exception on content type and mime type mismatch" unless had_exception
114
+
115
+ #check for if any mime type allowed
116
+ @test_object2.add_named_datastream("anymime",{:file=>f})
117
+ #check datastream created is of type ActiveFedora::Datastream
118
+ @test_object2.anymime.first.class.should == ActiveFedora::Datastream
119
+ #if dsid supplied check that conforms to prefix
120
+ f.stubs(:content_type).returns("image/jpeg")
121
+ had_exception = false
122
+ begin
123
+ @test_object2.add_named_datastream("thumbnail",{:file=>f,:dsid=>"DS1"})
124
+ rescue
125
+ had_exception = true
126
+ end
127
+ raise "Did not raise exception with dsid that does not conform to prefix" unless had_exception
128
+ #if prefix not set check uses name in CAPS and dsid uses prefix
129
+ @test_object2.high.first.attributes[:prefix].should == "HIGH"
130
+ @test_object2.high.first.dsid.match(/HIGH[0-9]/)
131
+ #check datastreams added with other right properties
132
+ @test_object2.high.first.attributes[:controlGroup].should == "M"
133
+ @test_object2.high.first.attributes[:type].should == "ActiveFedora::Datastream"
134
+
135
+ #check external datastream
136
+ @test_object2.add_named_datastream("external",{:dsLocation=>"http://myreasource.com"})
137
+ #check dslocation goes to dslabel
138
+ @test_object2.external.first.attributes[:dsLabel].should == "http://myreasource.com"
139
+ #check datastreams added to fedora (may want to stub this at first)
140
+
141
+ end
142
+ end
143
+
144
+ it 'should provide #add_named_file_datastream' do
145
+ @test_object.should respond_to(:add_named_file_datastream)
146
+ end
147
+
148
+ describe '#add_named_file_datastream' do
149
+ class MockAddNamedFileDatastream < ActiveFedora::Base
150
+ has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
151
+ has_datastream :name=>"high", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
152
+ has_datastream :name=>"anymime", :type=>ActiveFedora::Datastream, :controlGroup=>'M'
153
+ end
154
+
155
+ it 'should add a datastream as controlGroup M with blob set to file' do
156
+ Fedora::Repository.instance.stubs(:nextid).returns(increment_pid)
157
+ @test_object2 = MockAddNamedFileDatastream.new
158
+ f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"))
159
+ #these normally supplied in multi-part post request
160
+ f.stubs(:original_filename).returns("minivan.jpg")
161
+ f.stubs(:content_type).returns("image/jpeg")
162
+ @test_object2.add_named_file_datastream("thumbnail",f)
163
+ @test_object2.thumbnail.first.attributes.should == {:type=>"ActiveFedora::Datastream",
164
+ :prefix=>"THUMB", :content_type=>"image/jpeg", :dsid=>"THUMB1", :dsID=>"THUMB1",
165
+ :pid=>@test_object2.pid, :mimeType=>"image/jpeg", :controlGroup=>"M", :dsLabel=>"minivan.jpg", :name=>"thumbnail"}
166
+
167
+ end
168
+ end
169
+
170
+ it 'should provide #update_named_datastream' do
171
+ @test_object.should respond_to(:update_named_datastream)
172
+ end
173
+
174
+ describe '#update_named_datastream' do
175
+ class MockUpdateNamedDatastream < ActiveFedora::Base
176
+ has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
177
+ end
178
+
179
+ it 'should update a datastream and not increment the dsid' do
180
+ Fedora::Repository.instance.stubs(:nextid).returns(increment_pid)
181
+ @test_object2 = MockUpdateNamedDatastream.new
182
+ f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"))
183
+ f2 = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ))
184
+ f.stubs(:content_type).returns("image/jpeg")
185
+ f.stubs(:original_filename).returns("minivan.jpg")
186
+ f2.stubs(:content_type).returns("image/jpeg")
187
+ f2.stubs(:original_filename).returns("dino.jpg")
188
+ #check raise exception if dsid not supplied
189
+ @test_object2.add_named_datastream("thumbnail",{:file=>f})
190
+ had_exception = false
191
+ begin
192
+ @test_object2.update_named_datastream("thumbnail",{:file=>f})
193
+ rescue
194
+ had_exception = true
195
+ end
196
+ raise "Failed to raise exception if dsid not supplied" unless had_exception
197
+ #raise exception if dsid does not exist
198
+ had_exception = false
199
+ begin
200
+ @test_object2.update_named_datastream("thumbnail",{:file=>f,:dsid=>"THUMB100"})
201
+ rescue
202
+ had_exception = true
203
+ end
204
+ raise "Failed to raise exception if dsid does not exist" unless had_exception
205
+ #check datastream is updated in place without new dsid
206
+ @test_object2.thumbnail.size.should == 1
207
+ @test_object2.thumbnail_ids == ["THUMB1"]
208
+ @test_object2.thumbnail.first.attributes.should == {:type=>"ActiveFedora::Datastream",
209
+ :content_type=>"image/jpeg",
210
+ :prefix=>"THUMB", :mimeType=>"image/jpeg",
211
+ :controlGroup=>"M", :dsid=>"THUMB1",
212
+ :pid=>@test_object2.pid, :dsID=>"THUMB1",
213
+ :name=>"thumbnail", :dsLabel=>"minivan.jpg"}
214
+ @test_object2.thumbnail.first.blob.should == f
215
+ @test_object2.update_named_datastream("thumbnail",{:file=>f2,:dsid=>"THUMB1"})
216
+ @test_object2.thumbnail.size.should == 1
217
+ @test_object2.thumbnail_ids == ["THUMB1"]
218
+ @test_object2.thumbnail.first.attributes.should == {:type=>"ActiveFedora::Datastream",
219
+ :content_type=>"image/jpeg",
220
+ :prefix=>"THUMB", :mimeType=>"image/jpeg",
221
+ :controlGroup=>"M", :dsid=>"THUMB1",
222
+ :pid=>@test_object2.pid, :dsID=>"THUMB1",
223
+ :name=>"thumbnail", :dsLabel=>"dino.jpg"}
224
+ @test_object2.thumbnail.first.blob.should == f2
225
+ end
226
+ end
227
+
228
+ it 'should provide #create_datastream' do
229
+ @test_object.should respond_to(:create_datastream)
230
+ end
231
+
232
+ describe '#create_datastream' do
233
+ it 'should create a datastream object using the type of object supplied in the string (does reflection)' do
234
+ f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"))
235
+ f.stubs(:content_type).returns("image/jpeg")
236
+ f.stubs(:original_filename).returns("minivan.jpg")
237
+ ds = @test_object.create_datastream("ActiveFedora::Datastream",{:blob=>f})
238
+ ds.class.should == ActiveFedora::Datastream
239
+ ds.blob.should == f
240
+ end
241
+ end
242
+
243
+ it 'should provide #is_named_datastream?' do
244
+ @test_object.should respond_to(:is_named_datastream?)
245
+ end
246
+
247
+ describe '#is_named_datastream?' do
248
+ class MockIsNamedDatastream < ActiveFedora::Base
249
+ has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
250
+ end
251
+
252
+ it 'should return true if a named datastream exists in model' do
253
+ Fedora::Repository.instance.stubs(:nextid).returns(increment_pid)
254
+ @test_object2 = MockIsNamedDatastream.new
255
+ @test_object2.is_named_datastream?("thumbnail").should == true
256
+ @test_object2.is_named_datastream?("thumb").should == false
257
+ end
258
+ end
259
+
260
+ it 'should provide #named_datastreams' do
261
+ @test_object.should respond_to(:named_datastreams)
262
+ end
263
+
264
+ describe '#named_datastreams' do
265
+ class MockNamedDatastreams < ActiveFedora::Base
266
+ has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
267
+ has_datastream :name=>"high", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
268
+ has_datastream :name=>"external", :type=>ActiveFedora::Datastream, :controlGroup=>'E'
269
+ end
270
+
271
+ it 'should return a hash of datastream names to arrays of datastreams' do
272
+ Fedora::Repository.instance.stubs(:nextid).returns(increment_pid)
273
+ @test_object2 = MockNamedDatastreams.new
274
+ f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg" ))
275
+ f.stubs(:content_type).returns("image/jpeg")
276
+ f.stubs(:original_filename).returns("minivan.jpg")
277
+ f2 = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ))
278
+ f2.stubs(:content_type).returns("image/jpeg")
279
+ f2.stubs(:original_filename).returns("dino.jpg")
280
+ @test_object2.thumbnail_file_append(f)
281
+ @test_object2.high_file_append(f2)
282
+ @test_object2.external_append({:dsLocation=>"http://myresource.com"})
283
+ datastreams = @test_object2.named_datastreams
284
+ datastreams.keys.include?("thumbnail").should == true
285
+ datastreams.keys.include?("external").should == true
286
+ datastreams.keys.include?("high").should == true
287
+ datastreams.keys.size.should == 3
288
+ datastreams["thumbnail"].size.should == 1
289
+ datastreams["thumbnail"].first.class.should == ActiveFedora::Datastream
290
+ datastreams["thumbnail"].first.attributes.should == {:type=>"ActiveFedora::Datastream",
291
+ :content_type=>"image/jpeg",
292
+ :prefix=>"THUMB",
293
+ :mimeType=>"image/jpeg",
294
+ :controlGroup=>"M",
295
+ :dsid=>"THUMB1",
296
+ :pid=>@test_object2.pid,
297
+ :dsID=>"THUMB1",
298
+ :name=>"thumbnail", :dsLabel=>"minivan.jpg"}
299
+ datastreams["thumbnail"].first.blob.should == f
300
+ datastreams["external"].size.should == 1
301
+ datastreams["external"].first.class.should == ActiveFedora::Datastream
302
+ datastreams["external"].first.attributes.should == {:type=>"ActiveFedora::Datastream",
303
+ :prefix=>"EXTERNAL",
304
+ :controlGroup=>"E",
305
+ :dsid=>"EXTERNAL1",
306
+ :pid=>@test_object2.pid,
307
+ :dsID=>"EXTERNAL1",
308
+ :dsLocation=>"http://myresource.com",
309
+ :name=>"external", :dsLabel=>"http://myresource.com"}
310
+ datastreams["external"].first.blob.should == nil
311
+ datastreams["high"].size.should == 1
312
+ datastreams["high"].first.class.should == ActiveFedora::Datastream
313
+ datastreams["high"].first.attributes.should == {:type=>"ActiveFedora::Datastream",
314
+ :content_type=>"image/jpeg",
315
+ :prefix=>"HIGH",
316
+ :mimeType=>"image/jpeg",
317
+ :controlGroup=>"M",
318
+ :dsid=>"HIGH1",
319
+ :pid=>@test_object2.pid,
320
+ :dsID=>"HIGH1",
321
+ :name=>"high", :dsLabel=>"dino.jpg"}
322
+ datastreams["high"].first.blob.should == f2
323
+ end
324
+ end
325
+
326
+ it 'should provide #named_datastreams_attributes' do
327
+ @test_object.should respond_to(:named_datastreams_attributes)
328
+ end
329
+
330
+ describe '#named_datastreams_attributes' do
331
+ class MockNamedDatastreamsAttributes < ActiveFedora::Base
332
+ has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
333
+ has_datastream :name=>"high", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
334
+ has_datastream :name=>"external", :type=>ActiveFedora::Datastream, :controlGroup=>'E'
335
+ end
336
+
337
+ it 'should return a hash of datastream names to hash of dsid to attribute hashes' do
338
+ Fedora::Repository.instance.stubs(:nextid).returns(increment_pid)
339
+ @test_object2 = MockNamedDatastreamsAttributes.new
340
+ f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg" ))
341
+ f.stubs(:content_type).returns("image/jpeg")
342
+ f.stubs(:original_filename).returns("minivan.jpg")
343
+ f2 = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ))
344
+ f2.stubs(:content_type).returns("image/jpeg")
345
+ f2.stubs(:original_filename).returns("dino.jpg")
346
+ @test_object2.thumbnail_file_append(f)
347
+ @test_object2.high_file_append(f2)
348
+ @test_object2.external_append({:dsLocation=>"http://myresource.com"})
349
+ datastreams_attr = @test_object2.named_datastreams_attributes
350
+ datastreams_attr.keys.include?("thumbnail").should == true
351
+ datastreams_attr.keys.include?("external").should == true
352
+ datastreams_attr.keys.include?("high").should == true
353
+ datastreams_attr.keys.size.should == 3
354
+ datastreams_attr["thumbnail"].size.should == 1
355
+ datastreams_attr["thumbnail"]["THUMB1"].should == {:type=>"ActiveFedora::Datastream",
356
+ :content_type=>"image/jpeg",
357
+ :prefix=>"THUMB",
358
+ :mimeType=>"image/jpeg",
359
+ :controlGroup=>"M",
360
+ :dsid=>"THUMB1",
361
+ :pid=>@test_object2.pid,
362
+ :dsID=>"THUMB1",
363
+ :name=>"thumbnail", :dsLabel=>"minivan.jpg"}
364
+ datastreams_attr["external"].size.should == 1
365
+ datastreams_attr["external"]["EXTERNAL1"].should == {:type=>"ActiveFedora::Datastream",
366
+ :prefix=>"EXTERNAL",
367
+ :controlGroup=>"E",
368
+ :dsid=>"EXTERNAL1",
369
+ :pid=>@test_object2.pid,
370
+ :dsID=>"EXTERNAL1",
371
+ :dsLocation=>"http://myresource.com",
372
+ :name=>"external", :dsLabel=>"http://myresource.com"}
373
+ datastreams_attr["high"].size.should == 1
374
+ datastreams_attr["high"]["HIGH1"].should == {:type=>"ActiveFedora::Datastream",
375
+ :content_type=>"image/jpeg",
376
+ :prefix=>"HIGH",
377
+ :mimeType=>"image/jpeg",
378
+ :controlGroup=>"M",
379
+ :dsid=>"HIGH1",
380
+ :pid=>@test_object2.pid,
381
+ :dsID=>"HIGH1",
382
+ :name=>"high", :dsLabel=>"dino.jpg"}
383
+ end
384
+ end
385
+
386
+ it 'should provide #named_datastreams_ids' do
387
+ @test_object.should respond_to(:named_datastreams_ids)
388
+ end
389
+
390
+ describe '#named_datastreams_ids' do
391
+ class MockNamedDatastreamsIds < ActiveFedora::Base
392
+ has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
393
+ has_datastream :name=>"high", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
394
+ has_datastream :name=>"external", :type=>ActiveFedora::Datastream, :controlGroup=>'E'
395
+ end
396
+
397
+ it 'should provide a hash of datastreams names to array of datastream ids' do
398
+ Fedora::Repository.instance.stubs(:nextid).returns(increment_pid)
399
+ @test_object2 = MockNamedDatastreamsIds.new
400
+ f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg" ))
401
+ f.stubs(:content_type).returns("image/jpeg")
402
+ f.stubs(:original_filename).returns("minivan.jpg")
403
+ f2 = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ))
404
+ f2.stubs(:content_type).returns("image/jpeg")
405
+ f2.stubs(:original_filename).returns("dino.jpg")
406
+ @test_object2.thumbnail_file_append(f)
407
+ @test_object2.high_file_append(f2)
408
+ @test_object2.external_append({:dsLocation=>"http://myresource.com"})
409
+ @test_object2.named_datastreams_ids.should == {"thumbnail"=>["THUMB1"],"high"=>["HIGH1"],"external"=>["EXTERNAL1"]}
410
+ end
411
+ end
412
+
413
+ it 'should provide #datastreams_attributes' do
414
+ @test_object.should respond_to(:datastreams_attributes)
415
+ end
416
+
417
+ describe '#datastreams_attributes' do
418
+ class MockDatastreamsAttributes < ActiveFedora::Base
419
+ has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
420
+ has_datastream :name=>"high", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
421
+ has_datastream :name=>"external", :type=>ActiveFedora::Datastream, :controlGroup=>'E'
422
+ end
423
+
424
+ it 'should return a hash of datastream ids to an attribute hash' do
425
+ Fedora::Repository.instance.stubs(:nextid).returns(increment_pid)
426
+ @test_object2 = MockDatastreamsAttributes.new
427
+ f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg" ))
428
+ f.stubs(:content_type).returns("image/jpeg")
429
+ f.stubs(:original_filename).returns("minivan.jpg")
430
+ f2 = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ))
431
+ f2.stubs(:content_type).returns("image/jpeg")
432
+ f2.stubs(:original_filename).returns("dino.jpg")
433
+ @test_object2.thumbnail_file_append(f)
434
+ @test_object2.high_file_append(f2)
435
+ @test_object2.external_append({:dsLocation=>"http://myresource.com"})
436
+ datastreams_attr = @test_object2.datastreams_attributes
437
+ datastreams_attr.should == {"THUMB1"=>{:type=>"ActiveFedora::Datastream",
438
+ :content_type=>"image/jpeg",
439
+ :prefix=>"THUMB",
440
+ :mimeType=>"image/jpeg",
441
+ :controlGroup=>"M",
442
+ :dsid=>"THUMB1",
443
+ :pid=>@test_object2.pid,
444
+ :dsID=>"THUMB1",
445
+ :name=>"thumbnail", :dsLabel=>"minivan.jpg"},
446
+ "EXTERNAL1"=>{:type=>"ActiveFedora::Datastream",
447
+ :prefix=>"EXTERNAL",
448
+ :controlGroup=>"E",
449
+ :dsid=>"EXTERNAL1",
450
+ :pid=>@test_object2.pid,
451
+ :dsID=>"EXTERNAL1",
452
+ :dsLocation=>"http://myresource.com",
453
+ :name=>"external", :dsLabel=>"http://myresource.com"},
454
+ "HIGH1"=>{:type=>"ActiveFedora::Datastream",
455
+ :content_type=>"image/jpeg",
456
+ :prefix=>"HIGH",
457
+ :mimeType=>"image/jpeg",
458
+ :controlGroup=>"M",
459
+ :dsid=>"HIGH1",
460
+ :pid=>@test_object2.pid,
461
+ :dsID=>"HIGH1",
462
+ :name=>"high", :dsLabel=>"dino.jpg"}}
463
+ end
464
+ end
465
+
466
+ #
467
+ # Class level methods
468
+ #
469
+ describe '#named_datastreams_desc' do
470
+
471
+ class MockNamedDatastreamsDesc < ActiveFedora::Base
472
+ has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
473
+ end
474
+
475
+ it 'should intialize a value to an empty hash and then not modify afterward' do
476
+ @test_object.named_datastreams_desc.should == {}
477
+ Fedora::Repository.instance.stubs(:nextid).returns(increment_pid)
478
+ @test_object2 = MockNamedDatastreamsDesc.new
479
+ @test_object2.named_datastreams_desc.should == {"thumbnail"=>{:name=>"thumbnail",:prefix => "THUMB",
480
+ :type=>"ActiveFedora::Datastream", :mimeType=>"image/jpeg",
481
+ :controlGroup=>'M'}}
482
+ end
483
+ end
484
+
485
+ describe '#create_named_datastream_finders' do
486
+ class MockCreateNamedDatastreamFinder < ActiveFedora::Base
487
+ has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
488
+ has_datastream :name=>"high", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
489
+ end
490
+
491
+ it 'should create helper methods to get named datastreams or dsids' do
492
+ Fedora::Repository.instance.stubs(:nextid).returns(increment_pid)
493
+ @test_object2 = MockCreateNamedDatastreamFinder.new
494
+ @test_object2.should respond_to(:thumbnail)
495
+ @test_object2.should respond_to(:thumbnail_ids)
496
+ @test_object2.should respond_to(:high)
497
+ @test_object2.should respond_to(:high_ids)
498
+ f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"))
499
+ f2 = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ))
500
+ f2.stubs(:original_filename).returns("dino.jpg")
501
+ f.stubs(:content_type).returns("image/jpeg")
502
+ @test_object2.add_named_datastream("thumbnail",{:content_type=>"image/jpeg",:blob=>f, :label=>"testDS"})
503
+ @test_object2.add_named_datastream("high",{:content_type=>"image/jpeg",:blob=>f2})
504
+ @test_object2.add_named_datastream("high",{:content_type=>"image/jpeg",:blob=>f2})
505
+ @test_object2.thumbnail.first.attributes.should == {:type=>"ActiveFedora::Datastream",
506
+ :prefix=>"THUMB", :content_type=>"image/jpeg", :dsid=>"THUMB1", :dsID=>"THUMB1",
507
+ :pid=>@test_object2.pid, :mimeType=>"image/jpeg", :controlGroup=>"M", :dsLabel=>"testDS", :name=>"thumbnail", :label=>"testDS"}
508
+ @test_object2.thumbnail_ids.should == ["THUMB1"]
509
+ @test_object2.high_ids.include?("HIGH1") == true
510
+ @test_object2.high_ids.include?("HIGH2") == true
511
+ @test_object2.high_ids.size.should == 2
512
+ #just check returning datastream object at this point
513
+ @test_object2.high.first.class.should == ActiveFedora::Datastream
514
+ end
515
+ end
516
+
517
+ describe '#create_named_datastream_update_methods' do
518
+ class MockCreateNamedDatastreamUpdateMethods < ActiveFedora::Base
519
+ has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
520
+ has_datastream :name=>"EAD", :type=>ActiveFedora::Datastream, :mimeType=>"application/xml", :controlGroup=>'M'
521
+ has_datastream :name=>"external", :type=>ActiveFedora::Datastream, :controlGroup=>'E'
522
+ end
523
+
524
+ it 'should create append method for each has_datastream entry' do
525
+ Fedora::Repository.instance.stubs(:nextid).returns(increment_pid)
526
+ @test_object2 = MockCreateNamedDatastreamUpdateMethods.new
527
+ Fedora::Repository.instance.stubs(:nextid).returns(increment_pid)
528
+ @test_object3 = MockCreateNamedDatastreamUpdateMethods.new
529
+ @test_object2.should respond_to(:thumbnail_append)
530
+ @test_object2.should respond_to(:ead_append)
531
+ f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"))
532
+ f.stubs(:content_type).returns("image/jpeg")
533
+ f.stubs(:original_filename).returns("minivan.jpg")
534
+ @test_object2.thumbnail_file_append(f)
535
+ @test_object2.thumbnail.first.attributes.should == {:type=>"ActiveFedora::Datastream",
536
+ :prefix=>"THUMB", :content_type=>"image/jpeg", :dsid=>"THUMB1", :dsID=>"THUMB1",
537
+ :pid=>@test_object2.pid, :mimeType=>"image/jpeg", :controlGroup=>"M", :dsLabel=>"minivan.jpg", :name=>"thumbnail"}
538
+ @test_object3.thumbnail_append({:file=>f})
539
+ @test_object3.thumbnail.first.attributes.should == {:type=>"ActiveFedora::Datastream",
540
+ :prefix=>"THUMB", :content_type=>"image/jpeg", :dsid=>"THUMB1", :dsID=>"THUMB1",
541
+ :pid=>@test_object3.pid, :mimeType=>"image/jpeg", :controlGroup=>"M", :dsLabel=>"minivan.jpg", :name=>"thumbnail"}
542
+ @test_object3.external_append({:dsLocation=>"http://myresource.com"})
543
+ @test_object3.external.first.attributes.should == {:type=>"ActiveFedora::Datastream",
544
+ :prefix=>"EXTERNAL", :dsid=>"EXTERNAL1", :dsID=>"EXTERNAL1",
545
+ :pid=>@test_object3.pid, :controlGroup=>"E", :dsLabel=>"http://myresource.com", :dsLocation=>"http://myresource.com", :name=>"external"}
546
+ end
547
+ end
548
+
549
+ describe '#has_datastream' do
550
+ class MockHasDatastream < ActiveFedora::Base
551
+ has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
552
+ has_datastream :name=>"EAD", :type=>ActiveFedora::Datastream, :mimeType=>"application/xml", :controlGroup=>'M'
553
+ has_datastream :name=>"external", :type=>ActiveFedora::Datastream, :controlGroup=>'E'
554
+ end
555
+
556
+ it 'should cache a definition of named datastream and create helper methods to add/remove/access them' do
557
+ Fedora::Repository.instance.stubs(:nextid).returns(increment_pid)
558
+ @test_object2 = MockHasDatastream.new
559
+ #prefix should default to name in caps if not specified in has_datastream call
560
+ @test_object2.named_datastreams_desc.should == {"thumbnail"=>{:name=>"thumbnail",:prefix => "THUMB",
561
+ :type=>"ActiveFedora::Datastream", :mimeType=>"image/jpeg",
562
+ :controlGroup=>'M'},
563
+ "EAD"=> {:name=>"EAD", :prefix=>"EAD",
564
+ :type=>"ActiveFedora::Datastream", :mimeType=>"application/xml",
565
+ :controlGroup=>'M' },
566
+ "external"=> {:name=>"external", :prefix=>"EXTERNAL",
567
+ :type=>"ActiveFedora::Datastream", :controlGroup=>'E' }}
568
+ @test_object2.should respond_to(:thumbnail_append)
569
+ @test_object2.should respond_to(:thumbnail_file_append)
570
+ @test_object2.should respond_to(:thumbnail)
571
+ @test_object2.should respond_to(:thumbnail_ids)
572
+ @test_object2.should respond_to(:ead_append)
573
+ @test_object2.should respond_to(:ead_file_append)
574
+ @test_object2.should respond_to(:EAD)
575
+ @test_object2.should respond_to(:EAD_ids)
576
+ @test_object2.should respond_to(:external)
577
+ @test_object2.should respond_to(:external_ids)
578
+ end
579
+ end
580
+ end