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.
Files changed (246) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/.hg/00changelog.i +0 -0
  4. data/.hg/branch +1 -0
  5. data/.hg/branch.cache +2 -0
  6. data/.hg/dirstate +0 -0
  7. data/.hg/hgrc +2 -0
  8. data/.hg/requires +2 -0
  9. data/.hg/store/00changelog.i +0 -0
  10. data/.hg/store/00manifest.i +0 -0
  11. data/.hg/store/data/.hgignore.i +0 -0
  12. data/.hg/store/data/.hgtags.i +0 -0
  13. data/.hg/store/data/_c_o_p_y_i_n_g.txt.i +0 -0
  14. data/.hg/store/data/_c_o_y_i_n_g._l_e_s_s_e_r.txt.i +0 -0
  15. data/.hg/store/data/_history.txt.i +0 -0
  16. data/.hg/store/data/_license.txt.i +0 -0
  17. data/.hg/store/data/_manifest.txt.i +0 -0
  18. data/.hg/store/data/_post_install.txt.i +0 -0
  19. data/.hg/store/data/_r_e_a_d_m_e.rdoc.i +0 -0
  20. data/.hg/store/data/_r_e_a_d_m_e.txt.i +0 -0
  21. data/.hg/store/data/_rakefile.i +0 -0
  22. data/.hg/store/data/_v_e_r_s_i_o_n.i +0 -0
  23. data/.hg/store/data/active-fedora.gemspec.i +0 -0
  24. data/.hg/store/data/active__fedora/_history.txt.i +0 -0
  25. data/.hg/store/data/active__fedora/_manifest.txt.i +0 -0
  26. data/.hg/store/data/active__fedora/_post_install.txt.i +0 -0
  27. data/.hg/store/data/active__fedora/_r_e_a_d_m_e.rdoc.i +0 -0
  28. data/.hg/store/data/active__fedora/_rakefile.i +0 -0
  29. data/.hg/store/data/active__fedora/lib/active__fedora.rb.i +0 -0
  30. data/.hg/store/data/active__fedora/script/console.i +0 -0
  31. data/.hg/store/data/active__fedora/script/destroy.i +0 -0
  32. data/.hg/store/data/active__fedora/script/generate.i +0 -0
  33. data/.hg/store/data/active__fedora/spec/active__fedora__spec.rb.i +0 -0
  34. data/.hg/store/data/active__fedora/spec/spec__helper.rb.i +0 -0
  35. data/.hg/store/data/config/fedora.yml.i +0 -0
  36. data/.hg/store/data/config/solr__mappings.yml.i +0 -0
  37. data/.hg/store/data/config/solr__mappings__af__0.1.yml.i +0 -0
  38. data/.hg/store/data/config/solr__mappings__bl__2.4.yml.i +0 -0
  39. data/.hg/store/data/lib/active-fedora.rb.i +0 -0
  40. data/.hg/store/data/lib/active__fedora.rb.i +0 -0
  41. data/.hg/store/data/lib/active__fedora/base.rb.i +0 -0
  42. data/.hg/store/data/lib/active__fedora/content__model.rb.i +0 -0
  43. data/.hg/store/data/lib/active__fedora/datastream.rb.i +0 -0
  44. data/.hg/store/data/lib/active__fedora/fedora__object.rb.i +0 -0
  45. data/.hg/store/data/lib/active__fedora/metadata__datastream.rb.i +0 -0
  46. data/.hg/store/data/lib/active__fedora/model.rb.i +0 -0
  47. data/.hg/store/data/lib/active__fedora/property.rb.i +0 -0
  48. data/.hg/store/data/lib/active__fedora/qualified__dublin__core__datastream.rb.i +0 -0
  49. data/.hg/store/data/lib/active__fedora/relationship.rb.i +0 -0
  50. data/.hg/store/data/lib/active__fedora/rels__ext__datastream.rb.i +0 -0
  51. data/.hg/store/data/lib/active__fedora/semantic__node.rb.i +0 -0
  52. data/.hg/store/data/lib/active__fedora/solr__mapper.rb.i +0 -0
  53. data/.hg/store/data/lib/active__fedora/solr__service.rb.i +0 -0
  54. data/.hg/store/data/lib/fedora/base.rb.i +0 -0
  55. data/.hg/store/data/lib/fedora/connection.rb.i +0 -0
  56. data/.hg/store/data/lib/fedora/datastream.rb.i +0 -0
  57. data/.hg/store/data/lib/fedora/fedora__object.rb.i +0 -0
  58. data/.hg/store/data/lib/fedora/formats.rb.i +0 -0
  59. data/.hg/store/data/lib/fedora/generic__search.rb.i +0 -0
  60. data/.hg/store/data/lib/fedora/repository.rb.i +0 -0
  61. data/.hg/store/data/lib/ruby-fedora.rb.i +0 -0
  62. data/.hg/store/data/lib/util/class__level__inheritable__attributes.rb.i +0 -0
  63. data/.hg/store/data/script/console.i +0 -0
  64. data/.hg/store/data/script/destroy.i +0 -0
  65. data/.hg/store/data/script/generate.i +0 -0
  66. data/.hg/store/data/solr/config/schema-1.5.xml.i +0 -0
  67. data/.hg/store/data/solr/config/schema.xml.i +0 -0
  68. data/.hg/store/data/solr/config/solrconfig-1.5.xml.i +0 -0
  69. data/.hg/store/data/spec/fixtures/changeme155.xml.i +0 -0
  70. data/.hg/store/data/spec/fixtures/dino.jpg.i +0 -0
  71. data/.hg/store/data/spec/fixtures/minivan.jpg.d +0 -0
  72. data/.hg/store/data/spec/fixtures/minivan.jpg.i +0 -0
  73. data/.hg/store/data/spec/fixtures/test__12.foxml.xml.i +0 -0
  74. data/.hg/store/data/spec/integration/active__fedora/base__spec.rb.i +0 -0
  75. data/.hg/store/data/spec/integration/active__fedora/datastream__spec.rb.i +0 -0
  76. data/.hg/store/data/spec/integration/active__fedora/fedora__object__spec.rb.i +0 -0
  77. data/.hg/store/data/spec/integration/active__fedora/full__featured__model__spec.rb.i +0 -0
  78. data/.hg/store/data/spec/integration/active__fedora/model__spec.rb.i +0 -0
  79. data/.hg/store/data/spec/integration/active__fedora/rels__ext__datastream__spec.rb.i +0 -0
  80. data/.hg/store/data/spec/integration/active__fedora/semantic__node__spec.rb.i +0 -0
  81. data/.hg/store/data/spec/integration/base__file__management__spec.rb.i +0 -0
  82. data/.hg/store/data/spec/integration/base__spec.rb.i +0 -0
  83. data/.hg/store/data/spec/integration/bug__spec.rb.i +0 -0
  84. data/.hg/store/data/spec/integration/datastream__spec.rb.i +0 -0
  85. data/.hg/store/data/spec/integration/datastreams__crud__spec.rb.i +0 -0
  86. data/.hg/store/data/spec/integration/fedora__object__spec.rb.i +0 -0
  87. data/.hg/store/data/spec/integration/full__featured__model__spec.rb.i +0 -0
  88. data/.hg/store/data/spec/integration/model__spec.rb.i +0 -0
  89. data/.hg/store/data/spec/integration/rels__ext__datastream__spec.rb.i +0 -0
  90. data/.hg/store/data/spec/integration/repository__spec.rb.i +0 -0
  91. data/.hg/store/data/spec/integration/rf__fedora__object__spec.rb.i +0 -0
  92. data/.hg/store/data/spec/integration/semantic__node__spec.rb.i +0 -0
  93. data/.hg/store/data/spec/integration/solr__service__spec.rb.i +0 -0
  94. data/.hg/store/data/spec/samples/models/audio__record.rb.i +0 -0
  95. data/.hg/store/data/spec/samples/models/image.rb.i +0 -0
  96. data/.hg/store/data/spec/samples/models/oral__history.rb.i +0 -0
  97. data/.hg/store/data/spec/samples/models/seminar.rb.i +0 -0
  98. data/.hg/store/data/spec/samples/models/seminar__audio__file.rb.i +0 -0
  99. data/.hg/store/data/spec/samples/oh__qdc.xml.i +0 -0
  100. data/.hg/store/data/spec/samples/oral__history.rb.i +0 -0
  101. data/.hg/store/data/spec/samples/oral__history__sample.xml.i +0 -0
  102. data/.hg/store/data/spec/samples/oral__history__sample__model.rb.i +0 -0
  103. data/.hg/store/data/spec/samples/oral__history__xml.xml.i +0 -0
  104. data/.hg/store/data/spec/spec.opts.i +0 -0
  105. data/.hg/store/data/spec/spec__helper.rb.i +0 -0
  106. data/.hg/store/data/spec/unit/active__fedora/base__cma__spec.rb.i +0 -0
  107. data/.hg/store/data/spec/unit/active__fedora/base__extra__spec.rb.i +0 -0
  108. data/.hg/store/data/spec/unit/active__fedora/base__spec.rb.i +0 -0
  109. data/.hg/store/data/spec/unit/active__fedora/content__model__spec.rb.i +0 -0
  110. data/.hg/store/data/spec/unit/active__fedora/datastream__spec.rb.i +0 -0
  111. data/.hg/store/data/spec/unit/active__fedora/inheritance__spec.rb.i +0 -0
  112. data/.hg/store/data/spec/unit/active__fedora/metadata__datastream__spec.rb.i +0 -0
  113. data/.hg/store/data/spec/unit/active__fedora/model__spec.rb.i +0 -0
  114. data/.hg/store/data/spec/unit/active__fedora/property__spec.rb.i +0 -0
  115. data/.hg/store/data/spec/unit/active__fedora/qualified__dublin__core__datastream__spec.rb.i +0 -0
  116. data/.hg/store/data/spec/unit/active__fedora/relationship__spec.rb.i +0 -0
  117. data/.hg/store/data/spec/unit/active__fedora/rels__ext__datastream__spec.rb.i +0 -0
  118. data/.hg/store/data/spec/unit/active__fedora/semantic__node__spec.rb.i +0 -0
  119. data/.hg/store/data/spec/unit/active__fedora/solr__service__spec.rb.i +0 -0
  120. data/.hg/store/data/spec/unit/active__fedora__spec.rb.i +0 -0
  121. data/.hg/store/data/spec/unit/base__cma__spec.rb.i +0 -0
  122. data/.hg/store/data/spec/unit/base__datastream__management__spec.rb.i +0 -0
  123. data/.hg/store/data/spec/unit/base__extra__spec.rb.i +0 -0
  124. data/.hg/store/data/spec/unit/base__file__management__spec.rb.i +0 -0
  125. data/.hg/store/data/spec/unit/base__loader__spec.rb.i +0 -0
  126. data/.hg/store/data/spec/unit/base__spec.rb.i +0 -0
  127. data/.hg/store/data/spec/unit/connection__spec.rb.i +0 -0
  128. data/.hg/store/data/spec/unit/content__model__spec.rb.i +0 -0
  129. data/.hg/store/data/spec/unit/datastream__concurrency__spec.rb.i +0 -0
  130. data/.hg/store/data/spec/unit/datastream__spec.rb.i +0 -0
  131. data/.hg/store/data/spec/unit/fedora__object__spec.rb.i +0 -0
  132. data/.hg/store/data/spec/unit/inheritance__spec.rb.i +0 -0
  133. data/.hg/store/data/spec/unit/metadata__datastream__spec.rb.i +0 -0
  134. data/.hg/store/data/spec/unit/model__spec.rb.i +0 -0
  135. data/.hg/store/data/spec/unit/property__spec.rb.i +0 -0
  136. data/.hg/store/data/spec/unit/qualified__dublin__core__datastream__spec.rb.i +0 -0
  137. data/.hg/store/data/spec/unit/relationship__spec.rb.i +0 -0
  138. data/.hg/store/data/spec/unit/rels__ext__datastream__spec.rb.i +0 -0
  139. data/.hg/store/data/spec/unit/repository__spec.rb.i +0 -0
  140. data/.hg/store/data/spec/unit/rf__datastream__spec.rb.i +0 -0
  141. data/.hg/store/data/spec/unit/semantic__node__spec.rb.i +0 -0
  142. data/.hg/store/data/spec/unit/solr__config__options__spec.rb.i +0 -0
  143. data/.hg/store/data/spec/unit/solr__mapper__spec.rb.i +0 -0
  144. data/.hg/store/data/spec/unit/solr__service__spec.rb.i +0 -0
  145. data/.hg/store/data/tasks/rspec.rake.i +0 -0
  146. data/.hg/store/undo +0 -0
  147. data/.hg/undo.branch +1 -0
  148. data/.hg/undo.dirstate +0 -0
  149. data/.hgignore +7 -0
  150. data/.hgtags +14 -0
  151. data/COPYING.txt +674 -0
  152. data/COYING.LESSER.txt +165 -0
  153. data/History.txt +34 -0
  154. data/LICENSE +20 -0
  155. data/License.txt +58 -0
  156. data/Manifest.txt +1 -1
  157. data/README.rdoc +13 -54
  158. data/README.txt +59 -0
  159. data/Rakefile +35 -0
  160. data/VERSION +1 -0
  161. data/active-fedora.gemspec +359 -0
  162. data/config/fedora.yml +16 -0
  163. data/config/solr_mappings.yml +14 -0
  164. data/config/solr_mappings_af_0.1.yml +16 -0
  165. data/config/solr_mappings_bl_2.4.yml +14 -0
  166. data/lib/active_fedora.rb +66 -6
  167. data/lib/active_fedora/base.rb +59 -23
  168. data/lib/active_fedora/datastream.rb +1 -1
  169. data/lib/active_fedora/metadata_datastream.rb +14 -7
  170. data/lib/active_fedora/model.rb +4 -4
  171. data/lib/active_fedora/rels_ext_datastream.rb +1 -1
  172. data/lib/active_fedora/semantic_node.rb +4 -3
  173. data/lib/active_fedora/solr_mapper.rb +17 -0
  174. data/lib/active_fedora/solr_service.rb +44 -2
  175. data/lib/fedora/base.rb +38 -0
  176. data/lib/fedora/connection.rb +210 -0
  177. data/lib/fedora/datastream.rb +56 -0
  178. data/lib/fedora/fedora_object.rb +161 -0
  179. data/lib/fedora/formats.rb +30 -0
  180. data/lib/fedora/generic_search.rb +71 -0
  181. data/lib/fedora/repository.rb +287 -0
  182. data/lib/ruby-fedora.rb +20 -0
  183. data/lib/util/class_level_inheritable_attributes.rb +23 -0
  184. data/script/console +15 -0
  185. data/script/destroy +14 -0
  186. data/script/generate +14 -0
  187. data/solr/config/schema-1.5.xml +468 -0
  188. data/solr/config/schema.xml +174 -212
  189. data/solr/config/solrconfig-1.5.xml +1069 -0
  190. data/spec/active_fedora_spec.rb +7 -0
  191. data/spec/fixtures/changeme155.xml +255 -0
  192. data/spec/fixtures/dino.jpg +0 -0
  193. data/spec/fixtures/minivan.jpg +0 -0
  194. data/spec/fixtures/test_12.foxml.xml +121 -0
  195. data/spec/integration/base_file_management_spec.rb +20 -0
  196. data/spec/integration/base_spec.rb +196 -0
  197. data/spec/integration/bug_spec.rb +57 -0
  198. data/spec/integration/datastream_spec.rb +60 -0
  199. data/spec/integration/datastreams_crud_spec.rb +208 -0
  200. data/spec/integration/fedora_object_spec.rb +77 -0
  201. data/spec/integration/full_featured_model_spec.rb +207 -0
  202. data/spec/integration/model_spec.rb +54 -0
  203. data/spec/integration/rels_ext_datastream_spec.rb +67 -0
  204. data/spec/integration/repository_spec.rb +297 -0
  205. data/spec/integration/rf_fedora_object_spec.rb +95 -0
  206. data/spec/integration/semantic_node_spec.rb +95 -0
  207. data/spec/integration/solr_service_spec.rb +33 -0
  208. data/spec/samples/models/audio_record.rb +29 -0
  209. data/spec/samples/models/image.rb +5 -0
  210. data/spec/samples/models/oral_history.rb +50 -0
  211. data/spec/samples/models/seminar.rb +29 -0
  212. data/spec/samples/models/seminar_audio_file.rb +34 -0
  213. data/spec/samples/oh_qdc.xml +32 -0
  214. data/spec/samples/oral_history_sample.xml +38 -0
  215. data/spec/samples/oral_history_sample_model.rb +39 -0
  216. data/spec/samples/oral_history_xml.xml +35 -0
  217. data/spec/spec.opts +5 -0
  218. data/spec/spec_helper.rb +41 -0
  219. data/spec/unit/active_fedora_spec.rb +15 -0
  220. data/spec/unit/base_cma_spec.rb +25 -0
  221. data/spec/unit/base_datastream_management_spec.rb +119 -0
  222. data/spec/unit/base_extra_spec.rb +108 -0
  223. data/spec/unit/base_file_management_spec.rb +90 -0
  224. data/spec/unit/base_loader_spec.rb +43 -0
  225. data/spec/unit/base_spec.rb +584 -0
  226. data/spec/unit/connection_spec.rb +25 -0
  227. data/spec/unit/content_model_spec.rb +51 -0
  228. data/spec/unit/datastream_concurrency_spec.rb +59 -0
  229. data/spec/unit/datastream_spec.rb +85 -0
  230. data/spec/unit/fedora_object_spec.rb +66 -0
  231. data/spec/unit/inheritance_spec.rb +46 -0
  232. data/spec/unit/metadata_datastream_spec.rb +290 -0
  233. data/spec/unit/model_spec.rb +186 -0
  234. data/spec/unit/property_spec.rb +50 -0
  235. data/spec/unit/qualified_dublin_core_datastream_spec.rb +177 -0
  236. data/spec/unit/relationship_spec.rb +77 -0
  237. data/spec/unit/rels_ext_datastream_spec.rb +99 -0
  238. data/spec/unit/repository_spec.rb +136 -0
  239. data/spec/unit/rf_datastream_spec.rb +49 -0
  240. data/spec/unit/semantic_node_spec.rb +354 -0
  241. data/spec/unit/solr_config_options_spec.rb +98 -0
  242. data/spec/unit/solr_mapper_spec.rb +31 -0
  243. data/spec/unit/solr_service_spec.rb +83 -0
  244. data/tasks/hoe.rake +0 -0
  245. data/tasks/rspec.rake +29 -0
  246. metadata +373 -55
@@ -0,0 +1,25 @@
1
+ require File.join( File.dirname(__FILE__), "../spec_helper" )
2
+
3
+ require 'active_resource'
4
+ require 'fedora/repository'
5
+
6
+ describe Fedora::Connection do
7
+ it "should be creatable w/ a surrogate id" do
8
+ c = Fedora::Connection.new('http://127.0.0.1/fedora', 'fubar', 'bob')
9
+ c.site.to_s.should == "http://127.0.0.1/fedora"
10
+ c.format.should == 'fubar'
11
+ c.surrogate.should == 'bob'
12
+ end
13
+ it "should set a from header if surrogate defined." do
14
+ c = Fedora::Connection.new('http://127.0.0.1/fedora', ActiveResource::Formats[:xml], 'bob')
15
+ h = Hash.new
16
+ r= c.send(:build_request_headers,h)
17
+ r['From'].should == 'bob'
18
+ end
19
+ it "should not set a from header if surrogate undefined." do
20
+ c = Fedora::Connection.new('http://127.0.0.1/fedora' )
21
+ h = Hash.new
22
+ r= c.send(:build_request_headers,h)
23
+ r['From'].should be_nil
24
+ end
25
+ end
@@ -0,0 +1,51 @@
1
+ require File.join( File.dirname(__FILE__), "../spec_helper" )
2
+
3
+ require 'active_fedora'
4
+ require 'mocha'
5
+
6
+
7
+ describe ActiveFedora::ContentModel do
8
+
9
+ before(:each) do
10
+ Fedora::Repository.instance.stubs(:nextid).returns("_nextid_")
11
+ @test_cmodel = ActiveFedora::ContentModel.new
12
+ end
13
+
14
+ it "should provide #new" do
15
+ ActiveFedora::ContentModel.should respond_to(:new)
16
+ end
17
+
18
+ describe "#new" do
19
+ it "should create a kind of ActiveFedora::Base object" do
20
+ @test_cmodel.should be_kind_of(ActiveFedora::Base)
21
+ end
22
+ it "should set pid_suffix to empty string unless overriden in options hash" do
23
+ @test_cmodel.pid_suffix.should == ""
24
+ boo_model = ActiveFedora::ContentModel.new(:pid_suffix => "boo")
25
+ boo_model.pid_suffix.should == "boo"
26
+ end
27
+ it "should set namespace to cmodel unless overriden in options hash" do
28
+ @test_cmodel.namespace.should == "afmodel"
29
+ boo_model = ActiveFedora::ContentModel.new(:namespace => "boo")
30
+ boo_model.namespace.should == "boo"
31
+ end
32
+ end
33
+
34
+ it "should provide @pid_suffix" do
35
+ @test_cmodel.should respond_to(:pid_suffix)
36
+ @test_cmodel.should respond_to(:pid_suffix=)
37
+ end
38
+
39
+ it 'should provide #pid_from_ruby_class' do
40
+ ActiveFedora::ContentModel.should respond_to(:pid_from_ruby_class)
41
+ end
42
+
43
+ describe "#pid_from_ruby_class" do
44
+ it "should construct pids" do
45
+ ActiveFedora::ContentModel.pid_from_ruby_class(@test_cmodel.class).should == "afmodel:ActiveFedora_ContentModel"
46
+ ActiveFedora::ContentModel.pid_from_ruby_class(@test_cmodel.class, :namespace => "foo", :pid_suffix => "BarBar").should == "foo:ActiveFedora_ContentModelBarBar"
47
+ end
48
+ end
49
+
50
+
51
+ end
@@ -0,0 +1,59 @@
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::Datastream do
8
+
9
+ before(:each) do
10
+ Fedora::Repository.instance.expects(:nextid).returns("foo")
11
+ @test_object = ActiveFedora::Base.new
12
+ @test_datastream = ActiveFedora::Datastream.new(:pid=>@test_object.pid, :dsid=>'abcd', :blob=>StringIO.new("hi there"))
13
+ end
14
+
15
+ it "should provide #last_modified_in_repository" do
16
+ @test_datastream.should respond_to(:last_modified_in_repository)
17
+ end
18
+
19
+ it 'should update @last_modified when #save or #content is called' do
20
+ pending
21
+ Fedora::Repository.any_instance.stubs(:save)
22
+ Fedora::Repository.any_instance.stubs(:fetch_custom)
23
+ @test_datastream.expects(:last_modified=).times(2)
24
+ @test_datastream.expects(:last_modified_in_repository).times(3)
25
+ @test_datastream.save
26
+ @test_datastream.content
27
+ end
28
+
29
+ describe '#save' do
30
+ it 'should not save to fedora if @last_modified does not match the datetime from fedora'
31
+ it 'should save to fedora if @last_modified matches the datetime from fedora'
32
+ end
33
+
34
+ describe '#last_modified_in_repository' do
35
+ it "should retrieve a datetime from fedora"
36
+ end
37
+
38
+ it 'should provide #check_concurrency' do
39
+ @test_datastream.should respond_to(:check_concurrency)
40
+ end
41
+
42
+ describe '#check_concurrency' do
43
+ it 'should return true if @last_modified matches the datetime from fedora' do
44
+ pending
45
+ @test_datastream.expects(:last_modified_in_repository).returns("2008-10-17T00:17:18.194Z")
46
+ @test_datastream.last_modified = "2008-10-17T00:17:18.194Z"
47
+ @test_datastream.check_concurrency.should == true
48
+ end
49
+
50
+ it 'should raise an error if @last_modified does not match the datetime from fedora' do
51
+ pending
52
+ @test_datastream.expects(:last_modified_in_repository).returns("blah blah blah")
53
+ @test_datastream.last_modified = "2008-10-17T00:17:18.194Z"
54
+ @test_datastream.check_concurrency.should raise_error()
55
+ end
56
+
57
+ end
58
+
59
+ end
@@ -0,0 +1,85 @@
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::Datastream do
8
+
9
+ before(:each) do
10
+ Fedora::Repository.instance.expects(:nextid).returns("foo")
11
+ @test_object = ActiveFedora::Base.new
12
+ @test_datastream = ActiveFedora::Datastream.new(:pid=>@test_object.pid, :dsid=>'abcd', :blob=>StringIO.new("hi there"))
13
+ end
14
+
15
+ it "should implement delete" do
16
+ Fedora::Repository.instance.expects(:delete).with('foo/datastreams/abcd').returns(true).times(2)
17
+ @test_datastream.delete.should == true
18
+ ActiveFedora::Datastream.delete('foo', 'abcd').should == true
19
+ end
20
+
21
+ it "should set control_group" do
22
+ xml=<<-EOF
23
+ <?xml version="1.0" encoding="UTF-8"?>
24
+ <foxml:datastream xmlns:foxml="foo" ID="Addelson_Frances19971114_FINAL.doc" STATE="A" CONTROL_GROUP="M" VERSIONABLE="true">
25
+ <foxml:datastreamVersion ID="Addelson_Frances19971114_FINAL.doc.0" LABEL="Addelson_Frances19971114_FINAL.doc" CREATED="2008-11-19T18:18:46.631Z" MIMETYPE="application/msword">
26
+ <foxml:contentLocation TYPE="INTERNAL_ID" REF="changeme:551+Addelson_Frances19971114_FINAL.doc+Addelson_Frances19971114_FINAL.doc.0"/>
27
+ </foxml:datastreamVersion>
28
+ </foxml:datastream>
29
+ EOF
30
+ n = ActiveFedora::Datastream.from_xml(ActiveFedora::Datastream.new, REXML::Document.new(xml).elements.first)
31
+ n.control_group.should == 'M'
32
+
33
+ end
34
+
35
+ it "should escape dots in to_param" do
36
+ @test_datastream.stubs(:dsid).returns('foo.bar')
37
+ @test_datastream.to_param.should == 'foo%2ebar'
38
+ end
39
+
40
+ it 'should provide #save, #before_save and #after_save' do
41
+ @test_datastream.should respond_to(:save)
42
+ @test_datastream.should respond_to(:before_save)
43
+ @test_datastream.should respond_to(:after_save)
44
+ end
45
+
46
+ describe '#save' do
47
+ it 'should call #before_save and #after_save' do
48
+ Fedora::Repository.instance.stubs(:save)
49
+ @test_datastream.stubs(:last_modified_in_repository)
50
+ @test_datastream.expects(:before_save)
51
+ @test_datastream.expects(:after_save)
52
+ @test_datastream.save
53
+ end
54
+
55
+ it "should set @dirty to false" do
56
+ Fedora::Repository.instance.stubs(:save)
57
+ #@test_datastream.stubs(:last_modified_in_repository)
58
+ @test_datastream.expects(:dirty=).with(false)
59
+ @test_datastream.save
60
+ end
61
+ end
62
+
63
+ describe ".dirty?" do
64
+ it "should return the value of the @dirty attribute" do
65
+ @test_datastream.dirty.should equal(@test_datastream.dirty?)
66
+ @test_datastream.dirty = "boo"
67
+ @test_datastream.dirty?.should == "boo"
68
+ end
69
+ end
70
+
71
+ describe ".dsid=" do
72
+ it "should set the datastream's dsid" do
73
+ @test_datastream.dsid = "foodsid"
74
+ @test_datastream.dsid.should == "foodsid"
75
+ end
76
+ end
77
+
78
+ it "should have mime_type accessors and should allow you to pass :mime_type OR :mimeType as an argument to initialize block" do
79
+ ds1 = ActiveFedora::Datastream.new(:mime_type=>"text/foo")
80
+ ds1.mime_type.should == "text/foo"
81
+ ds2 = ActiveFedora::Datastream.new(:mime_type=>"text/bar")
82
+ ds2.mime_type.should == "text/bar"
83
+ end
84
+
85
+ end
@@ -0,0 +1,66 @@
1
+ require File.join( File.dirname(__FILE__), "../spec_helper" )
2
+
3
+ describe Fedora::FedoraObject do
4
+
5
+ before(:each) do
6
+ Fedora::Repository.register(ActiveFedora.fedora_config[:url])
7
+ @test_object = Fedora::FedoraObject.new
8
+ end
9
+
10
+ it 'should respond to #object_xml' do
11
+ Fedora::FedoraObject.should respond_to(:object_xml)
12
+ end
13
+ it 'hash should not have to_query) on it' do
14
+ Fedora::BaseObject.new
15
+ {:foo=>:bar}.to_fedora_query.should == 'foo=bar'
16
+ end
17
+
18
+ it 'should respond to .object_xml' do
19
+ @test_object.should respond_to(:object_xml)
20
+ end
21
+
22
+ it "should provide .url" do
23
+ @test_object.should respond_to(:url)
24
+ end
25
+
26
+ describe ".url" do
27
+ it "should return the Repository fedora_url with /objects/pid appended" do
28
+ Fedora::Repository.instance.expects(:fedora_url).returns(mock("fedora url", :scheme => "_scheme_", :host => "_host_", :port => "_port_", :path => "_path_"))
29
+ @test_object.expects(:pid).returns("_PID_")
30
+ @test_object.url.should == "_scheme_://_host_:_port__path_/objects/_PID_"
31
+ end
32
+ end
33
+
34
+ describe ".label" do
35
+ before(:all) do
36
+ @properties = [:label, :state, :modified_date, :create_date, :owner_id]
37
+ @sample_attributes = {:label => "label", :state => "state", :modified_date => "modified_date", :create_date => "create_date", :owner_id => "owner_id"}
38
+ end
39
+ it "should give preference to pulling from attributes hash" do
40
+ @test_object.expects(:attributes).times(@properties.length*2).returns(@sample_attributes)
41
+ @properties.each do |p|
42
+ @test_object.send(p)
43
+ end
44
+ end
45
+
46
+ it "should rely solely on attributes hash if new_object" do
47
+ @test_object.new_object = true
48
+ @test_object.expects(:properties_from_fedora).never
49
+ @test_object.expects(:attributes).times(@properties.length*2).returns(@sample_attributes)
50
+ @properties.each do |p|
51
+ @test_object.send(p)
52
+ end
53
+ end
54
+
55
+ it "should call properties_from_fedora if not a new_object" do
56
+ @test_object.new_object = false
57
+ @test_object.expects(:properties_from_fedora).times(@properties.length).returns(@sample_attributes)
58
+ @test_object.expects(:attributes).times(@properties.length).returns({})
59
+ @properties.each do |p|
60
+ @test_object.send(p)
61
+ end
62
+ end
63
+
64
+ end
65
+
66
+ end
@@ -0,0 +1,46 @@
1
+ require File.join( File.dirname(__FILE__), "../spec_helper" )
2
+
3
+ require 'active_fedora'
4
+ require 'active_fedora/base'
5
+ require 'active_fedora/metadata_datastream'
6
+ require 'active_fedora/qualified_dublin_core_datastream'
7
+
8
+ describe ActiveFedora::Base do
9
+ before(:each) do
10
+ Fedora::Repository.instance.stubs(:nextid).returns("_nextid_")
11
+ class Foo < ActiveFedora::Base
12
+ has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"foostream" do|m|
13
+ m.field "foostream", :string
14
+ end
15
+ has_metadata :type=>ActiveFedora::QualifiedDublinCoreDatastream, :name=>"dcstream" do|m|
16
+ m.field "fz", :string
17
+ end
18
+ end
19
+ class Bar < ActiveFedora::Base
20
+ has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"barstream" do |m|
21
+ m.field "barfield", :string
22
+ end
23
+ end
24
+ end
25
+
26
+ it "doesn't overwrite stream specs" do
27
+ f = Foo.new
28
+ f.datastreams.size.should == 2 #doesn't get dc until saved
29
+ streams = f.datastreams.values.map(&:class).sort
30
+ # streams.pop.name.should == "ActiveFedora::Datastream" #dc isn't here till saved
31
+ streams.pop.name.should == "ActiveFedora::MetadataDatastream"
32
+ streams.pop.name.should == "ActiveFedora::QualifiedDublinCoreDatastream"
33
+ end
34
+
35
+ it "should work for multiple types" do
36
+ b = Foo.new
37
+ f = Bar.new
38
+ b.class.ds_specs.should_not == f.class.ds_specs
39
+ end
40
+ after do
41
+ Object.send(:remove_const, :Bar)
42
+ Object.send(:remove_const, :Foo)
43
+ end
44
+
45
+ end
46
+
@@ -0,0 +1,290 @@
1
+ require File.join( File.dirname(__FILE__), "../spec_helper" )
2
+
3
+ require 'active_fedora'
4
+ require 'active_fedora/metadata_datastream'
5
+
6
+ # include ActiveFedora::Datastream
7
+
8
+ describe ActiveFedora::MetadataDatastream do
9
+
10
+ before(:all) do
11
+ @sample_fields = {:publisher => {:values => ["publisher1"], :type => :string},
12
+ :coverage => {:values => ["coverage1", "coverage2"], :type => :text},
13
+ :creation_date => {:values => "fake-date", :type => :date},
14
+ :mydate => {:values => "fake-date", :type => :date},
15
+ :empty_field => {:values => {}}
16
+ }
17
+ @sample_xml = XmlSimple.xml_in("<fields><coverage>coverage1</coverage><coverage>coverage2</coverage><creation_date>fake-date</creation_date><mydate>fake-date</mydate><publisher>publisher1</publisher></fields>")
18
+
19
+ end
20
+
21
+ before(:each) do
22
+ @test_ds = ActiveFedora::MetadataDatastream.new
23
+ end
24
+
25
+ after(:each) do
26
+ end
27
+
28
+ describe '#new' do
29
+ it 'should provide #new' do
30
+ ActiveFedora::MetadataDatastream.should respond_to(:new)
31
+ end
32
+ end
33
+
34
+
35
+ it 'should provide .fields' do
36
+ @test_ds.should respond_to(:fields)
37
+ end
38
+
39
+ describe '.save' do
40
+ it "should provide .save" do
41
+ @test_ds.should respond_to(:save)
42
+ end
43
+ it "should persist the product of .to_xml in fedora" do
44
+ Fedora::Repository.instance.expects(:save)
45
+ @test_ds.expects(:to_xml).returns("fake xml")
46
+ @test_ds.expects(:blob=).with("fake xml")
47
+ @test_ds.save
48
+ end
49
+ end
50
+
51
+ describe '.to_xml' do
52
+ it "should provide .to_xml" do
53
+ @test_ds.should respond_to(:to_xml)
54
+ end
55
+ it 'should output the fields hash as XML' do
56
+ @test_ds.expects(:fields).returns(@sample_fields)
57
+ #sample_rexml = REXML::Document.new(sample_xml)
58
+ #returned_rexml = REXML::Document.new(@test_ds.to_dc_xml)
59
+ #returned_rexml.to_s.should == sample_rexml.to_s
60
+ returned_xml = XmlSimple.xml_in(@test_ds.to_xml)
61
+ returned_xml.should == @sample_xml
62
+ end
63
+
64
+ it 'should accept an optional REXML Document as an argument and insert its fields into that' do
65
+ @test_ds.expects(:fields).returns(@sample_fields)
66
+ rexml = REXML::Document.new("<test_rexml/>")
67
+ rexml.root.elements.expects(:add).times(5)
68
+ result = @test_ds.to_xml(rexml)
69
+ end
70
+ it 'should accept an optional REXML Document as an argument and insert its fields into that' do
71
+ @test_ds.expects(:fields).returns(@sample_fields)
72
+ rexml = REXML::Document.new("<test_rexml/>")
73
+ result = @test_ds.to_xml(rexml)
74
+ XmlSimple.xml_in(rexml.to_s).should == @sample_xml
75
+ XmlSimple.xml_in(result).should == @sample_xml
76
+ end
77
+
78
+ it 'should add to root of REXML::Documents, but add directly to the elements if a REXML::Element is passed in' do
79
+ @test_ds.expects(:fields).returns(@sample_fields).times(2)
80
+ doc = REXML::Document.new("<test_document/>")
81
+ el = REXML::Element.new("<test_element/>")
82
+ doc.root.elements.expects(:add).times(5)
83
+ el.expects(:add).times(5)
84
+ @test_ds.to_xml(doc)
85
+ @test_ds.to_xml(el)
86
+ end
87
+
88
+ end
89
+
90
+ describe '.set_blob_for_save' do
91
+ it "should provide .set_blob_for_save" do
92
+ @test_ds.should respond_to(:set_blob_for_save)
93
+ end
94
+
95
+ it "should set the blob to to_xml" do
96
+ @test_ds.expects(:blob=).with(@test_ds.to_xml)
97
+ @test_ds.set_blob_for_save
98
+ end
99
+ end
100
+
101
+ describe '#field' do
102
+
103
+ before(:each) do
104
+ class SpecDatastream < ActiveFedora::MetadataDatastream
105
+ def initialize
106
+ super
107
+ field :publisher, :string
108
+ field :coverage, :text
109
+ field :creation_date, :date
110
+ field :mydate, :date
111
+ field :mycomplicated_field, :string, :multiple=>false, :encoding=>'LCSH', :element_attrs=>{:foo=>:bar, :baz=>:bat}
112
+ end
113
+ end
114
+ end
115
+
116
+ after(:each) do
117
+ Object.send(:remove_const, :SpecDatastream)
118
+ end
119
+
120
+ it 'should add corresponding field to the @fields hash and set the field :type ' do
121
+ sds = SpecDatastream.new
122
+ sds.fields.should_not have_key(:bio)
123
+ sds.field :bio, :text
124
+ sds.fields.should have_key(:bio)
125
+ sds.fields[:bio].should have_key(:type)
126
+ sds.fields[:bio][:type].should == :text
127
+ sds.fields[:mycomplicated_field][:element_attrs].should == {:foo=>:bar, :baz=>:bat}
128
+ end
129
+
130
+ it "should insert custom element attrs into the xml stream" do
131
+ sds = SpecDatastream.new
132
+ sds.mycomplicated_field_values='foo'
133
+ sds.fields[:mycomplicated_field][:element_attrs].should == {:foo=>:bar, :baz=>:bat}
134
+ sds.to_xml.should == '<fields><mycomplicated_field baz=\'bat\' foo=\'bar\'>foo</mycomplicated_field></fields>'
135
+ end
136
+
137
+ it "should add getters and setters and appenders with field name" do
138
+ local_test_ds = SpecDatastream.new
139
+ local_test_ds.should respond_to(:publisher_values)
140
+ local_test_ds.should respond_to(:publisher_append)
141
+ local_test_ds.should respond_to(:publisher_values=)
142
+ local_test_ds.publisher_values.class.should == Array
143
+ local_test_ds.should respond_to(:coverage_values)
144
+ local_test_ds.should respond_to(:coverage_values=)
145
+ local_test_ds.should respond_to(:coverage_append)
146
+ local_test_ds.should respond_to(:creation_date_values)
147
+ local_test_ds.should respond_to(:creation_date_append)
148
+ local_test_ds.should respond_to(:creation_date_values=)
149
+ local_test_ds.should respond_to(:mydate_values)
150
+ local_test_ds.should respond_to(:mydate_append)
151
+ local_test_ds.should respond_to(:mydate_values=)
152
+ end
153
+
154
+ it "should track field values at instance level, not at class level" do
155
+ local_test_ds1 = SpecDatastream.new
156
+ local_test_ds2 = SpecDatastream.new
157
+ local_test_ds1.publisher_values = ["publisher1", "publisher2"]
158
+ local_test_ds2.publisher_values = ["publisherA", "publisherB"]
159
+
160
+ local_test_ds2.publisher_values.should == ["publisherA", "publisherB"]
161
+ local_test_ds1.publisher_values.should == ["publisher1", "publisher2"]
162
+ end
163
+
164
+ it "should allow you to add field values using <<" do
165
+ local_test_ds1 = SpecDatastream.new
166
+ local_test_ds1.publisher_values << "publisher1"
167
+ local_test_ds1.publisher_values.should == ["publisher1"]
168
+ end
169
+
170
+ it "should create setter that always turns non-arrays into arrays" do
171
+ local_test_ds = SpecDatastream.new
172
+ local_test_ds.publisher_values = "Foo"
173
+ local_test_ds.publisher_values.should == ["Foo"]
174
+ end
175
+
176
+ it "should create setter that sets datastream.dirty? to true" do
177
+ local_test_ds = SpecDatastream.new
178
+ local_test_ds.should_not be_dirty
179
+ local_test_ds.publisher_values = "Foo"
180
+ local_test_ds.should be_dirty
181
+
182
+ # Note: If you use << to append values, the datastream will not be marked as dirty!
183
+ #local_test_ds.dirty = false
184
+
185
+ #local_test_ds.should_not be_dirty
186
+ #local_test_ds.publisher_values << "Foo"
187
+ #local_test_ds.should be_dirty
188
+ end
189
+
190
+ it "should add any extra opts to the field hash" do
191
+ local_test_ds = SpecDatastream.new
192
+ local_test_ds.field "myfield", :string, :foo => "foo", :bar => "bar"
193
+ local_test_ds.fields[:myfield].should have_key(:foo)
194
+ local_test_ds.fields[:myfield][:foo].should == "foo"
195
+ local_test_ds.fields[:myfield].should have_key(:bar)
196
+ local_test_ds.fields[:myfield][:bar].should == "bar"
197
+ end
198
+
199
+ end
200
+
201
+ describe ".to_solr" do
202
+
203
+ after(:all) do
204
+ # Revert to default mappings after running tests
205
+ ActiveFedora::SolrService.load_mappings
206
+ end
207
+
208
+ it "should provide .to_solr and return a SolrDocument" do
209
+ @test_ds.should respond_to(:to_solr)
210
+ @test_ds.to_solr.should be_kind_of(Solr::Document)
211
+ end
212
+
213
+ it "should optionally allow you to provide the Solr::Document to add fields to and return that document when done" do
214
+ doc = Solr::Document.new
215
+ @test_ds.to_solr(doc).should equal(doc)
216
+ end
217
+
218
+ it "should iterate through @fields hash" do
219
+ @test_ds.expects(:fields).returns(@sample_fields)
220
+ solr_doc = @test_ds.to_solr
221
+
222
+ solr_doc[:publisher_t].should == "publisher1"
223
+ solr_doc[:coverage_t].should == "coverage1"
224
+ solr_doc[:creation_date_dt].should == "fake-date"
225
+ solr_doc[:mydate_dt].should == "fake-date"
226
+
227
+ solr_doc[:empty_field_t].should be_nil
228
+ end
229
+
230
+ it "should allow multiple values for a single field"
231
+
232
+ it 'should append create keys in format field_name + _ + field_type' do
233
+ @test_ds.stubs(:fields).returns(@sample_fields)
234
+
235
+ #should have these
236
+
237
+ @test_ds.to_solr[:publisher_t].should_not be_nil
238
+ @test_ds.to_solr[:coverage_t].should_not be_nil
239
+ @test_ds.to_solr[:creation_date_dt].should_not be_nil
240
+
241
+ #should NOT have these
242
+ @test_ds.to_solr[:narrator].should be_nil
243
+ @test_ds.to_solr[:title].should be_nil
244
+ @test_ds.to_solr[:empty_field].should be_nil
245
+
246
+ end
247
+
248
+ it "should use Solr mappings to generate field names" do
249
+ ActiveFedora::SolrService.load_mappings(File.join(File.dirname(__FILE__), "..", "..", "config", "solr_mappings_af_0.1.yml"))
250
+ @test_ds.stubs(:fields).returns(@sample_fields)
251
+ solr_doc = @test_ds.to_solr
252
+
253
+ #should have these
254
+
255
+ solr_doc[:publisher_field].should == "publisher1"
256
+ solr_doc[:coverage_field].should == "coverage1"
257
+ solr_doc[:creation_date_date].should == "fake-date"
258
+ solr_doc[:mydate_date].should == "fake-date"
259
+
260
+ solr_doc[:publisher_t].should be_nil
261
+ solr_doc[:coverage_t].should be_nil
262
+ solr_doc[:creation_date_dt].should be_nil
263
+
264
+ # Reload default mappings
265
+ ActiveFedora::SolrService.load_mappings
266
+ end
267
+
268
+ it 'should append _dt to dates' do
269
+ @test_ds.expects(:fields).returns(@sample_fields).at_least_once
270
+
271
+ #should have these
272
+
273
+ @test_ds.to_solr[:creation_date_dt].should_not be_nil
274
+ @test_ds.to_solr[:mydate_dt].should_not be_nil
275
+
276
+ #should NOT have these
277
+
278
+ @test_ds.to_solr[:mydate].should be_nil
279
+ @test_ds.to_solr[:creation_date_date].should be_nil
280
+ end
281
+
282
+ end
283
+
284
+ describe '.fields' do
285
+ it "should return a Hash" do
286
+ @test_ds.fields.should be_instance_of(Hash)
287
+ end
288
+ end
289
+
290
+ end