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,186 @@
|
|
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
|
+
|
10
|
+
describe ActiveFedora::Model do
|
11
|
+
|
12
|
+
before(:all) do
|
13
|
+
module SpecModel
|
14
|
+
class Basic
|
15
|
+
include ActiveFedora::Model
|
16
|
+
end
|
17
|
+
end
|
18
|
+
@test_property = ActiveFedora::Property.new("foo_model","test_property", :text)
|
19
|
+
end
|
20
|
+
|
21
|
+
before(:each) do
|
22
|
+
Fedora::Repository.instance.stubs(:nextid).returns('_nextid_')
|
23
|
+
@test_instance = SpecModel::Basic.new
|
24
|
+
@property = stub("myproperty", :name => "mock_prop", :instance_variable_name => "@mock_prop")
|
25
|
+
SpecModel::Basic.extend(ActiveFedora::Model)
|
26
|
+
SpecModel::Basic.create_property_getter(@property)
|
27
|
+
@obj = SpecModel::Basic.new
|
28
|
+
end
|
29
|
+
|
30
|
+
after(:all) do
|
31
|
+
#Object.send(:remove_const, :SpecModel)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should provide #attribute_set and #attribute_get' do
|
35
|
+
SpecModel::Basic.should respond_to(:attribute_set)
|
36
|
+
SpecModel::Basic.should respond_to(:attribute_get)
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "#attribute_set" do
|
40
|
+
it "should look up the property's ivar name from properties hash" do
|
41
|
+
pending
|
42
|
+
SpecModel::Basic.expects(:properties).with(@test_property.name)
|
43
|
+
SpecModel::Basic.expects(:set_instance_variable).with(@test_property.instance_variable_name, "new value")
|
44
|
+
SpecModel::Basic.attribute_set(@test_property.name, "new value")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "#attribute_get" do
|
49
|
+
it "should look up the property's ivar name from properties hash" do
|
50
|
+
pending
|
51
|
+
SpecModel::Basic.expects(:properties).with(@test_property.name)
|
52
|
+
SpecModel::Basic.expects(:get_instance_variable).with(@test_property.instance_variable_name)
|
53
|
+
SpecModel::Basic.attribute_get(@test_property.name, "new value")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should provide #create_property_getter' do
|
58
|
+
SpecModel::Basic.should respond_to(:create_property_getter)
|
59
|
+
end
|
60
|
+
|
61
|
+
describe '#create_property_getter' do
|
62
|
+
it 'should add getter to the model' do
|
63
|
+
@obj.should respond_to(@property.name)
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should use attribute_get in custom getter method' do
|
67
|
+
@obj.expects(:attribute_get).with(@property.name)
|
68
|
+
@obj.send @property.name
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'should provide #create_property_setter' do
|
74
|
+
SpecModel::Basic.should respond_to(:create_property_setter)
|
75
|
+
end
|
76
|
+
|
77
|
+
describe '#create_property_setter' do
|
78
|
+
|
79
|
+
before(:each) do
|
80
|
+
@property = stub("myproperty", :name => "mock_prop", :instance_variable_name => "@mock_prop")
|
81
|
+
SpecModel::Basic.create_property_setter(@property)
|
82
|
+
@obj = SpecModel::Basic.new
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'should add setter to the model' do
|
86
|
+
@obj.should respond_to("#{@property.name}=")
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'should use attribute_set in custom setter method' do
|
90
|
+
@obj.expects(:attribute_set).with(@property.name, "sample value")
|
91
|
+
@obj.send "#{@property.name}=", "sample value"
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'should provide #find' do
|
97
|
+
SpecModel::Basic.should respond_to(:find)
|
98
|
+
end
|
99
|
+
|
100
|
+
describe '#find' do
|
101
|
+
|
102
|
+
it "(:all) should query solr for all objects with :active_fedora_model_s of self.class" do
|
103
|
+
mock_solr = mock("SolrConnection")
|
104
|
+
mock_result = mock("MockResult")
|
105
|
+
mock_result.expects(:hits).returns([{"id" => "changeme:30"}, {"id" => "changeme:22"}])
|
106
|
+
mock_solr.expects(:query).with('active_fedora_model_s:SpecModel\:\:Basic').returns(mock_result)
|
107
|
+
ActiveFedora::SolrService.expects(:instance).returns(mock("SolrService", :conn => mock_solr))
|
108
|
+
Fedora::Repository.instance.expects(:find_model).with("changeme:30", SpecModel::Basic).returns("Fake Object")
|
109
|
+
Fedora::Repository.instance.expects(:find_model).with("changeme:22", SpecModel::Basic).returns("Fake Object")
|
110
|
+
SpecModel::Basic.find(:all)
|
111
|
+
end
|
112
|
+
|
113
|
+
it "(String) should query solr for an object with the given id and return that object" do
|
114
|
+
mock_solr = mock("SolrConnection")
|
115
|
+
mock_result = mock("MockResult")
|
116
|
+
mock_result.expects(:hits).returns([{"id" => "changeme:30"}])
|
117
|
+
mock_solr.expects(:query).with('id:changeme\:30').returns(mock_result)
|
118
|
+
ActiveFedora::SolrService.expects(:instance).returns(mock("SolrService", :conn => mock_solr))
|
119
|
+
Fedora::Repository.instance.expects(:find_model).with("changeme:30", SpecModel::Basic).returns("Fake Object")
|
120
|
+
|
121
|
+
SpecModel::Basic.find("changeme:30").should == "Fake Object"
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'should not call #new' do
|
125
|
+
mock_solr = mock("SolrConnection")
|
126
|
+
mock_result = mock("MockResult")
|
127
|
+
mock_result.expects(:hits).returns([{"id" => "changeme:30"}])
|
128
|
+
mock_solr.expects(:query).with('id:changeme\:30').returns(mock_result)
|
129
|
+
Fedora::Repository.instance.expects(:find_model).with("changeme:30", SpecModel::Basic).returns("fake object")
|
130
|
+
|
131
|
+
ActiveFedora::SolrService.expects(:instance).returns(mock("SolrService", :conn => mock_solr))
|
132
|
+
|
133
|
+
res = SpecModel::Basic.find("changeme:30")
|
134
|
+
end
|
135
|
+
|
136
|
+
describe"(:pid => xxx)" do
|
137
|
+
it "should pull the inner object from fedora if it already exists in fedora" do
|
138
|
+
pending
|
139
|
+
Fedora::Repository.instance.expects(:save).never
|
140
|
+
mock_obj = mock("Fedora Object")
|
141
|
+
Fedora::Repository.instance.expects(:find_objects).returns([mock_obj])
|
142
|
+
ActiveFedora::Base.new(:pid=>"test:1").inner_object.should equal(mock_obj)
|
143
|
+
end
|
144
|
+
it "should save the inner_object to fedora if it does not already exist" do
|
145
|
+
pending
|
146
|
+
Fedora::Repository.instance.expects(:save)
|
147
|
+
Fedora::Repository.instance.expects(:find_objects).returns([])
|
148
|
+
ActiveFedora::Base.new(:pid=>"test:1")
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
|
155
|
+
it 'should provide #find_by_solr' do
|
156
|
+
SpecModel::Basic.should respond_to(:find)
|
157
|
+
end
|
158
|
+
|
159
|
+
describe '#find_by_solr' do
|
160
|
+
it "(:all) should query solr for all objects with :active_fedora_model_s of self.class and return a Solr result" do
|
161
|
+
mock_solr = mock("SolrConnection")
|
162
|
+
mock_response = mock("SolrResponse")
|
163
|
+
mock_solr.expects(:query).with('active_fedora_model_s:SpecModel\:\:Basic', {}).returns(mock_response)
|
164
|
+
ActiveFedora::SolrService.expects(:instance).returns(mock("SolrService", :conn => mock_solr))
|
165
|
+
|
166
|
+
SpecModel::Basic.find_by_solr(:all).should equal(mock_response)
|
167
|
+
end
|
168
|
+
it "(String) should query solr for an object with the given id and return the Solr Result" do
|
169
|
+
mock_solr = mock("SolrConnection")
|
170
|
+
mock_response = mock("SolrResponse")
|
171
|
+
mock_solr.expects(:query).with('id:changeme\:30', {}).returns(mock_response)
|
172
|
+
ActiveFedora::SolrService.expects(:instance).returns(mock("SolrService", :conn => mock_solr))
|
173
|
+
|
174
|
+
SpecModel::Basic.find_by_solr("changeme:30").should equal(mock_response)
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
describe "load_instance" do
|
179
|
+
it "should use Repository.find_model to instantiate an object" do
|
180
|
+
mock_repo = mock("repo")
|
181
|
+
mock_repo.expects(:find_model).with("_PID_", SpecModel::Basic)
|
182
|
+
Fedora::Repository.expects(:instance).returns(mock_repo)
|
183
|
+
SpecModel::Basic.load_instance("_PID_")
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), "../spec_helper" )
|
2
|
+
|
3
|
+
require 'active_fedora'
|
4
|
+
require 'active_fedora/model'
|
5
|
+
require 'mocha'
|
6
|
+
include Mocha::Standalone
|
7
|
+
|
8
|
+
describe ActiveFedora::Property do
|
9
|
+
|
10
|
+
before(:all) do
|
11
|
+
@test_property = ActiveFedora::Property.new(stub("model_stub"),"file_name", :string)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should provide .new' do
|
15
|
+
ActiveFedora::Property.should respond_to(:new)
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '.new' do
|
19
|
+
|
20
|
+
it 'should use assertions to check types of incoming args'
|
21
|
+
|
22
|
+
# This could rely on property_set and in turn serialize to a 'properties' metadata datastream...
|
23
|
+
it 'should add corresponding field to the properties datastream'
|
24
|
+
|
25
|
+
it 'should add field to repository indexer (ie. solr)'
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should provide .name' do
|
29
|
+
ActiveFedora::Property.should respond_to(:name)
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '.name' do
|
33
|
+
it 'should return the value of the name attribute' do
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should provide .instance_variable_name' do
|
39
|
+
#ActiveFedora::Property.should respond_to(:instance_variable_name)
|
40
|
+
|
41
|
+
@test_property.should respond_to(:instance_variable_name)
|
42
|
+
end
|
43
|
+
|
44
|
+
describe '.instance_variable_name' do
|
45
|
+
it 'should return the value of the name attribute with an @ appended' do
|
46
|
+
@test_property.instance_variable_name.should eql("@#{@test_property.name}")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,177 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), "../spec_helper" )
|
2
|
+
|
3
|
+
require 'active_fedora'
|
4
|
+
require 'xmlsimple'
|
5
|
+
|
6
|
+
describe ActiveFedora::QualifiedDublinCoreDatastream do
|
7
|
+
|
8
|
+
before(:all) do
|
9
|
+
# Load Sample OralHistory Model
|
10
|
+
require File.join( File.dirname(__FILE__), "..", "samples","oral_history_sample_model" )
|
11
|
+
@dc_elements = [:contributor, :coverage, :creator, :date, :description, :format, :identifier, :language, :publisher, :relation, :rights, :source]
|
12
|
+
@dc_terms = []
|
13
|
+
end
|
14
|
+
|
15
|
+
before(:each) do
|
16
|
+
Fedora::Repository.instance.stubs(:nextid).returns("_nextid_")
|
17
|
+
@test_ds = ActiveFedora::QualifiedDublinCoreDatastream.new
|
18
|
+
end
|
19
|
+
it "from_xml should parse everything correctly" do
|
20
|
+
#originally just tested that lcsh encoding and stuff worked, but the other stuff is worth testing
|
21
|
+
mockr= mock('repo')
|
22
|
+
mockr.expects(:nextid).returns("meh:leh")
|
23
|
+
Fedora::Repository.stubs(:instance).returns(mockr)
|
24
|
+
tmpl = OralHistorySampleModel.new.datastreams['dublin_core']
|
25
|
+
|
26
|
+
tmpl.expects(:subject_append).with('sh1')
|
27
|
+
tmpl.expects(:subject_append).with('sh2')
|
28
|
+
tmpl.expects(:subject_append).with('kw2')
|
29
|
+
tmpl.expects(:subject_append).with('kw1')
|
30
|
+
tmpl.expects(:spatial_append).with('sp1')
|
31
|
+
tmpl.expects(:spatial_append).with('sp2')
|
32
|
+
tmpl.expects(:language_append).with('English')
|
33
|
+
tmpl.expects(:alternative_append).with('alt')
|
34
|
+
tmpl.expects(:title_append).with('title')
|
35
|
+
tmpl.expects(:temporal_append).with('tmp')
|
36
|
+
tmpl.expects(:extent_append).with('extent')
|
37
|
+
tmpl.expects(:medium_append).with('medium')
|
38
|
+
tmpl.expects(:format_append).with('audio/x-wav')
|
39
|
+
tmpl.expects(:subject_heading_append).with('sh1')
|
40
|
+
tmpl.expects(:subject_heading_append).with('sh2')
|
41
|
+
tmpl.expects(:creator_append).with('creator')
|
42
|
+
tmpl.expects(:type_append).with('sound')
|
43
|
+
tmpl.expects(:rights_append).with('rights')
|
44
|
+
tmpl.expects(:publisher_append).with('jwa')
|
45
|
+
tmpl.expects(:description_append).with('desc')
|
46
|
+
|
47
|
+
sample = File.join(File.dirname(__FILE__), '../samples/oh_qdc.xml')
|
48
|
+
z = ActiveFedora::QualifiedDublinCoreDatastream.from_xml(tmpl, REXML::Document.new(File.open(sample)).root.elements.first)
|
49
|
+
z.should === tmpl
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should create the right number of fields" do
|
53
|
+
ActiveFedora::QualifiedDublinCoreDatastream::DCTERMS.size.should == 65
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should have unmodifiable constants" do
|
57
|
+
proc {ActiveFedora::QualifiedDublinCoreDatastream::DCTERMS<<:foo}.should raise_error(TypeError, 'can\'t modify frozen array')
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should have identity in and out" do
|
62
|
+
sample = File.join(File.dirname(__FILE__), '../samples/oh_qdc.xml')
|
63
|
+
tmpl = OralHistorySampleModel.new.datastreams['dublin_core']
|
64
|
+
z = ActiveFedora::QualifiedDublinCoreDatastream.from_xml(tmpl, REXML::Document.new(File.open(sample)).root.elements.first)
|
65
|
+
y = ActiveFedora::QualifiedDublinCoreDatastream.from_xml(tmpl, REXML::Document.new(z.to_dc_xml))
|
66
|
+
y.to_dc_xml.should == z.to_dc_xml
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should handle arbitrary attribs" do
|
70
|
+
tmpl = OralHistorySampleModel.new.datastreams['dublin_core']
|
71
|
+
tmpl.field :mycomplicated, :string, :xml_node=>'alt', :element_attrs=>{:foo=>'bar'}
|
72
|
+
tmpl.mycomplicated_values='fubar'
|
73
|
+
tmpl.to_dc_xml.should == '<dc xmlns:xsi=\'http://www.w3.org/2001/XMLSchema-instance\' xmlns:dcterms=\'http://purl.org/dc/terms/\'><dcterms:alt foo=\'bar\'>fubar</dcterms:alt></dc>'
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
it "should parse dcterms and dcelements from xml" do
|
80
|
+
doc = REXML::Document.new(File.open(File.dirname(__FILE__)+'/../fixtures/changeme155.xml'), :force_array=>true)
|
81
|
+
stream = doc.elements['//foxml:datastream[@ID=\'dublin_core\']']
|
82
|
+
n = ActiveFedora::QualifiedDublinCoreDatastream.from_xml(ActiveFedora::QualifiedDublinCoreDatastream.new, stream)
|
83
|
+
n.spatial_values.should == ["Boston [7013445]", "Dorchester [7013575]", "Roxbury [7015002]"]
|
84
|
+
n.title_values.should == ["Oral history with Frances Addelson, 1997 November 14"]
|
85
|
+
n.dirty?.should == false
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
it "should default dc elements to :multiple=>true" do
|
91
|
+
@test_ds.fields.values.each do |s|
|
92
|
+
s.has_key?(:multiple).should == true
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
after(:each) do
|
97
|
+
end
|
98
|
+
|
99
|
+
describe '#new' do
|
100
|
+
it 'should provide #new' do
|
101
|
+
ActiveFedora::QualifiedDublinCoreDatastream.should respond_to(:new)
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'should initialize an object with fields for all DC elements' do
|
105
|
+
@dc_elements.each do |el|
|
106
|
+
@test_ds.fields.should_not be_nil
|
107
|
+
@test_ds.fields.should have_key("#{el.to_s}".to_sym)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'should respond to getters and setters for all DC elements' do
|
112
|
+
@dc_elements.each do |el|
|
113
|
+
@test_ds.should respond_to("#{el.to_s}_values")
|
114
|
+
@test_ds.should respond_to("#{el.to_s}_values=")
|
115
|
+
eval("@test_ds.#{el.to_s}_values").class.should == Array
|
116
|
+
eval("@test_ds.#{el.to_s}_values = ['test_value']").should == ['test_value']
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
describe '.set_blob_for_save' do
|
123
|
+
it "should call .blob= with to_dc_xml" do
|
124
|
+
@test_ds.expects(:blob=).with(@test_ds.to_dc_xml)
|
125
|
+
@test_ds.set_blob_for_save
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
describe '.to_dc_xml' do
|
130
|
+
|
131
|
+
it 'should respond to .to_dc_xml' do
|
132
|
+
@test_ds.should respond_to(:to_dc_xml)
|
133
|
+
end
|
134
|
+
|
135
|
+
|
136
|
+
#
|
137
|
+
# I think the fields should just be tracked as a REXML::Document internally. Too much BS otherwise.
|
138
|
+
#
|
139
|
+
|
140
|
+
|
141
|
+
it 'should output the fields hash as Qualified Dublin Core XML' do
|
142
|
+
sample_xml = "<dc xmlns:dcterms='http://purl.org/dc/terms/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><dcterms:title>title1</dcterms:title><dcterms:publisher>publisher1</dcterms:publisher><dcterms:creator>creator1</dcterms:creator><dcterms:creator>creator2</dcterms:creator></dc>"
|
143
|
+
#@test_ds.expects(:fields).returns({:publisher => ["publisher1"], :creator => ["creator1", "creator2"], :title => ["title1"]})
|
144
|
+
@test_ds.publisher_values = ["publisher1"]
|
145
|
+
@test_ds.creator_values = ["creator1", "creator2"]
|
146
|
+
@test_ds.title_values = ["title1"]
|
147
|
+
|
148
|
+
dc_xml = XmlSimple.xml_in(@test_ds.to_dc_xml)
|
149
|
+
dc_xml.should == XmlSimple.xml_in(sample_xml)
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'should not include :type information' do
|
153
|
+
@test_ds.publisher_values = ["publisher1"]
|
154
|
+
dc_xml = XmlSimple.xml_in(@test_ds.to_dc_xml)
|
155
|
+
@test_ds.fields[:publisher].should have_key(:type)
|
156
|
+
dc_xml["publisher"].should_not include("type")
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should use specified :xml_node if it is available in the field Hash" do
|
160
|
+
@test_ds.stubs(:fields).returns({:myfieldname => {:values => ["sample spatial coverage"], :xml_node => "nodename" }})
|
161
|
+
REXML::Document.new(@test_ds.to_dc_xml).elements['./dc/dcterms:nodename'].text.should == 'sample spatial coverage'
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should use specified :xml_node if it was specified when .field was called" do
|
165
|
+
sample_xml = "<dc xmlns:dcterms='http://purl.org/dc/terms/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><dcterms:nodename>sample spatial coverage</dcterms:nodename></dc>"
|
166
|
+
@test_ds.field :myfieldname, :string, :xml_node => "nodename"
|
167
|
+
@test_ds.myfieldname_values = "sample spatial coverage"
|
168
|
+
dc_xml = XmlSimple.xml_in(@test_ds.to_dc_xml)
|
169
|
+
dc_xml.should == XmlSimple.xml_in(sample_xml)
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should only apply encoding info and other qualifiers to the nodes that explicitly declare it" do
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
|
177
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), "../spec_helper" )
|
2
|
+
|
3
|
+
require 'active_fedora'
|
4
|
+
require "rexml/document"
|
5
|
+
require 'mocha'
|
6
|
+
|
7
|
+
include Mocha::Standalone
|
8
|
+
|
9
|
+
describe ActiveFedora::Relationship do
|
10
|
+
|
11
|
+
%/
|
12
|
+
module ModelSpec
|
13
|
+
class AudioRecord
|
14
|
+
include ActiveFedora::Model
|
15
|
+
|
16
|
+
relationship "parents", :is_part_of, [nil, :oral_history]
|
17
|
+
end
|
18
|
+
|
19
|
+
class OralHistory
|
20
|
+
include ActiveFedora::Model
|
21
|
+
|
22
|
+
relationship "parts", :is_part_of, [:audio_record], :inbound => true
|
23
|
+
end
|
24
|
+
/%
|
25
|
+
before(:each) do
|
26
|
+
@test_relationship = ActiveFedora::Relationship.new
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should provide #new" do
|
30
|
+
ActiveFedora::Relationship.should respond_to(:new)
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "#new" do
|
34
|
+
test_relationship = ActiveFedora::Relationship.new(:subject => "demo:5", :predicate => "isMemberOf", :object => "demo:10")
|
35
|
+
|
36
|
+
test_relationship.subject.should == "info:fedora/demo:5"
|
37
|
+
test_relationship.predicate.should == "isMemberOf"
|
38
|
+
test_relationship.object.should == "info:fedora/demo:10"
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "#subject=" do
|
42
|
+
it "should turn strings into fedora URIs" do
|
43
|
+
@test_relationship.subject = "demo:6"
|
44
|
+
@test_relationship.subject.should == "info:fedora/demo:6"
|
45
|
+
@test_relationship.subject = "info:fedora/demo:7"
|
46
|
+
@test_relationship.subject.should == "info:fedora/demo:7"
|
47
|
+
end
|
48
|
+
it "should use the pid of the passed object if it responds to #pid" do
|
49
|
+
mock_fedora_object = stub("mock_fedora_object", :pid => "demo:stub_pid")
|
50
|
+
@test_relationship.subject = mock_fedora_object
|
51
|
+
@test_relationship.subject.should == "info:fedora/#{mock_fedora_object.pid}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "#object=" do
|
56
|
+
it "should turn strings into Fedora URIs" do
|
57
|
+
@test_relationship.object = "demo:11"
|
58
|
+
@test_relationship.object.should == "info:fedora/demo:11"
|
59
|
+
end
|
60
|
+
it "should use the pid of the passed object if it responds to #pid" do
|
61
|
+
mock_fedora_object = stub("mock_fedora_object", :pid => "demo:stub_pid")
|
62
|
+
@test_relationship.object = mock_fedora_object
|
63
|
+
@test_relationship.object.should == "info:fedora/#{mock_fedora_object.pid}"
|
64
|
+
end end
|
65
|
+
|
66
|
+
describe "#predicate=" do
|
67
|
+
it "should default to setting the argument itself as the new subject" do
|
68
|
+
@test_relationship.predicate = "isComponentOf"
|
69
|
+
@test_relationship.predicate.should == "isComponentOf"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "#to_hash" do
|
74
|
+
it "should return a hash of structure {subject => {predicate => [object]}}"
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|