active-fedora 8.7.0 → 9.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (242) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +8 -15
  3. data/Gemfile +5 -5
  4. data/History.txt +0 -80
  5. data/README.md +1 -0
  6. data/Rakefile +0 -3
  7. data/active-fedora.gemspec +8 -7
  8. data/config/fedora.yml +5 -4
  9. data/config/predicate_mappings.yml +5 -5
  10. data/gemfiles/rails4.1.gemfile +10 -0
  11. data/gemfiles/rails4.2.beta.gemfile +10 -0
  12. data/lib/active_fedora.rb +151 -117
  13. data/lib/active_fedora/associations.rb +47 -15
  14. data/lib/active_fedora/associations/association.rb +29 -8
  15. data/lib/active_fedora/associations/association_scope.rb +5 -5
  16. data/lib/active_fedora/associations/belongs_to_association.rb +20 -63
  17. data/lib/active_fedora/associations/builder/association.rb +61 -25
  18. data/lib/active_fedora/associations/builder/belongs_to.rb +7 -94
  19. data/lib/active_fedora/associations/builder/collection_association.rb +11 -43
  20. data/lib/active_fedora/associations/builder/contains.rb +28 -0
  21. data/lib/active_fedora/associations/builder/has_and_belongs_to_many.rb +13 -3
  22. data/lib/active_fedora/associations/builder/has_many.rb +16 -10
  23. data/lib/active_fedora/associations/builder/property.rb +14 -0
  24. data/lib/active_fedora/associations/builder/singular_association.rb +14 -18
  25. data/lib/active_fedora/associations/builder/singular_property.rb +12 -0
  26. data/lib/active_fedora/associations/collection_association.rb +57 -80
  27. data/lib/active_fedora/associations/contains_association.rb +50 -0
  28. data/lib/active_fedora/associations/has_and_belongs_to_many_association.rb +44 -24
  29. data/lib/active_fedora/associations/has_many_association.rb +46 -14
  30. data/lib/active_fedora/associations/rdf.rb +86 -0
  31. data/lib/active_fedora/associations/singular_association.rb +4 -8
  32. data/lib/active_fedora/associations/singular_rdf.rb +15 -0
  33. data/lib/active_fedora/attached_files.rb +195 -0
  34. data/lib/active_fedora/attribute_methods.rb +122 -0
  35. data/lib/active_fedora/attribute_methods/dirty.rb +16 -0
  36. data/lib/active_fedora/attribute_methods/read.rb +61 -0
  37. data/lib/active_fedora/attribute_methods/write.rb +47 -0
  38. data/lib/active_fedora/attributes.rb +93 -44
  39. data/lib/active_fedora/attributes/primary_key.rb +12 -0
  40. data/lib/active_fedora/autosave_association.rb +2 -2
  41. data/lib/active_fedora/base.rb +16 -15
  42. data/lib/active_fedora/callbacks.rb +7 -7
  43. data/lib/active_fedora/change_set.rb +34 -0
  44. data/lib/active_fedora/cleaner.rb +62 -0
  45. data/lib/active_fedora/config.rb +4 -22
  46. data/lib/active_fedora/core.rb +173 -99
  47. data/lib/active_fedora/datastream.rb +4 -117
  48. data/lib/active_fedora/datastreams.rb +2 -263
  49. data/lib/active_fedora/datastreams/nokogiri_datastreams.rb +28 -51
  50. data/lib/active_fedora/{datastream_attribute.rb → delegated_attribute.rb} +57 -26
  51. data/lib/active_fedora/errors.rb +61 -0
  52. data/lib/active_fedora/fedora.rb +19 -0
  53. data/lib/active_fedora/fedora_attributes.rb +58 -26
  54. data/lib/active_fedora/file.rb +318 -0
  55. data/lib/active_fedora/file_configurator.rb +32 -32
  56. data/lib/active_fedora/file_path_builder.rb +24 -0
  57. data/lib/active_fedora/files_hash.rb +82 -0
  58. data/lib/active_fedora/fixity_service.rb +40 -0
  59. data/lib/active_fedora/indexing.rb +55 -82
  60. data/lib/active_fedora/indexing_service.rb +70 -0
  61. data/lib/active_fedora/ldp_resource.rb +26 -0
  62. data/lib/active_fedora/loadable_from_json.rb +112 -0
  63. data/lib/active_fedora/model.rb +5 -19
  64. data/lib/active_fedora/nested_attributes.rb +5 -6
  65. data/lib/active_fedora/nom_datastream.rb +15 -25
  66. data/lib/active_fedora/om_datastream.rb +26 -197
  67. data/lib/active_fedora/persistence.rb +95 -71
  68. data/lib/active_fedora/predicates.rb +4 -4
  69. data/lib/active_fedora/qualified_dublin_core_datastream.rb +17 -18
  70. data/lib/active_fedora/querying.rb +3 -4
  71. data/lib/active_fedora/railtie.rb +3 -6
  72. data/lib/active_fedora/rdf.rb +3 -1
  73. data/lib/active_fedora/rdf/datastream_indexing.rb +11 -0
  74. data/lib/active_fedora/rdf/fcrepo.rb +10 -324
  75. data/lib/active_fedora/rdf/indexing.rb +20 -16
  76. data/lib/active_fedora/rdf/ldp.rb +6 -0
  77. data/lib/active_fedora/rdf/ntriples_rdf_datastream.rb +1 -1
  78. data/lib/active_fedora/rdf/persistence.rb +5 -6
  79. data/lib/active_fedora/rdf/rdf_datastream.rb +44 -37
  80. data/lib/active_fedora/rdf/rdfxml_datastream.rb +13 -0
  81. data/lib/active_fedora/rdf/rels_ext.rb +26 -0
  82. data/lib/active_fedora/reflection.rb +256 -199
  83. data/lib/active_fedora/relation.rb +18 -6
  84. data/lib/active_fedora/relation/finder_methods.rb +69 -38
  85. data/lib/active_fedora/relation/query_methods.rb +7 -3
  86. data/lib/active_fedora/rspec_matchers/belong_to_associated_active_fedora_object_matcher.rb +7 -7
  87. data/lib/active_fedora/rspec_matchers/have_many_associated_active_fedora_objects_matcher.rb +8 -8
  88. data/lib/active_fedora/rspec_matchers/have_predicate_matcher.rb +9 -11
  89. data/lib/active_fedora/simple_datastream.rb +18 -13
  90. data/lib/active_fedora/solr_instance_loader.rb +18 -38
  91. data/lib/active_fedora/solr_service.rb +37 -20
  92. data/lib/active_fedora/sparql_insert.rb +45 -0
  93. data/lib/active_fedora/test_support.rb +1 -22
  94. data/lib/active_fedora/version.rb +1 -1
  95. data/lib/active_fedora/versionable.rb +90 -0
  96. data/lib/active_fedora/with_metadata.rb +37 -0
  97. data/lib/active_fedora/with_metadata/metadata_node.rb +70 -0
  98. data/lib/generators/active_fedora/config/config_generator.rb +0 -1
  99. data/lib/generators/active_fedora/config/solr/solr_generator.rb +1 -1
  100. data/lib/generators/active_fedora/model/model_generator.rb +5 -5
  101. data/lib/generators/active_fedora/model/templates/datastream_spec.rb.erb +1 -1
  102. data/lib/generators/active_fedora/model/templates/model_spec.rb.erb +2 -2
  103. data/lib/tasks/active_fedora_dev.rake +21 -27
  104. data/spec/config_helper.rb +1 -1
  105. data/spec/fixtures/mixed_rdf_descMetadata.nt +6 -6
  106. data/spec/fixtures/rails_root/config/predicate_mappings.yml +3 -19
  107. data/spec/fixtures/solr_rdf_descMetadata.nt +6 -6
  108. data/spec/integration/associations_spec.rb +133 -153
  109. data/spec/integration/attached_files_spec.rb +164 -0
  110. data/spec/integration/attributes_spec.rb +73 -12
  111. data/spec/integration/autosave_association_spec.rb +3 -3
  112. data/spec/integration/base_spec.rb +57 -351
  113. data/spec/integration/belongs_to_association_spec.rb +86 -76
  114. data/spec/integration/bug_spec.rb +3 -3
  115. data/spec/integration/collection_association_spec.rb +4 -4
  116. data/spec/integration/complex_rdf_datastream_spec.rb +54 -56
  117. data/spec/integration/delete_all_spec.rb +18 -15
  118. data/spec/integration/eradicate_spec.rb +54 -0
  119. data/spec/integration/fedora_solr_sync_spec.rb +7 -5
  120. data/spec/integration/field_to_solr_name_spec.rb +5 -5
  121. data/spec/integration/file_fixity_spec.rb +40 -0
  122. data/spec/integration/file_spec.rb +122 -0
  123. data/spec/integration/full_featured_model_spec.rb +53 -63
  124. data/spec/integration/has_and_belongs_to_many_associations_spec.rb +141 -114
  125. data/spec/integration/has_many_associations_spec.rb +142 -64
  126. data/spec/integration/json_serialization_spec.rb +50 -8
  127. data/spec/integration/model_spec.rb +12 -29
  128. data/spec/integration/nested_attribute_spec.rb +28 -20
  129. data/spec/integration/ntriples_datastream_spec.rb +60 -57
  130. data/spec/integration/om_datastream_spec.rb +51 -140
  131. data/spec/integration/rdf_nested_attributes_spec.rb +16 -14
  132. data/spec/integration/relation_delegation_spec.rb +7 -9
  133. data/spec/integration/relation_spec.rb +9 -7
  134. data/spec/integration/scoped_query_spec.rb +26 -26
  135. data/spec/integration/solr_instance_loader_spec.rb +69 -53
  136. data/spec/integration/solr_service_spec.rb +12 -73
  137. data/spec/integration/versionable_spec.rb +477 -0
  138. data/spec/integration/with_metadata_spec.rb +52 -0
  139. data/spec/samples/hydra-mods_article_datastream.rb +10 -6
  140. data/spec/samples/models/mods_article.rb +6 -2
  141. data/spec/samples/oral_history_sample.xml +1 -1
  142. data/spec/samples/oral_history_xml.xml +1 -1
  143. data/spec/samples/special_thing.rb +3 -3
  144. data/spec/spec_helper.rb +22 -12
  145. data/spec/support/an_active_model.rb +3 -7
  146. data/spec/unit/active_fedora_spec.rb +20 -17
  147. data/spec/unit/attached_files_spec.rb +203 -0
  148. data/spec/unit/attributes_spec.rb +286 -207
  149. data/spec/unit/base_active_model_spec.rb +8 -8
  150. data/spec/unit/base_datastream_management_spec.rb +11 -24
  151. data/spec/unit/base_extra_spec.rb +17 -67
  152. data/spec/unit/base_spec.rb +163 -428
  153. data/spec/unit/builder/has_and_belongs_to_many_spec.rb +2 -2
  154. data/spec/unit/callback_spec.rb +38 -23
  155. data/spec/unit/change_set_spec.rb +46 -0
  156. data/spec/unit/code_configurator_spec.rb +5 -5
  157. data/spec/unit/config_spec.rb +9 -14
  158. data/spec/unit/core_spec.rb +59 -8
  159. data/spec/unit/file_configurator_spec.rb +55 -53
  160. data/spec/unit/file_path_builder_spec.rb +18 -0
  161. data/spec/unit/file_spec.rb +221 -0
  162. data/spec/unit/files_hash_spec.rb +53 -0
  163. data/spec/unit/fixity_service_spec.rb +34 -0
  164. data/spec/unit/has_and_belongs_to_many_association_spec.rb +134 -0
  165. data/spec/unit/has_many_association_spec.rb +51 -0
  166. data/spec/unit/indexing_service_spec.rb +23 -0
  167. data/spec/unit/indexing_spec.rb +26 -0
  168. data/spec/unit/inheritance_spec.rb +9 -10
  169. data/spec/unit/model_spec.rb +15 -33
  170. data/spec/unit/nom_datastream_spec.rb +13 -10
  171. data/spec/unit/ntriples_datastream_spec.rb +81 -96
  172. data/spec/unit/om_datastream_spec.rb +137 -227
  173. data/spec/unit/persistence_spec.rb +28 -34
  174. data/spec/unit/predicates_spec.rb +29 -29
  175. data/spec/unit/property_spec.rb +1 -3
  176. data/spec/unit/qualified_dublin_core_datastream_spec.rb +27 -32
  177. data/spec/unit/query_spec.rb +116 -149
  178. data/spec/unit/rdf_datastream_spec.rb +25 -43
  179. data/spec/unit/rdf_resource_datastream_spec.rb +24 -123
  180. data/spec/unit/{rdfxml_rdf_datastream_spec.rb → rdfxml_datastream_spec.rb} +21 -25
  181. data/spec/unit/readonly_spec.rb +23 -0
  182. data/spec/unit/rspec_matchers/belong_to_associated_active_fedora_object_matcher_spec.rb +6 -6
  183. data/spec/unit/rspec_matchers/have_many_associated_active_fedora_objects_matcher_spec.rb +6 -6
  184. data/spec/unit/rspec_matchers/have_predicate_matcher_spec.rb +6 -6
  185. data/spec/unit/serializers_spec.rb +1 -1
  186. data/spec/unit/simple_datastream_spec.rb +12 -23
  187. data/spec/unit/solr_config_options_spec.rb +14 -17
  188. data/spec/unit/solr_service_spec.rb +38 -77
  189. data/spec/unit/sparql_insert_spec.rb +32 -0
  190. data/spec/unit/validations_spec.rb +8 -11
  191. metadata +96 -121
  192. data/lib/active_fedora/auditable.rb +0 -9
  193. data/lib/active_fedora/content_model.rb +0 -70
  194. data/lib/active_fedora/datastream_collections.rb +0 -302
  195. data/lib/active_fedora/datastream_hash.rb +0 -35
  196. data/lib/active_fedora/digital_object.rb +0 -55
  197. data/lib/active_fedora/fixture_exporter.rb +0 -33
  198. data/lib/active_fedora/fixture_loader.rb +0 -48
  199. data/lib/active_fedora/rdf/identifiable.rb +0 -66
  200. data/lib/active_fedora/rdf/project_hydra.rb +0 -12
  201. data/lib/active_fedora/rdf/rdfxml_rdf_datastream.rb +0 -13
  202. data/lib/active_fedora/rdf_xml_writer.rb +0 -49
  203. data/lib/active_fedora/relationship_graph.rb +0 -101
  204. data/lib/active_fedora/reload_on_save.rb +0 -16
  205. data/lib/active_fedora/rels_ext_datastream.rb +0 -100
  206. data/lib/active_fedora/rspec_matchers/match_fedora_datastream_matcher.rb +0 -41
  207. data/lib/active_fedora/rubydora_connection.rb +0 -35
  208. data/lib/active_fedora/semantic_node.rb +0 -164
  209. data/lib/active_fedora/service_definitions.rb +0 -88
  210. data/lib/active_fedora/sharding.rb +0 -58
  211. data/lib/active_fedora/solr_digital_object.rb +0 -68
  212. data/lib/active_fedora/unsaved_digital_object.rb +0 -58
  213. data/lib/generators/active_fedora/config/fedora/fedora_generator.rb +0 -12
  214. data/lib/generators/active_fedora/config/fedora/templates/fedora.yml +0 -38
  215. data/lib/generators/active_fedora/config/fedora/templates/fedora_conf/conf/development/fedora.fcfg +0 -953
  216. data/lib/generators/active_fedora/config/fedora/templates/fedora_conf/conf/test/fedora.fcfg +0 -953
  217. data/lib/tasks/active_fedora.rake +0 -83
  218. data/spec/fixtures/sharded_fedora.yml +0 -11
  219. data/spec/integration/auditable_spec.rb +0 -29
  220. data/spec/integration/datastream_collections_spec.rb +0 -127
  221. data/spec/integration/datastream_spec.rb +0 -90
  222. data/spec/integration/datastreams_spec.rb +0 -173
  223. data/spec/integration/load_from_solr_spec.rb +0 -66
  224. data/spec/integration/rels_ext_datastream_spec.rb +0 -82
  225. data/spec/support/mock_fedora.rb +0 -44
  226. data/spec/unit/content_model_spec.rb +0 -86
  227. data/spec/unit/datastream_collections_spec.rb +0 -420
  228. data/spec/unit/datastream_spec.rb +0 -83
  229. data/spec/unit/datastreams_spec.rb +0 -243
  230. data/spec/unit/has_and_belongs_to_many_collection_spec.rb +0 -96
  231. data/spec/unit/has_many_collection_spec.rb +0 -35
  232. data/spec/unit/rdf_vocab_spec.rb +0 -30
  233. data/spec/unit/rdf_xml_writer_spec.rb +0 -63
  234. data/spec/unit/relationship_graph_spec.rb +0 -115
  235. data/spec/unit/reload_on_save_spec.rb +0 -24
  236. data/spec/unit/rels_ext_datastream_spec.rb +0 -170
  237. data/spec/unit/rspec_matchers/match_fedora_datastream_matcher_spec.rb +0 -44
  238. data/spec/unit/rubydora_connection_spec.rb +0 -12
  239. data/spec/unit/semantic_node_spec.rb +0 -112
  240. data/spec/unit/service_definitions_spec.rb +0 -63
  241. data/spec/unit/solr_digital_object_spec.rb +0 -97
  242. data/spec/unit/unsaved_digital_object_spec.rb +0 -48
@@ -1,66 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "Loading from solr" do
4
- before do
5
- class MyRdfDatastream < ActiveFedora::NtriplesRDFDatastream
6
- property :title, predicate: RDF::DC.title do |index|
7
- index.as :stored_searchable, :facetable
8
- end
9
- property :date_uploaded, predicate: RDF::DC.dateSubmitted do |index|
10
- index.type :date
11
- index.as :stored_searchable, :sortable
12
- end
13
- property :date_modified, predicate: RDF::DC.date do |index|
14
- index.type :date
15
- index.as :stored_sortable
16
- end
17
- property :identifier, predicate: RDF::DC.identifier do |index|
18
- index.type :integer
19
- index.as :stored_searchable, :sortable
20
- end
21
- property :part, predicate: RDF::DC.hasPart
22
- property :based_near, predicate: RDF::FOAF.based_near
23
- property :related_url, predicate: RDF::RDFS.seeAlso
24
- end
25
- class MyOmDatastream < ActiveFedora::OmDatastream
26
- set_terminology do |t|
27
- t.root(path: "animals")
28
- t.duck(index_as: :stored_searchable)
29
- end
30
- end
31
- class RdfTest < ActiveFedora::Base
32
- has_metadata 'rdf', type: MyRdfDatastream
33
- has_metadata 'om', type: MyOmDatastream
34
- has_attributes :based_near, :related_url, :part, :date_uploaded, datastream: 'rdf', multiple: true
35
- has_attributes :date_modified, datastream: 'rdf', multiple: false
36
- has_attributes :title, :identifier, datastream: 'rdf', multiple: false
37
- has_attributes :duck, datastream: 'om', multiple: false
38
- end
39
- end
40
-
41
- let!(:original) { RdfTest.create!(title: "PLAN 9 FROM OUTER SPACE",
42
- date_uploaded: [Date.parse('1959-01-01')],
43
- date_modified: Date.parse('1999-01-01'),
44
- duck: "quack",
45
- identifier: 12345) }
46
-
47
- after do
48
- original.destroy
49
- Object.send(:remove_const, :RdfTest)
50
- Object.send(:remove_const, :MyRdfDatastream)
51
- Object.send(:remove_const, :MyOmDatastream)
52
- end
53
-
54
- it "should be able to get indexed properties without loading from fedora" do
55
- expect(RdfTest.connection_for_pid('1')).not_to receive(:datastream_dissemination)
56
- obj = RdfTest.load_instance_from_solr original.pid
57
- expect(obj.title).to eq "PLAN 9 FROM OUTER SPACE"
58
- expect(obj.date_uploaded).to eq [Date.parse('1959-01-01')]
59
- expect(obj.date_modified).to eq Date.parse('1999-01-01')
60
- expect(obj.identifier).to eq 12345
61
- expect{obj.part}.to raise_error KeyError, "Tried to fetch `part' from solr, but it isn't indexed."
62
- expect(ActiveFedora::Base.logger).to receive(:info).with "Couldn't get duck out of solr, because the datastream 'MyOmDatastream' doesn't respond to 'primary_solr_name'. Trying another way."
63
- expect(obj.duck).to eq 'quack'
64
- end
65
-
66
- end
@@ -1,82 +0,0 @@
1
- require 'spec_helper'
2
-
3
- require 'active_fedora'
4
- require "rexml/document"
5
-
6
-
7
- describe ActiveFedora::RelsExtDatastream do
8
-
9
- before(:all) do
10
- @sample_relationships_hash = Hash.new(:is_member_of => ["info:fedora/demo:5", "info:fedora/demo:10"])
11
- @sample_xml_string = <<-EOS
12
- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
13
- <rdf:Description rdf:about="info:fedora/changeme:475">
14
- <isMemberOf xmlns="info:fedora/fedora-system:def/relations-external#" rdf:resource="info:fedora/demo:5"></isMemberOf>
15
- <isMemberOf xmlns="info:fedora/fedora-system:def/relations-external#" rdf:resource="info:fedora/demo:10"></isMemberOf>
16
- </rdf:Description>
17
- </rdf:RDF>
18
- EOS
19
-
20
- @sample_xml = REXML::Document.new(@sample_xml_string)
21
- end
22
-
23
- before(:each) do
24
- @test_object = ActiveFedora::Base.new
25
- @test_datastream = ActiveFedora::RelsExtDatastream.new(@test_object.inner_object, 'RELS-EXT')
26
- @test_datastream.model = @test_object
27
- @test_object.save
28
- end
29
-
30
- after(:each) do
31
- begin
32
- @test_object.delete
33
- rescue
34
- end
35
- begin
36
- @test_object2.delete
37
- rescue
38
- end
39
- begin
40
- @test_object3.delete
41
- rescue
42
- end
43
- begin
44
- @test_object4.delete
45
- rescue
46
- end
47
- begin
48
- @test_object5.delete
49
- rescue
50
- end
51
- end
52
-
53
-
54
- describe '#serialize!' do
55
-
56
- it "should generate new rdf/xml as the datastream content" do
57
- @test_object.add_datastream(@test_datastream)
58
- @test_object.add_relationship(:is_member_of, "info:fedora/demo:5")
59
- @test_object.add_relationship(:is_member_of, "info:fedora/demo:10")
60
- rexml1 = REXML::Document.new(@test_datastream.to_rels_ext())
61
- @test_datastream.serialize!
62
- rexml2 = REXML::Document.new(@test_object.datastreams["RELS-EXT"].content)
63
- expect(rexml1.root.elements["rdf:Description"].inspect).to eql(rexml2.root.elements["rdf:Description"].inspect)
64
- end
65
-
66
- end
67
-
68
- it "should load relationships from fedora into parent object" do
69
- class SpecNode; include ActiveFedora::SemanticNode; end
70
- ActiveFedora::Predicates.predicate_mappings[ActiveFedora::Predicates.default_predicate_namespace].each_key do |p|
71
- @test_object.add_relationship(p, "info:fedora/demo:#{rand(100)}")
72
- end
73
- @test_object.save
74
- # make sure that _something_ was actually added to the object's relationships hash
75
- expect(@test_object.ids_for_outbound(:is_member_of).size).to eq(1)
76
- new_rels = ActiveFedora::Base.find(@test_object.pid).relationships
77
- # This stopped working, need to push an issue into the rdf library. (when dumping ntriples, the order of assertions changed)
78
- #new_rels.should == @test_object.relationships
79
- expect(new_rels.dump(:rdfxml)).to eq(@test_object.relationships.dump(:rdfxml))
80
- end
81
-
82
- end
@@ -1,44 +0,0 @@
1
- def mock_client
2
- return @mock_client if @mock_client
3
- @mock_client = double("client")
4
- @getter = double("getter")
5
- allow(@getter).to receive(:get).and_return('')
6
- allow(@mock_client).to receive(:[]).with("describe?xml=true").and_return('')
7
- @mock_client
8
- end
9
-
10
- def stub_get(pid, datastreams=nil, record_exists=false)
11
- pid.gsub!(/:/, '%3A')
12
- if record_exists
13
- allow(mock_client).to receive(:[]).with("objects/#{pid}?format=xml").and_return(double('get getter', :get=>'foobar'))
14
- else
15
- allow(mock_client).to receive(:[]).with("objects/#{pid}?format=xml").and_raise(RestClient::ResourceNotFound)
16
- end
17
- allow(mock_client).to receive(:[]).with("objects/#{pid}/datastreams?format=xml").and_return(@getter)
18
- datastreams ||= ['someData', 'withText', 'withText2', 'RELS-EXT']
19
- datastreams.each do |dsid|
20
- allow(mock_client).to receive(:[]).with("objects/#{pid}/datastreams/#{dsid}?format=xml").and_return(@getter)
21
- end
22
- end
23
-
24
- def stub_ingest(pid=nil)
25
- n = pid ? pid.gsub(/:/, '%3A') : nil
26
- expect(mock_client).to receive(:[]).with("objects/#{n || 'new'}").and_return(double("ingester", :post=>pid))
27
- end
28
-
29
- def stub_add_ds(pid, dsids)
30
- pid.gsub!(/:/, '%3A')
31
- dsids.each do |dsid|
32
- client = allow(mock_client).to receive(:[]) do |params|
33
- /objects\/#{pid}\/datastreams\/#{dsid}/.match(params)
34
- end
35
- client.and_return(double("ds_adder", :post=>pid, :get=>''))
36
- end
37
- end
38
-
39
- def stub_get_content(pid, dsids)
40
- pid.gsub!(/:/, '%3A')
41
- dsids.each do |dsid|
42
- allow(mock_client).to receive(:[]) { |params| /objects\/#{pid}\/datastreams\/#{dsid}\/content/.match(params)}.and_return(double("content_accessor", :post=>pid, :get=>''))
43
- end
44
- end
@@ -1,86 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::ContentModel do
4
-
5
- before(:all) do
6
- class BaseModel < ActiveFedora::Base
7
- end
8
-
9
- class SampleModel < BaseModel
10
- end
11
-
12
- class GenericContent < ActiveFedora::Base
13
- end
14
-
15
- module Sample
16
- class NamespacedModel < ActiveFedora::Base
17
- end
18
- end
19
- end
20
-
21
- describe '.best_model_for' do
22
- it 'should be nil if no relationships' do
23
- mock_object = BaseModel.new
24
- expect(mock_object).to receive(:relationships).with(:has_model).and_return([])
25
- expect(ActiveFedora::ContentModel.best_model_for(mock_object)).to be_nil
26
- end
27
-
28
- it 'should be based on inheritance hierarchy' do
29
- mock_object = ActiveFedora::Base.new
30
- expect(mock_object).to receive(:relationships).with(:has_model).and_return(["info:fedora/fedora-system:ServiceDefinition-3.0", 'info:fedora/afmodel:SampleModel', 'info:fedora/afmodel:BaseModel'])
31
- expect(ActiveFedora::ContentModel.best_model_for(mock_object)).to eq SampleModel
32
- end
33
-
34
- it 'should find the deepest descendant of the on inheritance hierarchy' do
35
- mock_object = BaseModel.new
36
- expect(mock_object).to receive(:relationships).with(:has_model).and_return(["info:fedora/fedora-system:ServiceDefinition-3.0", 'info:fedora/afmodel:SampleModel', 'info:fedora/afmodel:BaseModel'])
37
- expect(ActiveFedora::ContentModel.best_model_for(mock_object)).to eq SampleModel
38
- end
39
- end
40
-
41
- describe "models_asserted_by" do
42
- it "should return an array of all of the content models asserted by the given object" do
43
- mock_object = double("ActiveFedora Object")
44
- expect(mock_object).to receive(:relationships).with(:has_model).and_return(["info:fedora/fedora-system:ServiceDefinition-3.0", "info:fedora/afmodel:SampleModel", "info:fedora/afmodel:NonDefinedModel"])
45
- expect(ActiveFedora::ContentModel.models_asserted_by(mock_object)).to eq(["info:fedora/fedora-system:ServiceDefinition-3.0", "info:fedora/afmodel:SampleModel", "info:fedora/afmodel:NonDefinedModel"])
46
- end
47
- it "should return an empty array if the object doesn't have a RELS-EXT datastream" do
48
- mock_object = double("ActiveFedora Object")
49
- expect(mock_object).to receive(:relationships).with(:has_model).and_return([])
50
- expect(ActiveFedora::ContentModel.models_asserted_by(mock_object)).to eq([])
51
- end
52
- end
53
-
54
- describe "known_models_asserted_by" do
55
- it "should figure out the applicable models to load" do
56
- mock_object = double("ActiveFedora Object")
57
- expect(mock_object).to receive(:relationships).with(:has_model).and_return(["info:fedora/fedora-system:ServiceDefinition-3.0", "info:fedora/afmodel:SampleModel", "info:fedora/afmodel:NonDefinedModel"])
58
- expect(ActiveFedora::ContentModel.known_models_for(mock_object)).to eq([SampleModel])
59
- end
60
- it "should support namespaced models" do
61
- mock_object = double("ActiveFedora Object")
62
- expect(mock_object).to receive(:relationships).with(:has_model).and_return(["info:fedora/afmodel:Sample_NamespacedModel"])
63
- expect(ActiveFedora::ContentModel.known_models_for(mock_object)).to eq([Sample::NamespacedModel])
64
- end
65
- it "should default to using ActiveFedora::Base as the model" do
66
- mock_object = double("ActiveFedora Object")
67
- expect(mock_object).to receive(:relationships).with(:has_model).and_return(["info:fedora/afmodel:NonDefinedModel"])
68
- expect(ActiveFedora::ContentModel.known_models_for(mock_object)).to eq([ActiveFedora::Base])
69
- end
70
- it "should still work even if the object doesn't have a RELS-EXT datastream" do
71
- mock_object = double("ActiveFedora Object")
72
- expect(mock_object).to receive(:relationships).with(:has_model).and_return([])
73
- expect(ActiveFedora::ContentModel.known_models_for(mock_object)).to eq([ActiveFedora::Base])
74
- end
75
- end
76
-
77
- describe "uri_to_model_class" do
78
- it "should return an ActiveFedora Model class corresponding to the given uri if a valid model can be found" do
79
- expect(ActiveFedora::ContentModel.uri_to_model_class("info:fedora/afmodel:SampleModel")).to eq(SampleModel)
80
- expect(ActiveFedora::ContentModel.uri_to_model_class("info:fedora/afmodel:NonDefinedModel")).to eq(false)
81
- expect(ActiveFedora::ContentModel.uri_to_model_class("info:fedora/afmodel:String")).to eq(false)
82
- expect(ActiveFedora::ContentModel.uri_to_model_class("info:fedora/hydra-cModel:genericContent")).to eq(GenericContent)
83
- end
84
- end
85
-
86
- end
@@ -1,420 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::DatastreamCollections do
4
- describe '.has_datastream' do
5
- before(:all) do
6
-
7
- class MockHasDatastream < ActiveFedora::Base
8
- include ActiveFedora::DatastreamCollections
9
- has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
10
- has_datastream :name=>"EAD", :type=>ActiveFedora::Datastream, :mimeType=>"application/xml", :controlGroup=>'M'
11
- has_datastream :name=>"external", :type=>ActiveFedora::Datastream, :controlGroup=>'E'
12
- end
13
- end
14
-
15
- it 'should cache a definition of named datastream and create helper methods to add/remove/access them' do
16
- @test_object2 = MockHasDatastream.new
17
- #prefix should default to name in caps if not specified in has_datastream call
18
- expect(@test_object2.named_datastreams_desc).to eq({"thumbnail"=>{:name=>"thumbnail",:prefix => "THUMB",
19
- :type=>"ActiveFedora::Datastream", :mimeType=>"image/jpeg",
20
- :controlGroup=>'M'},
21
- "EAD"=> {:name=>"EAD", :prefix=>"EAD",
22
- :type=>"ActiveFedora::Datastream", :mimeType=>"application/xml",
23
- :controlGroup=>'M' },
24
- "external"=> {:name=>"external", :prefix=>"EXTERNAL",
25
- :type=>"ActiveFedora::Datastream", :controlGroup=>'E' }})
26
- expect(@test_object2).to respond_to(:thumbnail_append)
27
- expect(@test_object2).to respond_to(:thumbnail_file_append)
28
- expect(@test_object2).to respond_to(:thumbnail)
29
- expect(@test_object2).to respond_to(:thumbnail_ids)
30
- expect(@test_object2).to respond_to(:ead_append)
31
- expect(@test_object2).to respond_to(:ead_file_append)
32
- expect(@test_object2).to respond_to(:EAD)
33
- expect(@test_object2).to respond_to(:EAD_ids)
34
- expect(@test_object2).to respond_to(:external)
35
- expect(@test_object2).to respond_to(:external_ids)
36
- end
37
- end
38
- describe '#datastream_names' do
39
- before(:all) do
40
- class MockDatastreamNames < ActiveFedora::Base
41
- include ActiveFedora::DatastreamCollections
42
- has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
43
- has_datastream :name=>"EAD", :type=>ActiveFedora::Datastream, :mimeType=>"application/xml", :controlGroup=>'M'
44
- end
45
- end
46
-
47
- it 'should return a set of datastream names defined by has_datastream' do
48
- @test_object2 = MockDatastreamNames.new
49
- expect(@test_object2.datastream_names).to include("thumbnail","EAD")
50
- end
51
- end
52
-
53
- describe '#add_named_datastream' do
54
- before(:all) do
55
- class MockAddNamedDatastream < ActiveFedora::Base
56
- include ActiveFedora::DatastreamCollections
57
- has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
58
- has_datastream :name=>"high", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
59
- has_datastream :name=>"anymime", :type=>ActiveFedora::Datastream, :controlGroup=>'M'
60
- has_datastream :name=>"external", :type=>ActiveFedora::Datastream, :controlGroup=>'E'
61
- end
62
- end
63
- before do
64
-
65
- @test_object2 = MockAddNamedDatastream.new
66
- @f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"))
67
- @f2 = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ))
68
- allow(@f).to receive(:content_type).and_return("image/jpeg")
69
- allow(@f2).to receive(:original_filename).and_return("dino.jpg")
70
- end
71
-
72
- it 'cannot add a datastream with name that does not exist' do
73
- expect { @test_object2.add_named_datastream("thumb",{:content_type=>"image/jpeg",:blob=>f}) }.to raise_error
74
- end
75
-
76
- it "should accept a file blob" do
77
- @test_object2.add_named_datastream("thumbnail",{:content_type=>"image/jpeg",:blob=>@f})
78
- end
79
-
80
- it "should accept a file handle" do
81
- @test_object2.add_named_datastream("thumbnail",{:content_type=>"image/jpeg",:file=>@f})
82
- end
83
-
84
- it "should allow access to file content" do
85
- @test_object2.add_named_datastream("thumbnail",{:content_type=>"image/jpeg",:file=>@f})
86
- @test_object2.save!
87
- @test_object2.thumbnail[0].content
88
- end
89
-
90
- it "should raise an error if neither a blob nor file is set" do
91
- expect { @test_object2.add_named_datastream("thumbnail",{:content_type=>"image/jpeg"}) }.to raise_error
92
- end
93
-
94
- it "should use the given label for the dsLabel" do
95
- @test_object2.add_named_datastream("high",{:content_type=>"image/jpeg",:blob=>@f2, :label=>"my_image"})
96
- expect(@test_object2.high.first.dsLabel).to eq("my_image")
97
- end
98
-
99
- it "should fallback on using the file name" do
100
- @test_object2.add_named_datastream("high",{:content_type=>"image/jpeg",:blob=>@f2})
101
- expect(@test_object2.high.first.dsLabel).to eq("dino.jpg")
102
- end
103
-
104
- it "should check the file for a content type" do
105
- expect(@f).to receive(:content_type).and_return("image/jpeg")
106
- @test_object2.add_named_datastream("thumbnail",{:file=>@f})
107
- end
108
-
109
- it "should raise an error if no content type is avialable" do
110
- expect { @test_object2.add_named_datastream("thumbnail",{:file=>@f2}) }.to raise_error
111
- end
112
-
113
- it "should encsure mimetype and content type match" do
114
- allow(@f).to receive(:content_type).and_return("image/tiff")
115
- expect { @test_object2.add_named_datastream("thumbnail",{:file=>f}) }.to raise_error
116
- end
117
-
118
- it "should allow any mime type" do
119
- #check for if any mime type allowed
120
- @test_object2.add_named_datastream("anymime",{:file=>@f})
121
- #check datastream created is of type ActiveFedora::Datastream
122
- expect(@test_object2.anymime.first.class).to eq(ActiveFedora::Datastream)
123
- end
124
-
125
- it "should cgecj that a dsid forms to the prefix" do
126
- #if dsid supplied check that conforms to prefix
127
- allow(@f).to receive(:content_type).and_return("image/jpeg")
128
- expect { @test_object2.add_named_datastream("thumbnail",{:file=>@f,:dsid=>"DS1"}) }.to raise_error
129
- end
130
-
131
- it "should have the right properties" do
132
- @test_object2.add_named_datastream("high",{:content_type=>"image/jpeg",:blob=>@f2})
133
- #if prefix not set check uses name in CAPS and dsid uses prefix
134
- #@test_object2.high.first.attributes[:prefix].should == "HIGH"
135
- @test_object2.high.first.dsid.match(/HIGH[0-9]/)
136
- #check datastreams added with other right properties
137
- expect(@test_object2.high.first.controlGroup).to eq("M")
138
- end
139
-
140
- it "should work with external datastreams" do
141
-
142
- #check external datastream
143
- @test_object2.add_named_datastream("external",{:dsLocation=>"http://myreasource.com"})
144
- #check dslocation goes to dslabel
145
- expect(@test_object2.external.first.dsLabel).to eq("http://myreasource.com")
146
- #check datastreams added to fedora (may want to stub this at first)
147
- end
148
- end
149
-
150
- describe '#add_named_file_datastream' do
151
- before do
152
- class MockDS < ActiveFedora::Datastream; end
153
- class MockAddNamedFileDatastream < ActiveFedora::Base
154
- include ActiveFedora::DatastreamCollections
155
- has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>MockDS, :mimeType=>"image/jpeg", :controlGroup=>'M'
156
- has_datastream :name=>"high", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
157
- has_datastream :name=>"anymime", :type=>ActiveFedora::Datastream, :controlGroup=>'M'
158
- end
159
- end
160
-
161
- it 'should add a datastream as controlGroup M with blob set to file' do
162
- @test_object2 = MockAddNamedFileDatastream.new
163
- f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"))
164
- #these normally supplied in multi-part post request
165
- allow(f).to receive(:original_filename).and_return("minivan.jpg")
166
- allow(f).to receive(:content_type).and_return("image/jpeg")
167
- @test_object2.add_named_file_datastream("thumbnail",f)
168
- thumb = @test_object2.thumbnail.first
169
- expect(thumb.class).to eq(MockDS)
170
- expect(thumb.mimeType).to eq("image/jpeg")
171
- expect(thumb.dsid).to eq("THUMB1")
172
- expect(thumb.controlGroup).to eq("M")
173
- expect(thumb.dsLabel).to eq("minivan.jpg")
174
- #thumb.name.should == "thumbnail"
175
- # :prefix=>"THUMB", :content_type=>"image/jpeg", :dsid=>"THUMB1", :dsID=>"THUMB1",
176
- # :pid=>@test_object2.pid, :mimeType=>"image/jpeg", :controlGroup=>"M", :dsLabel=>"minivan.jpg", :name=>"thumbnail"}
177
-
178
- end
179
- end
180
-
181
- describe '#update_named_datastream' do
182
- before do
183
- class MockUpdateNamedDatastream < ActiveFedora::Base
184
- include ActiveFedora::DatastreamCollections
185
- has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
186
- end
187
- end
188
-
189
- it 'should update a datastream and not increment the dsid' do
190
- @test_object2 = MockUpdateNamedDatastream.new
191
- f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"))
192
- f2 = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ))
193
- allow(f).to receive(:content_type).and_return("image/jpeg")
194
- allow(f).to receive(:original_filename).and_return("minivan.jpg")
195
- allow(f2).to receive(:content_type).and_return("image/jpeg")
196
- allow(f2).to receive(:original_filename).and_return("dino.jpg")
197
- #check raise exception if dsid not supplied
198
- @test_object2.add_named_datastream("thumbnail",{:file=>f})
199
- had_exception = false
200
- begin
201
- @test_object2.update_named_datastream("thumbnail",{:file=>f})
202
- rescue
203
- had_exception = true
204
- end
205
- raise "Failed to raise exception if dsid not supplied" unless had_exception
206
- #raise exception if dsid does not exist
207
- had_exception = false
208
- begin
209
- @test_object2.update_named_datastream("thumbnail",{:file=>f,:dsid=>"THUMB100"})
210
- rescue
211
- had_exception = true
212
- end
213
- raise "Failed to raise exception if dsid does not exist" unless had_exception
214
- #check datastream is updated in place without new dsid
215
- expect(@test_object2.thumbnail.size).to eq(1)
216
- @test_object2.thumbnail_ids == ["THUMB1"]
217
- thumb1 = @test_object2.thumbnail.first
218
- expect(thumb1.dsid).to eq('THUMB1')
219
- expect(thumb1.pid).to eq(@test_object2.pid)
220
- expect(thumb1.dsLabel).to eq('minivan.jpg')
221
- f.rewind
222
- @test_object2.update_named_datastream("thumbnail",{:file=>f2,:dsid=>"THUMB1"})
223
- expect(@test_object2.thumbnail.size).to eq(1)
224
- @test_object2.thumbnail_ids == ["THUMB1"]
225
- # @test_object2.thumbnail.first.attributes.should == {:type=>"ActiveFedora::Datastream",
226
- # :content_type=>"image/jpeg",
227
- # :prefix=>"THUMB", :mimeType=>"image/jpeg",
228
- # :controlGroup=>"M", :dsid=>"THUMB1",
229
- # :pid=>@test_object2.pid, :dsID=>"THUMB1",
230
- # :name=>"thumbnail", :dsLabel=>"dino.jpg"}
231
- thumb1 = @test_object2.thumbnail.first
232
- expect(thumb1.dsid).to eq('THUMB1')
233
- expect(thumb1.pid).to eq(@test_object2.pid)
234
- expect(thumb1.dsLabel).to eq('dino.jpg')
235
- end
236
- end
237
- describe '#named_datastreams_desc' do
238
-
239
- before do
240
- class MockNamedDatastreamsDesc < ActiveFedora::Base
241
- include ActiveFedora::DatastreamCollections
242
- has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
243
- end
244
- end
245
-
246
- it 'should intialize a value to an empty hash and then not modify afterward' do
247
- @test_object2 = MockNamedDatastreamsDesc.new
248
- expect(@test_object2.named_datastreams_desc).to eq({"thumbnail"=>{:name=>"thumbnail",:prefix => "THUMB",
249
- :type=>"ActiveFedora::Datastream", :mimeType=>"image/jpeg",
250
- :controlGroup=>'M'}})
251
- end
252
- end
253
-
254
- describe '#is_named_datastream?' do
255
- before do
256
- class MockIsNamedDatastream < ActiveFedora::Base
257
- include ActiveFedora::DatastreamCollections
258
- has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
259
- end
260
- end
261
-
262
- it 'should return true if a named datastream exists in model' do
263
- @test_object2 = MockIsNamedDatastream.new
264
- expect(@test_object2.is_named_datastream?("thumbnail")).to eq(true)
265
- expect(@test_object2.is_named_datastream?("thumb")).to eq(false)
266
- end
267
- end
268
-
269
-
270
- describe '#named_datastreams' do
271
- before do
272
- class MockNamedDatastreams < ActiveFedora::Base
273
- include ActiveFedora::DatastreamCollections
274
- has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
275
- has_datastream :name=>"high", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
276
- has_datastream :name=>"external", :type=>ActiveFedora::Datastream, :controlGroup=>'E'
277
- end
278
- end
279
-
280
- it 'should return a hash of datastream names to arrays of datastreams' do
281
- @test_object2 = MockNamedDatastreams.new
282
- f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg" ))
283
- allow(f).to receive(:content_type).and_return("image/jpeg")
284
- allow(f).to receive(:original_filename).and_return("minivan.jpg")
285
- f2 = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ))
286
- allow(f2).to receive(:content_type).and_return("image/jpeg")
287
- allow(f2).to receive(:original_filename).and_return("dino.jpg")
288
- @test_object2.thumbnail_file_append(f)
289
- @test_object2.high_file_append(f2)
290
- @test_object2.external_append({:dsLocation=>"http://myresource.com"})
291
- datastreams = @test_object2.named_datastreams
292
- expect(datastreams.keys.include?("thumbnail")).to eq(true)
293
- expect(datastreams.keys.include?("external")).to eq(true)
294
- expect(datastreams.keys.include?("high")).to eq(true)
295
- expect(datastreams.keys.size).to eq(3)
296
- expect(datastreams["thumbnail"].size).to eq(1)
297
- expect(datastreams["thumbnail"].first.dsid).to eq('THUMB1')
298
- expect(datastreams["thumbnail"].first.dsLabel).to eq('minivan.jpg')
299
- expect(datastreams["thumbnail"].first.controlGroup).to eq("M")
300
-
301
- expect(datastreams["external"].size).to eq(1)
302
- expect(datastreams["external"].first.dsid).to eq("EXTERNAL1")
303
- expect(datastreams["external"].first.dsLocation).to eq("http://myresource.com")
304
- expect(datastreams["external"].first.controlGroup).to eq("E")
305
-
306
- expect(datastreams["high"].size).to eq(1)
307
- expect(datastreams["high"].first.dsLabel).to eq('dino.jpg')
308
- expect(datastreams["high"].first.controlGroup).to eq("M")
309
- expect(datastreams["high"].first.dsid).to eq("HIGH1")
310
- end
311
- end
312
-
313
-
314
-
315
- describe '#named_datastreams_ids' do
316
- before do
317
- class MockNamedDatastreamsIds < ActiveFedora::Base
318
- include ActiveFedora::DatastreamCollections
319
- has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
320
- has_datastream :name=>"high", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
321
- has_datastream :name=>"external", :type=>ActiveFedora::Datastream, :controlGroup=>'E'
322
- end
323
- end
324
-
325
- it 'should provide a hash of datastreams names to array of datastream ids' do
326
- @test_object2 = MockNamedDatastreamsIds.new
327
- f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg" ))
328
- allow(f).to receive(:content_type).and_return("image/jpeg")
329
- allow(f).to receive(:original_filename).and_return("minivan.jpg")
330
- f2 = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ))
331
- allow(f2).to receive(:content_type).and_return("image/jpeg")
332
- allow(f2).to receive(:original_filename).and_return("dino.jpg")
333
- @test_object2.thumbnail_file_append(f)
334
- @test_object2.high_file_append(f2)
335
- @test_object2.external_append({:dsLocation=>"http://myresource.com"})
336
- expect(@test_object2.named_datastreams_ids).to eq({"thumbnail"=>["THUMB1"],"high"=>["HIGH1"],"external"=>["EXTERNAL1"]})
337
- end
338
- end
339
-
340
-
341
- describe '#create_named_datastream_finders' do
342
- before do
343
- class MockCreateNamedDatastreamFinder < ActiveFedora::Base
344
- include ActiveFedora::DatastreamCollections
345
- has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
346
- has_datastream :name=>"high", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
347
- end
348
- end
349
-
350
- it 'should create helper methods to get named datastreams or dsids' do
351
- @test_object2 = MockCreateNamedDatastreamFinder.new
352
- expect(@test_object2).to respond_to(:thumbnail)
353
- expect(@test_object2).to respond_to(:thumbnail_ids)
354
- expect(@test_object2).to respond_to(:high)
355
- expect(@test_object2).to respond_to(:high_ids)
356
- f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"))
357
- f2 = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino.jpg" ))
358
- allow(f2).to receive(:original_filename).and_return("dino.jpg")
359
- allow(f).to receive(:content_type).and_return("image/jpeg")
360
- @test_object2.add_named_datastream("thumbnail",{:content_type=>"image/jpeg",:blob=>f, :label=>"testDS"})
361
- @test_object2.add_named_datastream("high",{:content_type=>"image/jpeg",:blob=>f2})
362
- @test_object2.add_named_datastream("high",{:content_type=>"image/jpeg",:blob=>f2})
363
- t2_thumb1 = @test_object2.thumbnail.first
364
- expect(t2_thumb1.mimeType).to eq("image/jpeg")
365
- expect(t2_thumb1.controlGroup).to eq("M")
366
- expect(t2_thumb1.dsLabel).to eq("testDS")
367
- expect(t2_thumb1.pid).to eq(@test_object2.pid)
368
- expect(t2_thumb1.dsid).to eq("THUMB1")
369
- # :type=>"ActiveFedora::Datastream",
370
- # :prefix=>"THUMB", :content_type=>"image/jpeg", :dsid=>"THUMB1", :dsID=>"THUMB1",
371
- # :pid=>@test_object2.pid, :mimeType=>"image/jpeg", :controlGroup=>"M", :dsLabel=>"testDS", :name=>"thumbnail", :label=>"testDS"}
372
- expect(@test_object2.thumbnail_ids).to eq(["THUMB1"])
373
- @test_object2.high_ids.include?("HIGH1") == true
374
- @test_object2.high_ids.include?("HIGH2") == true
375
- expect(@test_object2.high_ids.size).to eq(2)
376
- #just check returning datastream object at this point
377
- expect(@test_object2.high.first.class).to eq(ActiveFedora::Datastream)
378
- end
379
- end
380
-
381
- describe '#create_named_datastream_update_methods' do
382
- before do
383
- class MockCreateNamedDatastreamUpdateMethods < ActiveFedora::Base
384
- include ActiveFedora::DatastreamCollections
385
- has_datastream :name=>"thumbnail",:prefix => "THUMB", :type=>ActiveFedora::Datastream, :mimeType=>"image/jpeg", :controlGroup=>'M'
386
- has_datastream :name=>"EAD", :type=>ActiveFedora::Datastream, :mimeType=>"application/xml", :controlGroup=>'M'
387
- has_datastream :name=>"external", :type=>ActiveFedora::Datastream, :controlGroup=>'E'
388
- end
389
- end
390
-
391
- it 'should create append method for each has_datastream entry' do
392
- @test_object2 = MockCreateNamedDatastreamUpdateMethods.new
393
- @test_object3 = MockCreateNamedDatastreamUpdateMethods.new
394
- expect(@test_object2).to respond_to(:thumbnail_append)
395
- expect(@test_object2).to respond_to(:ead_append)
396
- f = File.new(File.join( File.dirname(__FILE__), "../fixtures/minivan.jpg"))
397
- allow(f).to receive(:content_type).and_return("image/jpeg")
398
- allow(f).to receive(:original_filename).and_return("minivan.jpg")
399
- @test_object2.thumbnail_file_append(f)
400
- t2_thumb1 = @test_object2.thumbnail.first
401
- expect(t2_thumb1.mimeType).to eq("image/jpeg")
402
- expect(t2_thumb1.dsLabel).to eq("minivan.jpg")
403
- expect(t2_thumb1.pid).to eq(@test_object2.pid)
404
- expect(t2_thumb1.dsid).to eq("THUMB1")
405
- @test_object3.thumbnail_append({:file=>f})
406
- t3_thumb1 = @test_object3.thumbnail.first
407
- expect(t3_thumb1.mimeType).to eq("image/jpeg")
408
- expect(t3_thumb1.dsLabel).to eq("minivan.jpg")
409
- expect(t3_thumb1.pid).to eq(@test_object3.pid)
410
- expect(t3_thumb1.dsid).to eq("THUMB1")
411
- @test_object3.external_append({:dsLocation=>"http://myresource.com"})
412
- t3_external1 = @test_object3.external.first
413
- expect(t3_external1.dsLabel).to eq("http://myresource.com")
414
- expect(t3_external1.dsLocation).to eq("http://myresource.com")
415
- expect(t3_external1.pid).to eq(@test_object3.pid)
416
- expect(t3_external1.dsid).to eq("EXTERNAL1")
417
- t3_external1.controlGroup == 'E'
418
- end
419
- end
420
- end