active-fedora 1.0.5 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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