active-fedora 3.2.2 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -2
- data/Gemfile.lock +33 -57
- data/History.txt +9 -0
- data/active-fedora.gemspec +5 -5
- data/lib/active_fedora.rb +37 -10
- data/lib/active_fedora/base.rb +0 -18
- data/lib/active_fedora/datastream.rb +10 -5
- data/lib/active_fedora/datastreams.rb +33 -7
- data/lib/active_fedora/dcrdf_datastream.rb +11 -0
- data/lib/active_fedora/delegating.rb +2 -2
- data/lib/active_fedora/metadata_datastream.rb +3 -2
- data/lib/active_fedora/nested_attributes.rb +0 -1
- data/lib/active_fedora/ntriples_rdf_datastream.rb +19 -0
- data/lib/active_fedora/predicates.rb +4 -0
- data/lib/active_fedora/rdf_datastream.rb +108 -0
- data/lib/active_fedora/rdf_xml_writer.rb +53 -41
- data/lib/active_fedora/relationship_graph.rb +15 -71
- data/lib/active_fedora/rels_ext_datastream.rb +1 -4
- data/lib/active_fedora/rubydora_connection.rb +2 -9
- data/lib/active_fedora/unsaved_digital_object.rb +1 -0
- data/lib/active_fedora/version.rb +1 -1
- data/lib/tasks/active_fedora_dev.rake +1 -1
- data/spec/fixtures/dublin_core_rdf_descMetadata.nt +13 -0
- data/spec/fixtures/rails_root/config/fedora.yml +1 -15
- data/spec/integration/base_loader_spec.rb +0 -1
- data/spec/integration/dc_rdf_datastream_spec.rb +24 -0
- data/spec/integration/full_featured_model_spec.rb +1 -1
- data/spec/integration/model_spec.rb +0 -1
- data/spec/unit/active_fedora_spec.rb +22 -14
- data/spec/unit/base_spec.rb +9 -184
- data/spec/unit/datastream_collections_spec.rb +2 -2
- data/spec/unit/datastream_spec.rb +36 -6
- data/spec/unit/datastreams_spec.rb +251 -0
- data/spec/unit/dc_rdf_datastream_spec.rb +50 -0
- data/spec/unit/metadata_datastream_spec.rb +1 -1
- data/spec/unit/nokogiri_datastream_spec.rb +2 -2
- data/spec/unit/{rdf_xml_writer.rb → rdf_xml_writer_spec.rb} +8 -8
- data/spec/unit/relationship_graph_spec.rb +14 -0
- data/spec/unit/rels_ext_datastream_spec.rb +29 -2
- data/spec/unit/rubydora_connection_spec.rb +2 -4
- data/spec/unit/unsaved_digital_object_spec.rb +22 -9
- metadata +106 -258
- data/.hg/00changelog.i +0 -0
- data/.hg/branch +0 -1
- data/.hg/branch.cache +0 -2
- data/.hg/dirstate +0 -0
- data/.hg/hgrc +0 -2
- data/.hg/requires +0 -2
- data/.hg/store/00changelog.i +0 -0
- data/.hg/store/00manifest.i +0 -0
- data/.hg/store/data/.hgignore.i +0 -0
- data/.hg/store/data/.hgtags.i +0 -0
- data/.hg/store/data/_c_o_p_y_i_n_g.txt.i +0 -0
- data/.hg/store/data/_c_o_y_i_n_g._l_e_s_s_e_r.txt.i +0 -0
- data/.hg/store/data/_history.txt.i +0 -0
- data/.hg/store/data/_license.txt.i +0 -0
- data/.hg/store/data/_manifest.txt.i +0 -0
- data/.hg/store/data/_post_install.txt.i +0 -0
- data/.hg/store/data/_r_e_a_d_m_e.rdoc.i +0 -0
- data/.hg/store/data/_r_e_a_d_m_e.txt.i +0 -0
- data/.hg/store/data/_rakefile.i +0 -0
- data/.hg/store/data/_v_e_r_s_i_o_n.i +0 -0
- data/.hg/store/data/active-fedora.gemspec.i +0 -0
- data/.hg/store/data/active__fedora/_history.txt.i +0 -0
- data/.hg/store/data/active__fedora/_manifest.txt.i +0 -0
- data/.hg/store/data/active__fedora/_post_install.txt.i +0 -0
- data/.hg/store/data/active__fedora/_r_e_a_d_m_e.rdoc.i +0 -0
- data/.hg/store/data/active__fedora/_rakefile.i +0 -0
- data/.hg/store/data/active__fedora/lib/active__fedora.rb.i +0 -0
- data/.hg/store/data/active__fedora/script/console.i +0 -0
- data/.hg/store/data/active__fedora/script/destroy.i +0 -0
- data/.hg/store/data/active__fedora/script/generate.i +0 -0
- data/.hg/store/data/active__fedora/spec/active__fedora__spec.rb.i +0 -0
- data/.hg/store/data/active__fedora/spec/spec__helper.rb.i +0 -0
- data/.hg/store/data/config/fedora.yml.i +0 -0
- data/.hg/store/data/config/solr__mappings.yml.i +0 -0
- data/.hg/store/data/config/solr__mappings__af__0.1.yml.i +0 -0
- data/.hg/store/data/config/solr__mappings__bl__2.4.yml.i +0 -0
- data/.hg/store/data/lib/active-fedora.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/base.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/content__model.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/datastream.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/fedora__object.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/metadata__datastream.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/model.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/property.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/qualified__dublin__core__datastream.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/relationship.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/rels__ext__datastream.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/semantic__node.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/solr__mapper.rb.i +0 -0
- data/.hg/store/data/lib/active__fedora/solr__service.rb.i +0 -0
- data/.hg/store/data/lib/fedora/base.rb.i +0 -0
- data/.hg/store/data/lib/fedora/connection.rb.i +0 -0
- data/.hg/store/data/lib/fedora/datastream.rb.i +0 -0
- data/.hg/store/data/lib/fedora/fedora__object.rb.i +0 -0
- data/.hg/store/data/lib/fedora/formats.rb.i +0 -0
- data/.hg/store/data/lib/fedora/generic__search.rb.i +0 -0
- data/.hg/store/data/lib/fedora/repository.rb.i +0 -0
- data/.hg/store/data/lib/ruby-fedora.rb.i +0 -0
- data/.hg/store/data/lib/util/class__level__inheritable__attributes.rb.i +0 -0
- data/.hg/store/data/script/console.i +0 -0
- data/.hg/store/data/script/destroy.i +0 -0
- data/.hg/store/data/script/generate.i +0 -0
- data/.hg/store/data/solr/config/schema-1.5.xml.i +0 -0
- data/.hg/store/data/solr/config/schema.xml.i +0 -0
- data/.hg/store/data/solr/config/solrconfig-1.5.xml.i +0 -0
- data/.hg/store/data/spec/fixtures/changeme155.xml.i +0 -0
- data/.hg/store/data/spec/fixtures/dino.jpg.i +0 -0
- data/.hg/store/data/spec/fixtures/minivan.jpg.d +0 -0
- data/.hg/store/data/spec/fixtures/minivan.jpg.i +0 -0
- data/.hg/store/data/spec/fixtures/test__12.foxml.xml.i +0 -0
- data/.hg/store/data/spec/integration/active__fedora/base__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/active__fedora/datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/active__fedora/fedora__object__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/active__fedora/full__featured__model__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/active__fedora/model__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/active__fedora/rels__ext__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/active__fedora/semantic__node__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/base__file__management__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/base__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/bug__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/datastreams__crud__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/fedora__object__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/full__featured__model__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/model__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/rels__ext__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/repository__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/rf__fedora__object__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/semantic__node__spec.rb.i +0 -0
- data/.hg/store/data/spec/integration/solr__service__spec.rb.i +0 -0
- data/.hg/store/data/spec/samples/models/audio__record.rb.i +0 -0
- data/.hg/store/data/spec/samples/models/image.rb.i +0 -0
- data/.hg/store/data/spec/samples/models/oral__history.rb.i +0 -0
- data/.hg/store/data/spec/samples/models/seminar.rb.i +0 -0
- data/.hg/store/data/spec/samples/models/seminar__audio__file.rb.i +0 -0
- data/.hg/store/data/spec/samples/oh__qdc.xml.i +0 -0
- data/.hg/store/data/spec/samples/oral__history.rb.i +0 -0
- data/.hg/store/data/spec/samples/oral__history__sample.xml.i +0 -0
- data/.hg/store/data/spec/samples/oral__history__sample__model.rb.i +0 -0
- data/.hg/store/data/spec/samples/oral__history__xml.xml.i +0 -0
- data/.hg/store/data/spec/spec.opts.i +0 -0
- data/.hg/store/data/spec/spec__helper.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/base__cma__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/base__extra__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/base__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/content__model__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/inheritance__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/metadata__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/model__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/property__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/qualified__dublin__core__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/relationship__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/rels__ext__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/semantic__node__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora/solr__service__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/active__fedora__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/base__cma__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/base__datastream__management__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/base__extra__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/base__file__management__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/base__loader__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/base__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/connection__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/content__model__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/datastream__concurrency__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/fedora__object__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/inheritance__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/metadata__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/model__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/property__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/qualified__dublin__core__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/relationship__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/rels__ext__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/repository__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/rf__datastream__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/semantic__node__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/solr__config__options__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/solr__mapper__spec.rb.i +0 -0
- data/.hg/store/data/spec/unit/solr__service__spec.rb.i +0 -0
- data/.hg/store/data/tasks/rspec.rake.i +0 -0
- data/.hg/store/undo +0 -0
- data/.hg/undo.branch +0 -1
- data/.hg/undo.dirstate +0 -0
- data/.hgignore +0 -7
- data/.hgtags +0 -14
@@ -17,12 +17,16 @@ describe ActiveFedora::Datastream do
|
|
17
17
|
@test_datastream.to_param.should == 'foo%2ebar'
|
18
18
|
end
|
19
19
|
|
20
|
+
it "should be inspectable" do
|
21
|
+
@test_datastream.inspect.should match /#<ActiveFedora::Datastream:-?\d+ @pid=\"__DO_NOT_USE__\" @dsid=\"abcd\" @controlGroup=\"M\" @dirty=\"false\" @mimeType=\"\" >/
|
22
|
+
end
|
23
|
+
|
20
24
|
describe '#save' do
|
21
25
|
it "should set dirty? to false" do
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
@test_object.inner_object.stubs(:repository).returns(
|
26
|
+
mock_repo = mock('repository', :config=>{})
|
27
|
+
mock_repo.stubs(:add_datastream).with(:mimeType=>'text/xml', :versionable => true, :pid => @test_object.pid, :dsid => 'abcd', :controlGroup => 'M', :dsState => 'A', :content => 'hi there')
|
28
|
+
mock_repo.expects(:datastream).with(:dsid => 'abcd', :pid => @test_object.pid)
|
29
|
+
@test_object.inner_object.stubs(:repository).returns(mock_repo)
|
26
30
|
@test_datastream.dirty?.should be_true
|
27
31
|
@test_datastream.save
|
28
32
|
@test_datastream.dirty?.should be_false
|
@@ -85,8 +89,10 @@ describe ActiveFedora::Datastream do
|
|
85
89
|
<dsChecksum>none</dsChecksum>
|
86
90
|
</datastreamProfile>"
|
87
91
|
EOS
|
88
|
-
|
89
|
-
|
92
|
+
|
93
|
+
mock_repo = mock('repository', :config=>{})
|
94
|
+
@test_datastream.stubs(:repository).returns(mock_repo)
|
95
|
+
mock_repo.expects(:datastream).with(:dsid => 'abcd', :pid => @test_object.pid).returns(ds_profile)
|
90
96
|
@test_datastream.size.should == 9999
|
91
97
|
end
|
92
98
|
|
@@ -94,5 +100,29 @@ describe ActiveFedora::Datastream do
|
|
94
100
|
@test_datastream.size.should be_nil
|
95
101
|
end
|
96
102
|
end
|
103
|
+
|
104
|
+
describe ".from_xml" do
|
105
|
+
it "should load a FOXML datastream node" do
|
106
|
+
ds_xml = <<-EOS
|
107
|
+
<foxml:datastream ID="DC" STATE="A" CONTROL_GROUP="X" VERSIONABLE="true" xmlns:foxml="info:fedora/fedora-system:def/foxml#">
|
108
|
+
<foxml:xmlContent>
|
109
|
+
<datastream ID="DC" STATE="A" CONTROL_GROUP="X" VERSIONABLE="true">
|
110
|
+
<datastreamVersion ID="DC.1" LABEL="Dublin Core Record for this object" CREATED="2011-09-28T22:50:18.626Z" MIMETYPE="text/xml" FORMAT_URI="http://www.openarchives.org/OAI/2.0/oai_dc/" SIZE="526">
|
111
|
+
<xmlContent>
|
112
|
+
<oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
|
113
|
+
<dc:title>Title</dc:title>
|
114
|
+
<dc:identifier>0123456789</dc:identifier>
|
115
|
+
</oai_dc:dc>
|
116
|
+
</xmlContent>
|
117
|
+
</datastreamVersion>
|
118
|
+
</datastream>
|
119
|
+
</foxml:xmlContent>
|
120
|
+
</foxml:datastream>
|
121
|
+
EOS
|
122
|
+
ds_node = Nokogiri::XML(ds_xml).root
|
123
|
+
ds = ActiveFedora::Datastream.from_xml(@test_datastream, ds_node)
|
124
|
+
ds.should be_a(ActiveFedora::Datastream)
|
125
|
+
end
|
126
|
+
end
|
97
127
|
|
98
128
|
end
|
@@ -0,0 +1,251 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ActiveFedora::Datastreams do
|
4
|
+
before do
|
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
|
11
|
+
|
12
|
+
describe "has_metadata" do
|
13
|
+
@@last_pid = 0
|
14
|
+
def increment_pid
|
15
|
+
@@last_pid += 1
|
16
|
+
end
|
17
|
+
|
18
|
+
before(:each) do
|
19
|
+
@this_pid = increment_pid.to_s
|
20
|
+
stub_get(@this_pid)
|
21
|
+
Rubydora::Repository.any_instance.stubs(:client).returns(@mock_client)
|
22
|
+
ActiveFedora::RubydoraConnection.instance.stubs(:nextid).returns(@this_pid)
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "creates datastreams" do
|
26
|
+
before do
|
27
|
+
class FooHistory < ActiveFedora::Base
|
28
|
+
has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"someData" do |m|
|
29
|
+
m.field "fubar", :string
|
30
|
+
m.field "swank", :text
|
31
|
+
end
|
32
|
+
has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"withText" do |m|
|
33
|
+
m.field "fubar", :text
|
34
|
+
end
|
35
|
+
has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"withText2", :label=>"withLabel" do |m|
|
36
|
+
m.field "fubar", :text
|
37
|
+
end
|
38
|
+
delegate :fubar, :to=>'withText'
|
39
|
+
delegate :swank, :to=>'someData'
|
40
|
+
end
|
41
|
+
stub_ingest(@this_pid)
|
42
|
+
stub_add_ds(@this_pid, ['RELS-EXT', 'someData', 'withText', 'withText2'])
|
43
|
+
|
44
|
+
@n = FooHistory.new()
|
45
|
+
@n.datastreams['RELS-EXT'].expects(:changed?).returns(true).at_least_once
|
46
|
+
@n.expects(:update_index)
|
47
|
+
@n.save
|
48
|
+
end
|
49
|
+
|
50
|
+
after do
|
51
|
+
Object.send(:remove_const, :FooHistory)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should create specified datastreams with specified fields" do
|
55
|
+
@n.datastreams["someData"].should_not be_nil
|
56
|
+
@n.datastreams["someData"].fubar_values='bar'
|
57
|
+
@n.datastreams["someData"].fubar_values.should == ['bar']
|
58
|
+
@n.datastreams["withText2"].dsLabel.should == "withLabel"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
it "should create specified datastreams with appropriate control group" do
|
64
|
+
ActiveFedora.fedora_config.stubs(:[]).returns({:url=>'sub_url'})
|
65
|
+
stub_ingest(@this_pid)
|
66
|
+
stub_add_ds(@this_pid, ['RELS-EXT', 'DC', 'rightsMetadata', 'properties', 'descMetadata', 'UKETD_DC'])
|
67
|
+
stub_get(@this_pid, ['RELS-EXT', 'DC', 'rightsMetadata', 'properties', 'descMetadata', 'UKETD_DC'])
|
68
|
+
class UketdObject < ActiveFedora::Base
|
69
|
+
has_metadata :name => "rightsMetadata", :label=>"Rights metadata", :type => ActiveFedora::NokogiriDatastream
|
70
|
+
|
71
|
+
# Uses the Hydra MODS Article profile for tracking most of the descriptive metadata
|
72
|
+
# TODO: define terminology for ETD
|
73
|
+
has_metadata :name => "descMetadata", :label=>"MODS metadata", :control_group=>"M", :type => ActiveFedora::NokogiriDatastream
|
74
|
+
|
75
|
+
has_metadata :name => "UKETD_DC", :label=>"UKETD_DC metadata", :control_group => "E", :disseminator=>"hull-sDef:uketdObject/getUKETDMetadata", :type => ActiveFedora::NokogiriDatastream
|
76
|
+
|
77
|
+
has_metadata :name => "DC", :type => ActiveFedora::NokogiriDatastream, :label=>"DC admin metadata"
|
78
|
+
|
79
|
+
# A place to put extra metadata values
|
80
|
+
has_metadata :name => "properties", :label=>"Workflow properties", :type => ActiveFedora::MetadataDatastream do |m|
|
81
|
+
m.field 'collection', :string
|
82
|
+
m.field 'depositor', :string
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
@n = UketdObject.new()
|
87
|
+
@n.save
|
88
|
+
@n.datastreams["DC"].controlGroup.should eql("X")
|
89
|
+
@n.datastreams["rightsMetadata"].controlGroup.should eql("X")
|
90
|
+
@n.datastreams["properties"].controlGroup.should eql("X")
|
91
|
+
@n.datastreams["descMetadata"].controlGroup.should eql("M")
|
92
|
+
@n.datastreams["UKETD_DC"].controlGroup.should eql("E")
|
93
|
+
@n.datastreams["UKETD_DC"].dsLocation.should == "sub_url/objects/#{@this_pid}/methods/hull-sDef:uketdObject/getUKETDMetadata"
|
94
|
+
end
|
95
|
+
|
96
|
+
context ":control_group => 'E'" do
|
97
|
+
before do
|
98
|
+
stub_get(@this_pid)
|
99
|
+
stub_add_ds(@this_pid, ['RELS-EXT', 'externalDisseminator', 'externalUrl'])
|
100
|
+
end
|
101
|
+
before :all do
|
102
|
+
class MoreFooHistory < ActiveFedora::Base
|
103
|
+
has_metadata :type=>ActiveFedora::NokogiriDatastream, :name=>"externalDisseminator", :control_group => "E"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
after(:all) do
|
108
|
+
# clean up test class
|
109
|
+
Object.send(:remove_const, :MoreFooHistory)
|
110
|
+
end
|
111
|
+
it "should raise an error without :disseminator or :url option" do
|
112
|
+
lambda { @n = MoreFooHistory.new }.should raise_exception
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should allow :control_group => 'E' with a :url option" do
|
116
|
+
class MoreFooHistory < ActiveFedora::Base
|
117
|
+
has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"externalDisseminator",:control_group => "E", :url => "http://exampl.com/mypic.jpg"
|
118
|
+
end
|
119
|
+
stub_ingest(@this_pid)
|
120
|
+
@n = MoreFooHistory.new
|
121
|
+
@n.save
|
122
|
+
end
|
123
|
+
it "should raise an error if :url is malformed" do
|
124
|
+
class MoreFooHistory < ActiveFedora::Base
|
125
|
+
has_metadata :type => ActiveFedora::NokogiriDatastream, :name=>"externalUrl", :url=>"my_rul", :control_group => "E"
|
126
|
+
end
|
127
|
+
client = mock_client.stubs(:[]).with do |params|
|
128
|
+
/objects\/#{@this_pid}\/datastreams\/externalUrl/.match(params)
|
129
|
+
end
|
130
|
+
client.raises(RuntimeError, "Error adding datastream externalUrl for object changeme:4020. See logger for details")
|
131
|
+
@n = MoreFooHistory.new
|
132
|
+
lambda {@n.save }.should raise_exception
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
context ":control_group => 'R'" do
|
137
|
+
before do
|
138
|
+
stub_get(@this_pid)
|
139
|
+
stub_add_ds(@this_pid, ['RELS-EXT', 'externalDisseminator' ])
|
140
|
+
end
|
141
|
+
it "should raise an error without :url option" do
|
142
|
+
class MoreFooHistory < ActiveFedora::Base
|
143
|
+
has_metadata :type=>ActiveFedora::NokogiriDatastream, :name=>"externalDisseminator", :control_group => "R"
|
144
|
+
end
|
145
|
+
lambda { @n = MoreFooHistory.new }.should raise_exception
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should work with a valid :url option" do
|
149
|
+
stub_ingest(@this_pid)
|
150
|
+
class MoreFooHistory < ActiveFedora::Base
|
151
|
+
has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"externalDisseminator",:control_group => "R", :url => "http://exampl.com/mypic.jpg"
|
152
|
+
end
|
153
|
+
@n = MoreFooHistory.new
|
154
|
+
@n.save
|
155
|
+
end
|
156
|
+
it "should not take a :disseminator option without a :url option" do
|
157
|
+
class MoreFooHistory < ActiveFedora::Base
|
158
|
+
has_metadata :type=>ActiveFedora::NokogiriDatastream, :name=>"externalDisseminator", :control_group => "R", :disseminator => "foo:s-def/hull-cModel:Foo"
|
159
|
+
end
|
160
|
+
lambda { @n = MoreFooHistory.new }.should raise_exception
|
161
|
+
end
|
162
|
+
it "should raise an error if :url is malformed" do
|
163
|
+
class MoreFooHistory < ActiveFedora::Base
|
164
|
+
has_metadata :type => ActiveFedora::NokogiriDatastream, :name=>"externalUrl", :url=>"my_rul", :control_group => "R"
|
165
|
+
end
|
166
|
+
client = mock_client.stubs(:[]).with do |params|
|
167
|
+
/objects\/#{@this_pid}\/datastreams\/externalUrl/.match(params)
|
168
|
+
end
|
169
|
+
client.raises(RuntimeError, "Error adding datastream externalUrl for object changeme:4020. See logger for details")
|
170
|
+
lambda {MoreFooHistory.new }.should raise_exception
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
describe "#create_datastream" do
|
176
|
+
it 'should create a datastream object using the type of object supplied in the string (does reflection)' do
|
177
|
+
f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"))
|
178
|
+
f.stubs(:content_type).returns("image/jpeg")
|
179
|
+
f.stubs(:original_filename).returns("minivan.jpg")
|
180
|
+
ds = @test_object.create_datastream("ActiveFedora::Datastream", 'NAME', {:blob=>f})
|
181
|
+
ds.class.should == ActiveFedora::Datastream
|
182
|
+
ds.dsLabel.should == "minivan.jpg"
|
183
|
+
ds.mimeType.should == "image/jpeg"
|
184
|
+
end
|
185
|
+
it 'should create a datastream object from a string' do
|
186
|
+
ds = @test_object.create_datastream("ActiveFedora::Datastream", 'NAME', {:blob=>"My file data"})
|
187
|
+
ds.class.should == ActiveFedora::Datastream
|
188
|
+
ds.dsLabel.should == nil
|
189
|
+
ds.mimeType.should == "application/octet-stream"
|
190
|
+
end
|
191
|
+
|
192
|
+
it 'should not set dsLocation if dsLocation is nil' do
|
193
|
+
ActiveFedora::Datastream.any_instance.expects(:dsLocation=).never
|
194
|
+
ds = @test_object.create_datastream("ActiveFedora::Datastream", 'NAME', {:dsLocation=>nil})
|
195
|
+
end
|
196
|
+
|
197
|
+
it 'should set attributes passed in onto the datastream' do
|
198
|
+
ds = @test_object.create_datastream("ActiveFedora::Datastream", 'NAME', {:dsLocation=>"a1", :mimeType=>'image/png', :controlGroup=>'X', :dsLabel=>'My Label', :checksumType=>'SHA-1'})
|
199
|
+
ds.location.should == 'a1'
|
200
|
+
ds.mimeType.should == 'image/png'
|
201
|
+
ds.controlGroup.should == 'X'
|
202
|
+
ds.label.should == 'My Label'
|
203
|
+
ds.checksumType.should == 'SHA-1'
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
describe ".has_file_datastream" do
|
208
|
+
before do
|
209
|
+
class FileDS < ActiveFedora::Datastream; end
|
210
|
+
class FooHistory < ActiveFedora::Base
|
211
|
+
has_file_datastream :type=>FileDS
|
212
|
+
end
|
213
|
+
end
|
214
|
+
after do
|
215
|
+
Object.send(:remove_const, :FooHistory)
|
216
|
+
Object.send(:remove_const, :FileDS)
|
217
|
+
end
|
218
|
+
it "Should add a line in ds_spec" do
|
219
|
+
FooHistory.ds_specs['content'][:type].should == FileDS
|
220
|
+
FooHistory.ds_specs['content'][:label].should == "File Datastream"
|
221
|
+
FooHistory.ds_specs['content'][:control_group].should == "M"
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
describe "#add_file_datastream" do
|
226
|
+
before do
|
227
|
+
@mock_file = mock('file')
|
228
|
+
end
|
229
|
+
it "should pass prefix" do
|
230
|
+
stub_add_ds(@test_object.pid, ['content1'])
|
231
|
+
@test_object.add_file_datastream(@mock_file, :prefix=>'content' )
|
232
|
+
@test_object.datastreams.keys.should include 'content1'
|
233
|
+
end
|
234
|
+
it "should pass dsid" do
|
235
|
+
stub_add_ds(@test_object.pid, ['MY_DSID'])
|
236
|
+
@test_object.add_file_datastream(@mock_file, :dsid=>'MY_DSID')
|
237
|
+
@test_object.datastreams.keys.should include 'MY_DSID'
|
238
|
+
end
|
239
|
+
it "without dsid or prefix" do
|
240
|
+
stub_add_ds(@test_object.pid, ['DS1'])
|
241
|
+
@test_object.add_file_datastream(@mock_file, {} )
|
242
|
+
@test_object.datastreams.keys.should include 'DS1'
|
243
|
+
end
|
244
|
+
it "Should pass checksum Type" do
|
245
|
+
stub_add_ds(@test_object.pid, ['DS1'])
|
246
|
+
@test_object.add_file_datastream(@mock_file, {:checksumType=>'MD5'} )
|
247
|
+
@test_object.datastreams['DS1'].checksumType.should == 'MD5'
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ActiveFedora::DCRDFDatastream do
|
4
|
+
|
5
|
+
describe "an instance with content" do
|
6
|
+
before do
|
7
|
+
@subject = ActiveFedora::DCRDFDatastream.new(@inner_object, 'dc_rdf')
|
8
|
+
@subject.content = File.new('spec/fixtures/dublin_core_rdf_descMetadata.nt').read
|
9
|
+
@subject.stubs(:pid => 'test:1')
|
10
|
+
@subject.stubs(:new? => false)
|
11
|
+
end
|
12
|
+
it "should have controlGroup" do
|
13
|
+
@subject.controlGroup.should == 'M'
|
14
|
+
end
|
15
|
+
it "should have mimeType" do
|
16
|
+
@subject.mimeType.should == 'text/plain'
|
17
|
+
end
|
18
|
+
it "should have dsid" do
|
19
|
+
@subject.dsid.should == 'dc_rdf'
|
20
|
+
end
|
21
|
+
it "should have fields" do
|
22
|
+
@subject.publisher.should == ["Penn State"]
|
23
|
+
end
|
24
|
+
it "should have method missing" do
|
25
|
+
lambda{@subject.frank}.should raise_exception NoMethodError
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should set fields" do
|
29
|
+
@subject.publisher= "St. Martin's Press"
|
30
|
+
@subject.publisher.should == ["St. Martin's Press"]
|
31
|
+
end
|
32
|
+
it "should append fields" do
|
33
|
+
@subject.append(RDF::DC.publisher, "St. Martin's Press")
|
34
|
+
@subject.publisher.should == ["Penn State", "St. Martin's Press"]
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "a new instance" do
|
40
|
+
before do
|
41
|
+
@subject = ActiveFedora::DCRDFDatastream.new(@inner_object, 'dc_rdf')
|
42
|
+
@subject.stubs(:pid => 'test:1')
|
43
|
+
end
|
44
|
+
it "should save and reload" do
|
45
|
+
@subject.publisher= ["St. Martin's Press"]
|
46
|
+
@subject.save
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -22,7 +22,7 @@ describe ActiveFedora::MetadataDatastream do
|
|
22
22
|
@test_object = ActiveFedora::Base.new
|
23
23
|
@mock_repo = mock('repository')
|
24
24
|
@mock_repo.stubs(:datastream)
|
25
|
-
@mock_repo.stubs(:datastream_dissemination=>'My Content')
|
25
|
+
@mock_repo.stubs(:datastream_dissemination=>'My Content', :config=>{})
|
26
26
|
mock_inner.stubs(:repository).returns(@mock_repo)
|
27
27
|
mock_inner.stubs(:pid)
|
28
28
|
@test_ds = ActiveFedora::MetadataDatastream.new(mock_inner, 'mdDs')
|
@@ -16,7 +16,7 @@ describe ActiveFedora::NokogiriDatastream do
|
|
16
16
|
before(:each) do
|
17
17
|
@mock_inner = mock('inner object')
|
18
18
|
@mock_repo = mock('repository')
|
19
|
-
@mock_repo.stubs(:datastream_dissemination=>'My Content')
|
19
|
+
@mock_repo.stubs(:datastream_dissemination=>'My Content', :config=>{})
|
20
20
|
@mock_inner.stubs(:repository).returns(@mock_repo)
|
21
21
|
@mock_inner.stubs(:pid)
|
22
22
|
@test_ds = ActiveFedora::NokogiriDatastream.new(@mock_inner, "descMetadata")
|
@@ -172,7 +172,7 @@ describe ActiveFedora::NokogiriDatastream do
|
|
172
172
|
it "should persist the product of .to_xml in fedora" do
|
173
173
|
@test_ds.expects(:new?).returns(true).twice
|
174
174
|
@mock_repo.expects(:datastream).with(:pid => nil, :dsid => 'descMetadata')
|
175
|
-
@mock_repo.expects(:add_datastream).with(:pid => nil, :dsid => 'descMetadata', :
|
175
|
+
@mock_repo.expects(:add_datastream).with(:pid => nil, :dsid => 'descMetadata', :versionable => true, :content => 'fake xml', :controlGroup => 'M', :dsState => 'A', :mimeType=>'text/xml')
|
176
176
|
@test_ds.expects(:to_xml).returns("fake xml")
|
177
177
|
@test_ds.serialize!
|
178
178
|
@test_ds.save
|
@@ -28,24 +28,24 @@ describe ActiveFedora::RDFXMLWriter do
|
|
28
28
|
it "should serialize graphs using the rdf:Description element despite the presence of rdf:type statements" do
|
29
29
|
graph = RDF::Graph.new
|
30
30
|
subject = RDF::URI.new "info:fedora/test:sample_pid"
|
31
|
-
graph.insert RDF::Statement.new(subject, ActiveFedora::
|
31
|
+
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:is_member_of), RDF::URI.new('demo:10'))
|
32
32
|
graph.insert RDF::Statement.new(subject, RDF::URI('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'), RDF::URI.new('http://purl.org/dc/dcmitype/Collection'))
|
33
|
-
content =
|
33
|
+
content = ActiveFedora::RDFXMLWriter.buffer do |writer|
|
34
34
|
graph.each_statement do |statement|
|
35
35
|
writer << statement
|
36
36
|
end
|
37
37
|
end
|
38
|
-
|
38
|
+
content.should be_equivalent_to @rdf_xml_with_type
|
39
39
|
end
|
40
40
|
|
41
41
|
it 'should serialize graphs without rdf:type equivalently to RDF::RDFXML::Writer' do
|
42
42
|
graph = RDF::Graph.new
|
43
43
|
subject = RDF::URI.new "info:fedora/test:sample_pid"
|
44
|
-
graph.insert RDF::Statement.new(subject, ActiveFedora::
|
45
|
-
graph.insert RDF::Statement.new(subject, ActiveFedora::
|
46
|
-
graph.insert RDF::Statement.new(subject, ActiveFedora::
|
47
|
-
graph.insert RDF::Statement.new(subject, ActiveFedora::
|
48
|
-
graph.insert RDF::Statement.new(subject, ActiveFedora::
|
44
|
+
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:is_member_of), RDF::URI.new('info:fedora/demo:10'))
|
45
|
+
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:is_part_of), RDF::URI.new('info:fedora/demo:11'))
|
46
|
+
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:has_part), RDF::URI.new('info:fedora/demo:12'))
|
47
|
+
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:has_model), RDF::URI.new("info:fedora/afmodel:OtherModel"))
|
48
|
+
graph.insert RDF::Statement.new(subject, ActiveFedora::Predicates.find_graph_predicate(:has_model), RDF::URI.new("info:fedora/afmodel:SampleModel"))
|
49
49
|
|
50
50
|
local_content = ActiveFedora::RDFXMLWriter.buffer do |writer|
|
51
51
|
graph.each_statement do |statement|
|
@@ -40,6 +40,13 @@ describe ActiveFedora::RelationshipGraph do
|
|
40
40
|
@graph[:has_part].should == [@n1]
|
41
41
|
end
|
42
42
|
|
43
|
+
describe "has_predicate?" do
|
44
|
+
it "should return true when it has it" do
|
45
|
+
@graph.has_predicate?(:has_part).should be_false
|
46
|
+
@graph.add(:has_part, @n1)
|
47
|
+
@graph.has_predicate?(:has_part).should be_true
|
48
|
+
end
|
49
|
+
end
|
43
50
|
|
44
51
|
describe "delete" do
|
45
52
|
it "should delete an object when an object is passed" do
|
@@ -69,6 +76,13 @@ describe ActiveFedora::RelationshipGraph do
|
|
69
76
|
@graph.delete(:has_part, 'info:fedora/foo:777')
|
70
77
|
@graph[:has_part].should == []
|
71
78
|
end
|
79
|
+
|
80
|
+
it "should delete all the predicates if only one arg is passed" do
|
81
|
+
@graph.add(:has_part, @n1)
|
82
|
+
@graph[:has_part].should == [@n1]
|
83
|
+
@graph.delete(:has_part)
|
84
|
+
@graph.has_predicate?(:has_part).should_not be_true
|
85
|
+
end
|
72
86
|
end
|
73
87
|
describe "build_statement" do
|
74
88
|
it "should raise an error when the target is a pid, not a uri" do
|