active-fedora 1.0.5 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.gitignore +21 -0
- data/.hg/00changelog.i +0 -0
- data/.hg/branch +1 -0
- data/.hg/branch.cache +2 -0
- data/.hg/dirstate +0 -0
- data/.hg/hgrc +2 -0
- data/.hg/requires +2 -0
- 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 +1 -0
- data/.hg/undo.dirstate +0 -0
- data/.hgignore +7 -0
- data/.hgtags +14 -0
- data/COPYING.txt +674 -0
- data/COYING.LESSER.txt +165 -0
- data/History.txt +34 -0
- data/LICENSE +20 -0
- data/License.txt +58 -0
- data/Manifest.txt +1 -1
- data/README.rdoc +13 -54
- data/README.txt +59 -0
- data/Rakefile +35 -0
- data/VERSION +1 -0
- data/active-fedora.gemspec +359 -0
- data/config/fedora.yml +16 -0
- data/config/solr_mappings.yml +14 -0
- data/config/solr_mappings_af_0.1.yml +16 -0
- data/config/solr_mappings_bl_2.4.yml +14 -0
- data/lib/active_fedora.rb +66 -6
- data/lib/active_fedora/base.rb +59 -23
- data/lib/active_fedora/datastream.rb +1 -1
- data/lib/active_fedora/metadata_datastream.rb +14 -7
- data/lib/active_fedora/model.rb +4 -4
- data/lib/active_fedora/rels_ext_datastream.rb +1 -1
- data/lib/active_fedora/semantic_node.rb +4 -3
- data/lib/active_fedora/solr_mapper.rb +17 -0
- data/lib/active_fedora/solr_service.rb +44 -2
- data/lib/fedora/base.rb +38 -0
- data/lib/fedora/connection.rb +210 -0
- data/lib/fedora/datastream.rb +56 -0
- data/lib/fedora/fedora_object.rb +161 -0
- data/lib/fedora/formats.rb +30 -0
- data/lib/fedora/generic_search.rb +71 -0
- data/lib/fedora/repository.rb +287 -0
- data/lib/ruby-fedora.rb +20 -0
- data/lib/util/class_level_inheritable_attributes.rb +23 -0
- data/script/console +15 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/solr/config/schema-1.5.xml +468 -0
- data/solr/config/schema.xml +174 -212
- data/solr/config/solrconfig-1.5.xml +1069 -0
- data/spec/active_fedora_spec.rb +7 -0
- data/spec/fixtures/changeme155.xml +255 -0
- data/spec/fixtures/dino.jpg +0 -0
- data/spec/fixtures/minivan.jpg +0 -0
- data/spec/fixtures/test_12.foxml.xml +121 -0
- data/spec/integration/base_file_management_spec.rb +20 -0
- data/spec/integration/base_spec.rb +196 -0
- data/spec/integration/bug_spec.rb +57 -0
- data/spec/integration/datastream_spec.rb +60 -0
- data/spec/integration/datastreams_crud_spec.rb +208 -0
- data/spec/integration/fedora_object_spec.rb +77 -0
- data/spec/integration/full_featured_model_spec.rb +207 -0
- data/spec/integration/model_spec.rb +54 -0
- data/spec/integration/rels_ext_datastream_spec.rb +67 -0
- data/spec/integration/repository_spec.rb +297 -0
- data/spec/integration/rf_fedora_object_spec.rb +95 -0
- data/spec/integration/semantic_node_spec.rb +95 -0
- data/spec/integration/solr_service_spec.rb +33 -0
- data/spec/samples/models/audio_record.rb +29 -0
- data/spec/samples/models/image.rb +5 -0
- data/spec/samples/models/oral_history.rb +50 -0
- data/spec/samples/models/seminar.rb +29 -0
- data/spec/samples/models/seminar_audio_file.rb +34 -0
- data/spec/samples/oh_qdc.xml +32 -0
- data/spec/samples/oral_history_sample.xml +38 -0
- data/spec/samples/oral_history_sample_model.rb +39 -0
- data/spec/samples/oral_history_xml.xml +35 -0
- data/spec/spec.opts +5 -0
- data/spec/spec_helper.rb +41 -0
- data/spec/unit/active_fedora_spec.rb +15 -0
- data/spec/unit/base_cma_spec.rb +25 -0
- data/spec/unit/base_datastream_management_spec.rb +119 -0
- data/spec/unit/base_extra_spec.rb +108 -0
- data/spec/unit/base_file_management_spec.rb +90 -0
- data/spec/unit/base_loader_spec.rb +43 -0
- data/spec/unit/base_spec.rb +584 -0
- data/spec/unit/connection_spec.rb +25 -0
- data/spec/unit/content_model_spec.rb +51 -0
- data/spec/unit/datastream_concurrency_spec.rb +59 -0
- data/spec/unit/datastream_spec.rb +85 -0
- data/spec/unit/fedora_object_spec.rb +66 -0
- data/spec/unit/inheritance_spec.rb +46 -0
- data/spec/unit/metadata_datastream_spec.rb +290 -0
- data/spec/unit/model_spec.rb +186 -0
- data/spec/unit/property_spec.rb +50 -0
- data/spec/unit/qualified_dublin_core_datastream_spec.rb +177 -0
- data/spec/unit/relationship_spec.rb +77 -0
- data/spec/unit/rels_ext_datastream_spec.rb +99 -0
- data/spec/unit/repository_spec.rb +136 -0
- data/spec/unit/rf_datastream_spec.rb +49 -0
- data/spec/unit/semantic_node_spec.rb +354 -0
- data/spec/unit/solr_config_options_spec.rb +98 -0
- data/spec/unit/solr_mapper_spec.rb +31 -0
- data/spec/unit/solr_service_spec.rb +83 -0
- data/tasks/hoe.rake +0 -0
- data/tasks/rspec.rake +29 -0
- metadata +373 -55
@@ -0,0 +1,54 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), "..", "spec_helper" )
|
2
|
+
|
3
|
+
require 'active_fedora'
|
4
|
+
require 'active_fedora/model'
|
5
|
+
require "rexml/document"
|
6
|
+
require 'ftools'
|
7
|
+
require 'mocha'
|
8
|
+
|
9
|
+
include ActiveFedora::Model
|
10
|
+
include Mocha::Standalone
|
11
|
+
|
12
|
+
describe ActiveFedora::Model do
|
13
|
+
|
14
|
+
|
15
|
+
before(:each) do
|
16
|
+
module SpecModel
|
17
|
+
|
18
|
+
class Basic < ActiveFedora::Base
|
19
|
+
#include ActiveFedora::Model
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
@test_instance = SpecModel::Basic.new
|
24
|
+
@test_instance.save
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
after(:each) do
|
29
|
+
@test_instance.delete
|
30
|
+
Object.send(:remove_const, :SpecModel)
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#find' do
|
34
|
+
it "should return an array of instances of the calling Class" do
|
35
|
+
pending
|
36
|
+
result = SpecModel::Basic.find(:all)
|
37
|
+
result.should be_instance_of(Array)
|
38
|
+
result.each do |obj|
|
39
|
+
obj.class.should == SpecModel::Basic
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe '#find_model' do
|
45
|
+
|
46
|
+
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
|
50
|
+
result.inner_object.new_object?.should be_false
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), "../spec_helper" )
|
2
|
+
|
3
|
+
require 'active_fedora'
|
4
|
+
require "rexml/document"
|
5
|
+
require 'ftools'
|
6
|
+
|
7
|
+
describe ActiveFedora::RelsExtDatastream do
|
8
|
+
|
9
|
+
before(:all) do
|
10
|
+
@sample_relationships_hash = Hash.new(:is_member_of => ["info:fedora/demo:5", "info:fedora/demo:10"])
|
11
|
+
@sample_xml_string = <<-EOS
|
12
|
+
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
13
|
+
<rdf:Description rdf:about="info:fedora/changeme:475">
|
14
|
+
<isMemberOf xmlns="info:fedora/fedora-system:def/relations-external#" rdf:resource="info:fedora/demo:5"></isMemberOf>
|
15
|
+
<isMemberOf xmlns="info:fedora/fedora-system:def/relations-external#" rdf:resource="info:fedora/demo:10"></isMemberOf>
|
16
|
+
</rdf:Description>
|
17
|
+
</rdf:RDF>
|
18
|
+
EOS
|
19
|
+
|
20
|
+
@sample_xml = REXML::Document.new(@sample_xml_string)
|
21
|
+
end
|
22
|
+
|
23
|
+
before(:each) do
|
24
|
+
@test_datastream = ActiveFedora::RelsExtDatastream.new
|
25
|
+
@test_object = ActiveFedora::Base.new
|
26
|
+
@test_object.save
|
27
|
+
@test_relationships = [ActiveFedora::Relationship.new(:subject => :self, :predicate => :is_member_of, :object => "info:fedora/demo:5"),
|
28
|
+
ActiveFedora::Relationship.new(:subject => :self, :predicate => :is_member_of, :object => "info:fedora/demo:10")]
|
29
|
+
end
|
30
|
+
|
31
|
+
after(:each) do
|
32
|
+
@test_object.delete
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
describe '#save' do
|
37
|
+
|
38
|
+
it "should generate new rdf/xml as the datastream content if the object has been changed" do
|
39
|
+
@test_object.add_datastream(@test_datastream)
|
40
|
+
@test_relationships.each do |rel|
|
41
|
+
@test_datastream.add_relationship(rel)
|
42
|
+
end
|
43
|
+
rexml1 = REXML::Document.new(@test_datastream.to_rels_ext(@test_object.pid))
|
44
|
+
@test_datastream.dirty = true
|
45
|
+
@test_datastream.save
|
46
|
+
rexml2 = REXML::Document.new(@test_object.datastreams["RELS-EXT"].content)
|
47
|
+
rexml1.root.elements["rdf:Description"].inspect.should eql(rexml2.root.elements["rdf:Description"].inspect)
|
48
|
+
#rexml1.root.elements["rdf:Description"].to_s.should eql(rexml2.root.elements["rdf:Description"].to_s)
|
49
|
+
|
50
|
+
#rexml1.root.elements["rdf:Description"].each_element do |el|
|
51
|
+
# el.inspect.should eql(rexml2.root.elements["rdf:Description"][el.index_in_parent].inspect)
|
52
|
+
#end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should load relationships from fedora into parent object" do
|
59
|
+
ActiveFedora::SemanticNode::PREDICATE_MAPPINGS.each_key do |p|
|
60
|
+
@test_object.add_relationship(p, "demo:#{rand(100)}")
|
61
|
+
end
|
62
|
+
@test_object.save
|
63
|
+
# make sure that _something_ was actually added to the object's relationships hash
|
64
|
+
@test_object.relationships[:self].should have_key(:is_member_of)
|
65
|
+
ActiveFedora::Base.load_instance(@test_object.pid).relationships.should == @test_object.relationships
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,297 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), "../spec_helper" )
|
2
|
+
|
3
|
+
# - Objects API - http://www.fedora-commons.org/documentation/3.0b1/userdocs/server/webservices/rest/index.html
|
4
|
+
|
5
|
+
# - Object profile
|
6
|
+
#
|
7
|
+
# curl -i http://localhost:8080/fedora/objects/demo:10
|
8
|
+
# curl -i http://localhost:8080/fedora/objects/demo:10.xml
|
9
|
+
# curl -i http://localhost:8080/fedora/objects/demo:10?resultFormat=xml
|
10
|
+
#
|
11
|
+
# - Object history
|
12
|
+
# curl -i http://localhost:8080/fedora/objects/demo:10/versions
|
13
|
+
# curl -i http://localhost:8080/fedora/objects/demo:10/versions.xml
|
14
|
+
# curl -i http://localhost:8080/fedora/objects/demo:10/versions/2007-07-25T17:08:11.915Z
|
15
|
+
# curl -i http://localhost:8080/fedora/objects/demo:10/versions/2007-07-25T17:08:11.915Z.xml
|
16
|
+
# curl -i http://localhost:8080/fedora/objects/demo:10/versions/2007-07-25T17:08:11.915Z?resultFormat=xml
|
17
|
+
#
|
18
|
+
# - Object export
|
19
|
+
# curl -i -u fedoraAdmin:fedoraAdmin http://localhost:8080/fedora/objects/demo:10/export?resultFormat=foxml1.0&context=private
|
20
|
+
#
|
21
|
+
# - Object XML
|
22
|
+
# curl -i http://localhost:8080/fedora/objects/demo:10/objectXML
|
23
|
+
# curl -i http://localhost:8080/fedora/objects/demo:10/objectXML?resultFormat=xml
|
24
|
+
#
|
25
|
+
# - Object methods
|
26
|
+
# curl -i http://localhost:8080/fedora/objects/demo:10/methods
|
27
|
+
# curl -i http://localhost:8080/fedora/objects/demo:10/methods?resultFormat=xml
|
28
|
+
# curl -i http://localhost:8080/fedora/objects/demo:10/methods/2007-07-25T17:08:11.915Z
|
29
|
+
# curl -i http://localhost:8080/fedora/objects/demo:10/methods/2007-07-25T17:08:11.915Z.xml
|
30
|
+
#
|
31
|
+
# invalid: curl -i http://localhost:8080/fedora/objects/demo:10/methods.xml
|
32
|
+
#
|
33
|
+
# - Create
|
34
|
+
# curl -i -H "Content-type: text/xml" -XPOST "http://localhost:8080/fedora/objects/new?label=Test&namespace=test" --data "" -u fedoraAdmin:fedoraAdmin
|
35
|
+
# curl -i -H "Content-type: text/xml" -XPOST "http://localhost:9090/fedora/objects/new" --data "" -u fedoraAdmin:fedoraAdmin
|
36
|
+
#
|
37
|
+
# curl -i -H "Content-type: text/xml" -XPOST "http://localhost:8080/fedora/objects/test:02?label=Test" --data "" -u fedoraAdmin:fedoraAdmin
|
38
|
+
# curl -i -H "Content-type: text/xml" -XPOST "http://localhost:8080/fedora/objects/test:01?label=Test&altIDs=3333" --data-binary @foxml.xml -u fedoraAdmin:fedoraAdmin
|
39
|
+
#
|
40
|
+
# - Delete
|
41
|
+
# curl -i -u fedoraAdmin:fedoraAdmin -XDELETE http://localhost:8080/fedora/objects/demo:10
|
42
|
+
#
|
43
|
+
# Objects API
|
44
|
+
# curl -i http://localhost:8080/fedora/objects
|
45
|
+
# curl -i http://localhost:8080/fedora/objects?resultFormat=xml
|
46
|
+
# curl -i http://localhost:8080/fedora/objects/nextPID -u fedoraAdmin:fedoraAdmin
|
47
|
+
# curl -i http://localhost:8080/fedora/objects/nextPID.xml -u fedoraAdmin:fedoraAdmin
|
48
|
+
|
49
|
+
describe Fedora::Repository, "constructor" do
|
50
|
+
it "should accept URL as string" do
|
51
|
+
fedora_url = "http://fedoraAdmin:fedoraAdmin@127.0.0.1:8080/fedora"
|
52
|
+
repository = Fedora::Repository.register(fedora_url)
|
53
|
+
|
54
|
+
repository.fedora_url.should == URI.parse(fedora_url)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should accept URL as URI object" do
|
58
|
+
fedora_url = URI.parse("http://fedoraAdmin:fedoraAdmin@127.0.0.1:8080/fedora")
|
59
|
+
repository = Fedora::Repository.register(fedora_url)
|
60
|
+
|
61
|
+
repository.fedora_url.should == fedora_url
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should reject invalid url format" do
|
65
|
+
lambda { Fedora::Repository.register("http://:8080/") }.should raise_error
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe Fedora::Repository, "CRUD" do
|
70
|
+
before(:all) do
|
71
|
+
Fedora::Repository.register(ActiveFedora.fedora_config[:url])
|
72
|
+
end
|
73
|
+
|
74
|
+
before(:each) do
|
75
|
+
@test_object = Fedora::FedoraObject.new(:label => 'test',
|
76
|
+
:state => 'A',
|
77
|
+
:ownerID => 'fedoraAdmin')
|
78
|
+
end
|
79
|
+
|
80
|
+
after(:each) do
|
81
|
+
if !@test_object.new_object?
|
82
|
+
begin
|
83
|
+
Fedora::Repository.instance.delete(@test_object)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should create new fedora object with auto pid" do
|
89
|
+
Fedora::Repository.instance.save(@test_object).should be_true
|
90
|
+
|
91
|
+
@test_object.should have(0).errors
|
92
|
+
@test_object.pid.should_not be_nil
|
93
|
+
@test_object.label.should == 'test'
|
94
|
+
@test_object.state.should == 'A'
|
95
|
+
@test_object.owner_id.should == 'fedoraAdmin'
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should create new fedora object with assigned pid" do
|
99
|
+
@test_object.pid = "demo:1000"
|
100
|
+
Fedora::Repository.instance.save(@test_object).should be_true
|
101
|
+
@test_object.should have(0).errors
|
102
|
+
@test_object.pid.should == "demo:1000"
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should update object state" do
|
106
|
+
Fedora::Repository.instance.save(@test_object).should be_true
|
107
|
+
|
108
|
+
@test_object.state = 'I'
|
109
|
+
Fedora::Repository.instance.update(@test_object).should be_true
|
110
|
+
@test_object.state.should == 'I'
|
111
|
+
end
|
112
|
+
|
113
|
+
it "should delete object by ref" do
|
114
|
+
Fedora::Repository.instance.create(@test_object).should be_true
|
115
|
+
Fedora::Repository.instance.delete(@test_object).should be_true
|
116
|
+
# prevent after statement from attempting to delete again
|
117
|
+
@test_object.new_object = true
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should delete object by pid" do
|
121
|
+
Fedora::Repository.instance.create(@test_object).should be_true
|
122
|
+
Fedora::Repository.instance.delete(@test_object.uri).should be_true
|
123
|
+
# prevent after statement from attempting to delete again
|
124
|
+
@test_object.new_object = true
|
125
|
+
end
|
126
|
+
|
127
|
+
=begin
|
128
|
+
it "should fetch object profile Image of Coliseum in Rome" do
|
129
|
+
xml = Fedora::Repository.instance.fetch_content("demo:5")
|
130
|
+
validate_xml(xml, 'objectProfile')
|
131
|
+
xml.should =~ %r{Data Object (Coliseum) for Local Simple Image Demo}
|
132
|
+
end
|
133
|
+
=end
|
134
|
+
end
|
135
|
+
|
136
|
+
describe Fedora::Repository, "find_objects" do
|
137
|
+
before(:all) do
|
138
|
+
Fedora::Repository.register(ActiveFedora.fedora_config[:url])
|
139
|
+
end
|
140
|
+
|
141
|
+
def fields_to_s(fields)
|
142
|
+
fields.inject("") { |s, f| s += '&' + f.to_s + '=true' }
|
143
|
+
end
|
144
|
+
|
145
|
+
def when_find_objects(*args)
|
146
|
+
fake_connection = mock("Connection")
|
147
|
+
Fedora::Repository.instance.expects(:connection).returns(fake_connection)
|
148
|
+
yield fake_connection
|
149
|
+
|
150
|
+
Fedora::Repository.instance.find_objects(*args)
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should include all fields by default" do
|
154
|
+
when_find_objects('label~Image*') { |conn|
|
155
|
+
conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s(Fedora::ALL_FIELDS))
|
156
|
+
}
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should include all fields when :include => :all " do
|
160
|
+
when_find_objects('label~Image*', :include => :all) { |conn|
|
161
|
+
conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s(Fedora::ALL_FIELDS))
|
162
|
+
}
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should fetch results with limit" do
|
166
|
+
when_find_objects('label~Image*', :limit => 10) { |conn|
|
167
|
+
conn.expects(:get).with('/fedora/objects?maxResults=10&query=label%7EImage%2A&resultFormat=xml' + fields_to_s(Fedora::ALL_FIELDS))
|
168
|
+
}
|
169
|
+
end
|
170
|
+
|
171
|
+
it "should fetch results with some fields but not :pid" do
|
172
|
+
when_find_objects('label~Image*', :select => [:label, :mDate]) { |conn|
|
173
|
+
conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s([:pid, :label, :mDate]))
|
174
|
+
}
|
175
|
+
end
|
176
|
+
|
177
|
+
it "should fetch results with some fields with :pid" do
|
178
|
+
when_find_objects('label~Image*', :select => [:pid, :label, :mDate]) { |conn|
|
179
|
+
conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s([:pid, :label, :mDate]))
|
180
|
+
}
|
181
|
+
end
|
182
|
+
|
183
|
+
def sample_response_xml(n = 1)
|
184
|
+
header = %Q(<result xmlns="http://www.fedora.info/definitions/1/0/types/">
|
185
|
+
<listSession>
|
186
|
+
<token>aToken</token>
|
187
|
+
<cursor>0</cursor>
|
188
|
+
</listSession>
|
189
|
+
<resultList>)
|
190
|
+
|
191
|
+
body = %Q(<objectFields>
|
192
|
+
<pid>demo:10</pid>
|
193
|
+
<label>Column Detail, Pavillion III, IVA Image Collection - University of Virginia</label>
|
194
|
+
</objectFields>) * n
|
195
|
+
|
196
|
+
header + body + %Q(</resultList></result>)
|
197
|
+
end
|
198
|
+
|
199
|
+
it "should convert xml response with 0 objectFields into array of FedoraObject" do
|
200
|
+
objects = when_find_objects('label~Image*', :select => [:pid, :label, :mDate]) { |conn|
|
201
|
+
conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s([:pid, :label, :mDate])).
|
202
|
+
returns(Fedora::XmlFormat.decode(sample_response_xml))
|
203
|
+
}
|
204
|
+
|
205
|
+
objects.session_token.should == 'aToken'
|
206
|
+
objects.should_not be_empty
|
207
|
+
end
|
208
|
+
|
209
|
+
it "should return FedoraObjects with new_object set to false" do
|
210
|
+
objects = when_find_objects('label~Image*', :select => [:pid, :label, :mDate]) { |conn|
|
211
|
+
conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s([:pid, :label, :mDate])).
|
212
|
+
returns(Fedora::XmlFormat.decode(sample_response_xml))
|
213
|
+
}
|
214
|
+
objects.each do |obj|
|
215
|
+
obj.should_not be_new_object
|
216
|
+
end
|
217
|
+
|
218
|
+
end
|
219
|
+
|
220
|
+
it "should convert xml response with single objectFields into array of FedoraObject" do
|
221
|
+
objects = when_find_objects('label~Image*', :select => [:pid, :label, :mDate]) { |conn|
|
222
|
+
conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s([:pid, :label, :mDate])).
|
223
|
+
returns(Fedora::XmlFormat.decode(sample_response_xml(1)))
|
224
|
+
}
|
225
|
+
|
226
|
+
objects.session_token.should == 'aToken'
|
227
|
+
objects.should have(1).record
|
228
|
+
objects.first.pid.should == 'demo:10'
|
229
|
+
objects.first.should be_kind_of(Fedora::FedoraObject)
|
230
|
+
end
|
231
|
+
|
232
|
+
it "should convert xml response 2 objectFields into array of FedoraObject" do
|
233
|
+
objects = when_find_objects('label~Image*', :select => [:pid, :label, :mDate]) { |conn|
|
234
|
+
conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s([:pid, :label, :mDate])).
|
235
|
+
returns(Fedora::XmlFormat.decode(sample_response_xml(2)))
|
236
|
+
}
|
237
|
+
|
238
|
+
objects.session_token.should == 'aToken'
|
239
|
+
objects.should have(2).records
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
describe Fedora::Repository, "ingest" do
|
244
|
+
|
245
|
+
after(:each) do
|
246
|
+
begin
|
247
|
+
Fedora::Repository.instance.delete("test:12")
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
it "should successfully ingest foxml" do
|
252
|
+
foxml_file = fixture("test_12.foxml.xml")
|
253
|
+
foxml = fixture("test_12.foxml.xml").read
|
254
|
+
response = Fedora::Repository.instance.ingest(foxml_file)
|
255
|
+
response.code.should == "201"
|
256
|
+
response.body.should == "test:12"
|
257
|
+
end
|
258
|
+
|
259
|
+
end
|
260
|
+
|
261
|
+
describe Fedora::Repository do
|
262
|
+
before(:all) do
|
263
|
+
require 'rexml/document'
|
264
|
+
end
|
265
|
+
|
266
|
+
it "should fetch history" do
|
267
|
+
xml = Fedora::Repository.instance.fetch_custom("demo:20", :versions)
|
268
|
+
validate_xml(xml, 'fedoraObjectHistory')
|
269
|
+
xml.should =~ /pid="demo:20"/
|
270
|
+
end
|
271
|
+
|
272
|
+
it "should fetch profile" do
|
273
|
+
xml = Fedora::Repository.instance.fetch_custom("demo:20", :profile)
|
274
|
+
validate_xml(xml, 'objectProfile')
|
275
|
+
xml.should =~ /pid="demo:20"/
|
276
|
+
end
|
277
|
+
|
278
|
+
it "should fetch export" do
|
279
|
+
xml = Fedora::Repository.instance.fetch_custom("demo:20", :export)
|
280
|
+
validate_xml(xml, 'digitalObject')
|
281
|
+
xml.should =~ /demo:20/
|
282
|
+
xml.should =~ /datastream/
|
283
|
+
end
|
284
|
+
|
285
|
+
it "should fetch objectXML" do
|
286
|
+
xml = Fedora::Repository.instance.fetch_custom("demo:20", :objectXML)
|
287
|
+
xml.should =~ /digitalObject/
|
288
|
+
xml.should =~ /pid="demo:20"/i
|
289
|
+
end
|
290
|
+
|
291
|
+
it "should list object methods" do
|
292
|
+
xml = Fedora::Repository.instance.fetch_custom("demo:20", :methods)
|
293
|
+
xml.should =~ /objectMethods/
|
294
|
+
xml.should =~ /pid="demo:20"/i
|
295
|
+
end
|
296
|
+
|
297
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), "../spec_helper" )
|
2
|
+
|
3
|
+
require "rexml/document"
|
4
|
+
|
5
|
+
describe Fedora::FedoraObject do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
Fedora::Repository.register(ActiveFedora.fedora_config[:url])
|
9
|
+
@test_object = Fedora::FedoraObject.new(:pid=>"demo:1000")
|
10
|
+
Fedora::Repository.instance.save(@test_object)
|
11
|
+
end
|
12
|
+
|
13
|
+
after(:each) do
|
14
|
+
Fedora::Repository.instance.delete(@test_object)
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#object_xml' do
|
18
|
+
it "should return XML with a root of digitalObject with namespace info:fedora/fedora-system:def/foxml#" do
|
19
|
+
object_rexml = REXML::Document.new(@test_object.object_xml)
|
20
|
+
object_rexml.root.name.should == "digitalObject"
|
21
|
+
object_rexml.root.namespace.should == "info:fedora/fedora-system:def/foxml#"
|
22
|
+
object_rexml.root.elements["foxml:objectProperties/foxml:property[@NAME='info:fedora/fedora-system:def/model#state']"].attributes["VALUE"].should_not be_nil
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#profile' do
|
27
|
+
it "should return an array with misc Fedora Object attributes" do
|
28
|
+
profile = @test_object.profile
|
29
|
+
profile.class.should == Hash
|
30
|
+
profile.empty?.should_not == true
|
31
|
+
#profile.class.should_not be_empty
|
32
|
+
profile.should have_key(:owner_id)
|
33
|
+
profile[:owner_id].should == "fedoraAdmin"
|
34
|
+
#profile.should have_key(:content_model)
|
35
|
+
profile.should have_key(:label)
|
36
|
+
profile.should have_key(:create_date)
|
37
|
+
profile.should have_key(:modified_date)
|
38
|
+
profile.should have_key(:methods_list_url)
|
39
|
+
profile.should have_key(:datastreams_list_url)
|
40
|
+
profile.should have_key(:state)
|
41
|
+
profile[:state].should == "A"
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should allow access to fedora object info" do
|
47
|
+
@test_object.label = "test"
|
48
|
+
Fedora::Repository.instance.save(@test_object)
|
49
|
+
obj = Fedora::Repository.instance.find_objects("pid=#{@test_object.pid}").first
|
50
|
+
obj.pid.should == "demo:1000"
|
51
|
+
obj.label.should == 'test'
|
52
|
+
obj.state.should == 'A'
|
53
|
+
obj.owner_id.should == 'fedoraAdmin'
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "properties_from_fedora" do
|
57
|
+
it" should return the object properties from fedora" do
|
58
|
+
@test_object.label = "test"
|
59
|
+
Fedora::Repository.instance.save(@test_object)
|
60
|
+
properties = @test_object.properties_from_fedora
|
61
|
+
properties[:pid].should == "demo:1000"
|
62
|
+
properties[:state].should == 'A'
|
63
|
+
properties[:create_date].should == @test_object.profile[:create_date]
|
64
|
+
properties[:modified_date].should == @test_object.profile[:modified_date]
|
65
|
+
properties[:label].should == 'test'
|
66
|
+
properties[:owner_id].should == 'fedoraAdmin'
|
67
|
+
end
|
68
|
+
it "should not set :label if it is not there in the object_xml" do
|
69
|
+
object_rexml = REXML::Document.new(@test_object.object_xml)
|
70
|
+
# The label node will be missing from the FOXML because label was never set.
|
71
|
+
object_rexml.root.elements["//foxml:property[@NAME='info:fedora/fedora-system:def/model#label']"].should == nil
|
72
|
+
properties = @test_object.properties_from_fedora
|
73
|
+
properties[:label].should == nil
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "load_attr_from_fedora" do
|
78
|
+
it "should push all of the properties from fedora into the objects attributes" do
|
79
|
+
@test_object.label = "test"
|
80
|
+
Fedora::Repository.instance.save(@test_object)
|
81
|
+
@test_object.attributes.should == {:pid=>"demo:1000", :label=>"test"}
|
82
|
+
@test_object.load_attributes_from_fedora
|
83
|
+
#{:create_date=>"2009-07-16T17:42:33.548Z", :label=>"test", :modified_date=>"2009-07-16T17:42:33.548Z", :state=>"Active", :pid=>"demo:1000", :owner_id=>"fedoraAdmin"}
|
84
|
+
@test_object.attributes[:pid].should == "demo:1000"
|
85
|
+
@test_object.attributes[:state].should == 'A'
|
86
|
+
#@test_object.attributes[:state].should == 'Active'
|
87
|
+
@test_object.attributes[:create_date].should == @test_object.profile[:create_date]
|
88
|
+
@test_object.attributes[:modified_date].should == @test_object.profile[:modified_date]
|
89
|
+
@test_object.attributes[:label].should == 'test'
|
90
|
+
@test_object.attributes[:owner_id].should == 'fedoraAdmin'
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
end
|