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
@@ -0,0 +1,164 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveFedora::AttachedFiles do
4
+ describe "serializing datastreams" do
5
+ before do
6
+ class TestingMetadataSerializing < ActiveFedora::Base
7
+ has_metadata "nokogiri_autocreate_on", autocreate: true, type: ActiveFedora::OmDatastream
8
+ has_metadata "nokogiri_autocreate_off", autocreate: false, type: ActiveFedora::OmDatastream
9
+ end
10
+ end
11
+
12
+ after do
13
+ Object.send(:remove_const, :TestingMetadataSerializing)
14
+ end
15
+
16
+ subject { TestingMetadataSerializing.new }
17
+
18
+ it "should work" do
19
+ subject.save(:validate => false)
20
+ expect(subject.nokogiri_autocreate_on).to_not be_new_record
21
+ expect(subject.nokogiri_autocreate_off).to be_new_record
22
+ end
23
+ end
24
+
25
+ describe "#has_file_datastream" do
26
+ before do
27
+ class HasFile < ActiveFedora::Base
28
+ has_file_datastream "file_ds"
29
+ has_file_datastream "file_ds2", autocreate: false
30
+ end
31
+ end
32
+
33
+ after do
34
+ has_file.delete
35
+ Object.send(:remove_const, :HasFile)
36
+ end
37
+
38
+ let(:has_file) { HasFile.create("test:ds_versionable_has_file") }
39
+
40
+ it "should create datastreams from the spec on new objects" do
41
+ has_file.file_ds.content = "blah blah blah"
42
+ expect(has_file.file_ds).to be_changed
43
+ expect(has_file.file_ds2).to_not be_changed # no autocreate
44
+ expect(has_file.file_ds2).to be_new_record
45
+ has_file.save
46
+ has_file.reload
47
+ expect(has_file.file_ds).to_not be_changed
48
+ expect(has_file.file_ds2).to_not be_changed # no autocreate
49
+ expect(has_file.file_ds2).to be_new_record
50
+ end
51
+ end
52
+
53
+ describe "Datastreams synched together" do
54
+ before do
55
+ class DSTest < ActiveFedora::Base
56
+ def load_attached_files
57
+ super
58
+ unless attached_files.keys.include? :test_ds
59
+ add_file_datastream("XXX", dsid: 'test_ds', mime_type: 'text/html')
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ let(:file) { DSTest.create }
66
+ let(:ds) { file.test_ds }
67
+
68
+ subject { ds.content }
69
+
70
+ after do
71
+ Object.send(:remove_const, :DSTest)
72
+ end
73
+
74
+ it { should == 'XXX'}
75
+
76
+ context "After updating" do
77
+ before do
78
+ ds.content = "Foobar"
79
+ file.save!
80
+ end
81
+
82
+ it "Should update datastream" do
83
+ expect(DSTest.find(file.id).attached_files['test_ds'].content).to eq 'Foobar'
84
+ expect(DSTest.find(file.id).test_ds.content).to eq 'Foobar'
85
+ end
86
+ end
87
+
88
+ end
89
+
90
+ describe "an instance of ActiveFedora::Base" do
91
+ let(:obj) { ActiveFedora::Base.new }
92
+
93
+ describe ".attached_files" do
94
+ subject { obj.attached_files }
95
+ it "should return a Hash of datastreams from fedora" do
96
+ expect(subject).to be_a_kind_of(ActiveFedora::FilesHash)
97
+ expect(subject).to be_empty
98
+ end
99
+
100
+ it "should initialize the datastream pointers with @new_object=false" do
101
+ subject.each_value do |ds|
102
+ expect(ds).to_not be_new
103
+ end
104
+ end
105
+ end
106
+
107
+ describe ".metadata_streams" do
108
+ let(:mds1) { ActiveFedora::SimpleDatastream.new }
109
+ let(:mds2) { ActiveFedora::QualifiedDublinCoreDatastream.new }
110
+ let(:fds) { ActiveFedora::File.new }
111
+ before do
112
+ fds = ActiveFedora::File.new
113
+ obj.attach_file(mds1, 'md1')
114
+ obj.attach_file(mds2, 'qdc')
115
+ obj.attach_file(fds, 'fds')
116
+ end
117
+
118
+ it "should return all of the datastreams from the object that are kinds of OmDatastream " do
119
+ expect(obj.metadata_streams).to match_array [mds1, mds2]
120
+ end
121
+ end
122
+
123
+ describe '.add_file_datastream' do
124
+ before do
125
+ f = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino_jpg_no_file_ext" ))
126
+ obj.add_file_datastream(f, mime_type: "image/jpeg")
127
+ obj.save
128
+ end
129
+
130
+ it "should set the correct mime_type if :mime_type is passed in and path does not contain correct extension" do
131
+ expect(obj.reload.attached_files["DS1"].mime_type).to eq "image/jpeg"
132
+ end
133
+ end
134
+
135
+ describe '.attach_file' do
136
+ let(:ds) { ActiveFedora::File.new }
137
+
138
+ it "should be able to add datastreams" do
139
+ expect(obj.attach_file(ds, 'DS1')).to eq 'DS1'
140
+ end
141
+
142
+ it "adding and saving should add the datastream to the datastreams array" do
143
+ ds.content = fixture('dino.jpg').read
144
+ expect(obj.attached_files).to_not have_key(:DS1)
145
+ obj.attach_file(ds, 'DS1')
146
+ obj.save
147
+ expect(obj.attached_files).to have_key(:DS1)
148
+ end
149
+
150
+ end
151
+
152
+ describe "retrieving datastream content" do
153
+ let(:obj) { ActiveFedora::Base.create }
154
+ after { obj.destroy }
155
+
156
+ let(:ds) { ActiveFedora::File.new(obj.uri+'/DS1').tap {|ds| ds.content = "foo"; ds.save } }
157
+
158
+ it "should retrieve blobs that match the saved blobs" do
159
+ obj.attach_file(ds, 'DS1')
160
+ expect(obj.reload.attached_files["DS1"].content).to eq "foo"
161
+ end
162
+ end
163
+ end
164
+ end
@@ -2,32 +2,93 @@ require 'spec_helper'
2
2
 
3
3
  describe "delegating attributes" do
4
4
  before :all do
5
+ class PropertiesDatastream < ActiveFedora::OmDatastream
6
+ set_terminology do |t|
7
+ t.root(path: "fields")
8
+ t.depositor index_as: [:symbol, :stored_searchable]
9
+ end
10
+ end
5
11
  class TitledObject < ActiveFedora::Base
6
12
  has_metadata 'foo', type: ActiveFedora::SimpleDatastream do |m|
7
13
  m.field "title", :string
8
14
  end
9
15
  has_attributes :title, datastream: 'foo', multiple: false
10
16
  end
17
+ class RdfObject < ActiveFedora::Base
18
+ contains 'foo', class_name: 'PropertiesDatastream'
19
+ has_attributes :depositor, datastream: :foo, multiple: false
20
+ property :resource_type, predicate: ::RDF::DC.type do |index|
21
+ index.as :stored_searchable, :facetable
22
+ end
23
+ end
11
24
  end
12
25
  after :all do
13
26
  Object.send(:remove_const, :TitledObject)
27
+ Object.send(:remove_const, :RdfObject)
28
+ Object.send(:remove_const, :PropertiesDatastream)
14
29
  end
15
30
 
16
- describe "save" do
17
- subject do
18
- obj = TitledObject.create
19
- obj.title = "Hydra for Dummies"
20
- obj.save
21
- obj
31
+ context "with a simple datastream" do
32
+ describe "save" do
33
+ subject do
34
+ obj = TitledObject.create
35
+ obj.title = "Hydra for Dummies"
36
+ obj.save
37
+ obj
38
+ end
39
+ it "should keep a list of changes after a successful save" do
40
+ expect(subject.previous_changes).to_not be_empty
41
+ expect(subject.previous_changes.keys).to include("title")
42
+ end
43
+ it "should clean out changes" do
44
+ expect(subject).to_not be_title_changed
45
+ expect(subject.changes).to be_empty
46
+ end
22
47
  end
23
- it "should keep a list of changes after a successful save" do
24
- expect(subject.previous_changes).to_not be_empty
25
- expect(subject.previous_changes.keys).to include("title")
48
+ end
49
+
50
+ context "with an rdf property" do
51
+
52
+ subject { RdfObject.create }
53
+
54
+ describe "getting attributes" do
55
+
56
+ before do
57
+ subject.depositor = "foo"
58
+ subject.resource_type = "bar"
59
+ subject.save
60
+ end
61
+
62
+ specify "using strings for keys" do
63
+ expect(subject["depositor"]).to eql("foo")
64
+ expect(subject["resource_type"]).to eql(["bar"])
65
+ end
66
+ specify "using symbols for keys" do
67
+ expect(subject[:depositor]).to eql("foo")
68
+ expect(subject[:resource_type]).to eql(["bar"])
69
+ end
70
+
26
71
  end
27
- it "should clean out changes" do
28
- expect(subject).to_not be_title_changed
29
- expect(subject.changes).to be_empty
72
+
73
+ describe "setting attributes" do
74
+
75
+ after do
76
+ expect(subject.depositor).to eql("foo")
77
+ expect(subject.resource_type).to eql(["bar"])
78
+ end
79
+ specify "using strings for keys" do
80
+ subject["depositor"] = "foo"
81
+ subject["resource_type"] = "bar"
82
+ subject.save
83
+ end
84
+ specify "using symbols for keys" do
85
+ subject[:depositor] = "foo"
86
+ subject[:resource_type] = "bar"
87
+ subject.save
88
+ end
89
+
30
90
  end
91
+
31
92
  end
32
93
  end
33
94
 
@@ -14,9 +14,9 @@ describe ActiveFedora::Base do
14
14
 
15
15
  context '#changed_for_autosave?' do
16
16
  before(:each) do
17
- allow(subject).to receive(:new_record?).and_return(false)
18
- allow(subject).to receive(:changed?).and_return(false)
19
- allow(subject).to receive(:marked_for_destruction?).and_return(false)
17
+ expect(subject).to receive(:new_record?).and_return(false)
18
+ expect(subject).to receive(:changed?).and_return(false)
19
+ expect(subject).to receive(:marked_for_destruction?).and_return(false)
20
20
  end
21
21
  it {
22
22
  expect { subject.changed_for_autosave? }.to_not raise_error
@@ -1,12 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "A base object with metadata" do
4
- before :all do
4
+ before :each do
5
5
  class MockAFBaseRelationship < ActiveFedora::Base
6
- has_metadata 'foo', type: Hydra::ModsArticleDatastream
6
+ has_metadata 'foo', type: Hydra::ModsArticleDatastream
7
7
  end
8
8
  end
9
- after :all do
9
+ after :each do
10
10
  Object.send(:remove_const, :MockAFBaseRelationship)
11
11
  end
12
12
  describe "a new document" do
@@ -16,31 +16,20 @@ describe "A base object with metadata" do
16
16
  @obj.foo.person = "bob"
17
17
  @obj.save
18
18
  end
19
+
19
20
  it "should save the datastream." do
20
- obj = ActiveFedora::Base.find(@obj.pid)
21
- expect(obj.foo).not_to be_new
22
- expect(obj.foo.person).to eq(['bob'])
21
+ obj = ActiveFedora::Base.find(@obj.id)
22
+ expect(obj.foo).to_not be_new_record
23
+ expect(obj.foo.person).to eq ['bob']
23
24
  person_field = ActiveFedora::SolrService.solr_name('foo__person', type: :string)
24
- solr_result = ActiveFedora::SolrService.query("{!raw f=id}#{@obj.pid}", :fl=>"id #{person_field}").first
25
- expect(solr_result).to eq("id"=>@obj.pid, person_field =>['bob'])
26
- end
27
- end
28
-
29
- describe "setting object state" do
30
- it "should store it" do
31
- obj = MockAFBaseRelationship.create
32
- obj.state='D'
33
- obj.save!
34
- obj.reload
35
- expect(obj.state).to eq('D')
25
+ solr_result = ActiveFedora::SolrService.query("{!raw f=id}#{@obj.id}", :fl=>"id #{person_field}").first
26
+ expect(solr_result).to eq("id"=>@obj.id, person_field =>['bob'])
36
27
  end
37
28
  end
38
29
 
39
30
  describe "that already exists in the repo" do
40
31
  before do
41
32
  @release = MockAFBaseRelationship.create()
42
- @release.add_relationship(:is_governed_by, 'info:fedora/test:catalog-fixture')
43
- @release.add_relationship(:is_part_of, 'info:fedora/test:777')
44
33
  @release.foo.person = "test foo content"
45
34
  @release.save
46
35
  end
@@ -50,56 +39,18 @@ describe "A base object with metadata" do
50
39
  @release.save!
51
40
  end
52
41
  it "should save the datastream." do
53
- expect(MockAFBaseRelationship.find(@release.pid).foo.person).to eq(['frank'])
42
+ expect(MockAFBaseRelationship.find(@release.id).foo.person).to eq ['frank']
54
43
  person_field = ActiveFedora::SolrService.solr_name('foo__person', type: :string)
55
- expect(ActiveFedora::SolrService.query("id:#{@release.pid.gsub(":", "\\:")}", :fl=>"id #{person_field}").first).to eq({"id"=>@release.pid, person_field =>['frank']})
56
- end
57
- end
58
- describe "clone_into a new object" do
59
- before do
60
- begin
61
- new_object = MockAFBaseRelationship.find('test:999')
62
- new_object.delete
63
- rescue ActiveFedora::ObjectNotFoundError
64
- end
65
-
66
- new_object = MockAFBaseRelationship.create(:pid => 'test:999')
67
- @release.clone_into(new_object)
68
- @new_object = MockAFBaseRelationship.find('test:999')
69
- end
70
- it "should have all the assertions" do
71
- expect(@new_object.rels_ext.content).to be_equivalent_to '<rdf:RDF xmlns:ns1="info:fedora/fedora-system:def/model#" xmlns:ns2="info:fedora/fedora-system:def/relations-external#" xmlns:ns0="http://projecthydra.org/ns/relations#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
72
- <rdf:Description rdf:about="info:fedora/test:999">
73
- <ns0:isGovernedBy rdf:resource="info:fedora/test:catalog-fixture"/>
74
- <ns1:hasModel rdf:resource="info:fedora/afmodel:MockAFBaseRelationship"/>
75
- <ns2:isPartOf rdf:resource="info:fedora/test:777"/>
76
-
77
- </rdf:Description>
78
- </rdf:RDF>'
79
- end
80
- it "should have the other datastreams too" do
81
- expect(@new_object.datastreams.keys).to include "foo"
82
- expect(@new_object.foo.content).to be_equivalent_to @release.foo.content
44
+ expect(ActiveFedora::SolrService.query("id:\"#{@release.id}\"", :fl=>"id #{person_field}").first).to eq("id"=>@release.id, person_field =>['frank'])
83
45
  end
84
46
  end
85
- describe "clone" do
86
- before do
87
- @new_object = @release.clone
47
+ describe "when trying to create it again" do
48
+ it "should raise an error" do
49
+ expect { MockAFBaseRelationship.create(id: @release.id) }.to raise_error(ActiveFedora::IllegalOperation)
50
+ @release.reload
51
+ expect(@release.foo.person).to include('test foo content')
88
52
  end
89
- it "should have all the assertions" do
90
- expect(@new_object.rels_ext.content).to be_equivalent_to '<rdf:RDF xmlns:ns1="info:fedora/fedora-system:def/model#" xmlns:ns2="info:fedora/fedora-system:def/relations-external#" xmlns:ns0="http://projecthydra.org/ns/relations#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
91
- <rdf:Description rdf:about="info:fedora/'+ @new_object.pid+'">
92
- <ns0:isGovernedBy rdf:resource="info:fedora/test:catalog-fixture"/>
93
- <ns1:hasModel rdf:resource="info:fedora/afmodel:MockAFBaseRelationship"/>
94
- <ns2:isPartOf rdf:resource="info:fedora/test:777"/>
95
53
 
96
- </rdf:Description>
97
- </rdf:RDF>'
98
- end
99
- it "should have the other datastreams too" do
100
- expect(@new_object.datastreams.keys).to include "foo"
101
- expect(@new_object.foo.content).to be_equivalent_to @release.foo.content
102
- end
103
54
  end
104
55
  end
105
56
 
@@ -109,7 +60,7 @@ describe "A base object with metadata" do
109
60
  @object.foo.person = 'bob'
110
61
  @object.save
111
62
 
112
- @object2 = @object.class.find(@object.pid)
63
+ @object2 = @object.class.find(@object.id)
113
64
 
114
65
  @object2.foo.person = 'dave'
115
66
  @object2.save
@@ -117,7 +68,7 @@ describe "A base object with metadata" do
117
68
 
118
69
  it 'should requery Fedora' do
119
70
  @object.reload
120
- expect(@object.foo.person).to eq(['dave'])
71
+ expect(@object.foo.person).to eq ['dave']
121
72
  end
122
73
 
123
74
  it 'should raise an error if not persisted' do
@@ -127,318 +78,73 @@ describe "A base object with metadata" do
127
78
  end
128
79
  end
129
80
 
130
- describe "Datastreams synched together" do
131
- before do
132
- class DSTest < ActiveFedora::Base
133
- def load_datastreams
134
- super
135
- unless self.datastreams.keys.include? 'test_ds'
136
- add_file_datastream("XXX",:dsid=>'test_ds', :mimeType=>'text/html')
137
- end
138
- end
139
- end
140
- end
141
- it "Should update datastream" do
142
- @nc = DSTest.new
143
- @nc.save
144
- expect(@nc.test_ds.content).to eq('XXX')
145
- ds = @nc.datastreams['test_ds']
146
- ds.content = "Foobar"
147
- @nc.save
148
- expect(DSTest.find(@nc.pid).datastreams['test_ds'].content).to eq('Foobar')
149
- expect(DSTest.find(@nc.pid).test_ds.content).to eq('Foobar')
150
- end
151
-
152
- end
153
-
154
-
155
-
156
-
157
81
  describe ActiveFedora::Base do
158
- before :all do
159
- class MockAFBaseRelationship < ActiveFedora::Base
160
- end
161
-
162
- class MockAFBaseFromSolr < ActiveFedora::Base
163
- has_metadata :name => "properties", :type => ActiveFedora::SimpleDatastream do |m|
164
- m.field "holding_id", :string
165
- end
166
-
167
- has_metadata :name => "descMetadata", :type => ActiveFedora::QualifiedDublinCoreDatastream do |m|
168
- m.field "created", :date, :xml_node => "created"
169
- m.field "language", :string, :xml_node => "language"
170
- m.field "creator", :string, :xml_node => "creator"
171
- # Created remaining fields
172
- m.field "geography", :string, :xml_node => "geography"
173
- m.field "title", :string, :xml_node => "title"
82
+ describe "a saved object" do
83
+ before do
84
+ class Book < ActiveFedora::Base
85
+ property :title, predicate: ::RDF::DC.title
174
86
  end
175
87
  end
176
- end
177
-
178
- before(:all) do
179
- ActiveFedora::SolrService.register(ActiveFedora.solr_config[:url])
180
- end
181
88
 
182
- after :all do
183
- Object.send(:remove_const, :MockAFBaseRelationship)
184
- end
185
-
186
- before(:each) do
187
- @test_object = ActiveFedora::Base.new
188
- @test_object.save
189
- end
190
-
191
- after(:each) do
192
- begin
193
- @test_object.delete
194
- rescue
195
- end
196
- begin
197
- @test_object2.delete
198
- rescue
199
- end
200
- begin
201
- @test_object3.delete
202
- rescue
203
- end
204
- begin
205
- @test_object4.delete
206
- rescue
207
- end
208
- begin
209
- @test_object5.delete
210
- rescue
211
- end
212
- end
213
-
214
- describe ".initialize" do
215
- it "calling constructor should create a new Fedora Object" do
216
- expect(@test_object.errors).to be_blank
217
- expect(@test_object.pid).not_to be_nil
218
- end
219
- end
220
-
221
- describe "#save" do
222
- before(:each) do
223
- @test_object2 = ActiveFedora::Base.new
89
+ after do
90
+ Object.send(:remove_const, :Book)
224
91
  end
92
+ let!(:obj) { Book.create }
225
93
 
226
- after(:each) do
227
- @test_object2.delete
228
- end
229
-
230
- it "passing namespace to constructor with no pid should generate a pid with the supplied namespace" do
231
- @test_object2 = ActiveFedora::Base.new({:namespace=>"randomNamespace"})
232
- # will be nil if match failed, otherwise will equal pid
233
- @test_object2.save
234
- expect(@test_object2.pid.match('randomNamespace:\d+').to_a.first).to eq(@test_object2.pid)
235
- end
94
+ after { obj.destroy unless obj.destroyed? }
236
95
 
237
- it "should set the CMA hasModel relationship in the Rels-EXT" do
238
- @test_object2.save
239
- rexml = REXML::Document.new(@test_object2.datastreams["RELS-EXT"].content)
240
- # Purpose: confirm that the isMemberOf entries exist and have real RDF in them
241
- expect(rexml.root.elements["rdf:Description/ns0:hasModel"].attributes["rdf:resource"]).to eq('info:fedora/afmodel:ActiveFedora_Base')
96
+ describe "errors" do
97
+ subject { obj.errors }
98
+ it { should be_empty }
242
99
  end
243
- it "should merge attributes from fedora into attributes hash" do
244
- @test_object2.save
245
- inner_object = @test_object2.inner_object
246
- expect(inner_object.pid).to eq(@test_object2.pid)
247
- expect(inner_object).to respond_to(:lastModifiedDate)
248
- end
249
-
250
- it 'when the object is updated, it also updates modification time field in solr' do
251
- @test_object2.save
252
-
253
- # Make sure the modification time changes by at least 1 second
254
- sleep 1
255
-
256
- @test_object2.state = 'I'
257
- @test_object2.save
258
- @test_object2.reload
259
-
260
- pid = @test_object2.pid.sub(':', '\:')
261
- solr_doc = ActiveFedora::SolrService.query("id:#{pid}")
262
100
 
263
- new_time_fedora = Time.parse(@test_object2.modified_date).to_i
264
- new_time_solr = Time.parse(solr_doc.first['system_modified_dtsi']).to_i
265
- expect(new_time_solr).to eq(new_time_fedora)
101
+ describe "id" do
102
+ subject { obj.id }
103
+ it { should_not be_nil }
266
104
  end
267
- end
268
-
269
- describe ".datastreams" do
270
- it "should return a Hash of datastreams from fedora" do
271
- datastreams = @test_object.datastreams
272
- expect(datastreams).to be_a_kind_of(ActiveFedora::DatastreamHash)
273
- datastreams.each_value do |ds|
274
- expect(ds).to be_a_kind_of(ActiveFedora::Datastream)
105
+
106
+ context "when updated with changes after one second" do
107
+ before do
108
+ obj.title = ['sample']
109
+ sleep 1
275
110
  end
276
- expect(@test_object.datastreams["DC"]).to be_an_instance_of(ActiveFedora::Datastream)
277
- expect(datastreams["DC"]).not_to be_nil
278
- expect(datastreams["DC"]).to be_an_instance_of(ActiveFedora::Datastream)
279
- end
280
- it "should initialize the datastream pointers with @new_object=false" do
281
- datastreams = @test_object.datastreams
282
- datastreams.each_value do |ds|
283
- expect(ds).not_to be_new
111
+
112
+ it 'updates the modification time field in solr' do
113
+ expect { obj.save }.to change {
114
+ ActiveFedora::SolrService.query("id:\"#{obj.id}\"").first['system_modified_dtsi']
115
+ }
284
116
  end
285
117
  end
286
- end
287
-
288
- describe ".metadata_streams" do
289
- it "should return all of the datastreams from the object that are kinds of OmDatastream " do
290
- mds1 = ActiveFedora::SimpleDatastream.new(@test_object.inner_object, "md1")
291
- mds2 = ActiveFedora::QualifiedDublinCoreDatastream.new(@test_object.inner_object, "qdc")
292
- fds = ActiveFedora::Datastream.new(@test_object.inner_object, "fds")
293
- @test_object.add_datastream(mds1)
294
- @test_object.add_datastream(mds2)
295
- @test_object.add_datastream(fds)
296
-
297
- result = @test_object.metadata_streams
298
- expect(result.length).to eq(2)
299
- expect(result).to include(mds1)
300
- expect(result).to include(mds2)
301
- end
302
- end
303
-
304
- describe '.rels_ext' do
305
- it "should retrieve RelsExtDatastream object via rels_ext method" do
306
- expect(@test_object.rels_ext).to be_instance_of(ActiveFedora::RelsExtDatastream)
307
- end
308
-
309
- it 'should create the RELS-EXT datastream if it doesnt exist' do
310
- test_object = ActiveFedora::Base.new
311
- #test_object.datastreams["RELS-EXT"].should == nil
312
- test_object.rels_ext
313
- expect(test_object.datastreams["RELS-EXT"]).not_to eq(nil)
314
- expect(test_object.datastreams["RELS-EXT"].class).to eq(ActiveFedora::RelsExtDatastream)
315
- end
316
- end
317
118
 
318
- describe '.add_relationship' do
319
- it "should update the RELS-EXT datastream and relationships should end up in Fedora when the object is saved" do
320
- @test_object.add_relationship(:is_member_of, "info:fedora/demo:5")
321
- @test_object.add_relationship(:is_member_of, "info:fedora/demo:10")
322
- @test_object.add_relationship(:conforms_to, "info:fedora/afmodel:OralHistory")
323
- @test_object.save
324
- rexml = REXML::Document.new(@test_object.datastreams["RELS-EXT"].content)
325
- # Purpose: confirm that the isMemberOf entries exist and have real RDF in them
326
- expect(rexml.root.attributes["xmlns:ns1"]).to eq('info:fedora/fedora-system:def/relations-external#')
327
- expect(rexml.root.elements["rdf:Description/ns1:isMemberOf[@rdf:resource='info:fedora/demo:5']"]).not_to be_nil
328
- expect(rexml.root.elements["rdf:Description/ns1:isMemberOf[@rdf:resource='info:fedora/demo:10']"]).not_to be_nil
119
+ describe "#create_date" do
120
+ subject { obj.create_date }
121
+ it { should_not be_nil }
329
122
  end
330
- end
331
-
332
- describe '.add_file_datastream' do
333
123
 
334
- it "should set the correct mimeType if :mime_type, :mimeType, or :content_type passed in and path does not contain correct extension" do
335
- f = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino_jpg_no_file_ext" ))
336
- @test_object.add_file_datastream(f)
337
- @test_object.save
338
- test_obj = ActiveFedora::Base.find(@test_object.pid)
339
- #check case where nothing passed in does not have correct mime type
340
- expect(test_obj.datastreams["DS1"].mimeType).to eq("application/octet-stream")
341
- @test_object2 = ActiveFedora::Base.new
342
- f = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino_jpg_no_file_ext" ))
343
- @test_object2.add_file_datastream(f,{:mimeType=>"image/jpeg"})
344
- @test_object2.save
345
- test_obj = ActiveFedora::Base.find(@test_object2.pid)
346
- expect(test_obj.datastreams["DS1"].mimeType).to eq("image/jpeg")
347
- @test_object3 = ActiveFedora::Base.new
348
- f = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino_jpg_no_file_ext" ))
349
- @test_object3.add_file_datastream(f,{:mime_type=>"image/jpeg"})
350
- @test_object3.save
351
- test_obj = ActiveFedora::Base.find(@test_object3.pid)
352
- expect(test_obj.datastreams["DS1"].mimeType).to eq("image/jpeg")
353
- @test_object4 = ActiveFedora::Base.new
354
- f = File.new(File.join( File.dirname(__FILE__), "../fixtures/dino_jpg_no_file_ext" ))
355
- @test_object4.add_file_datastream(f,{:content_type=>"image/jpeg"})
356
- @test_object4.save
357
- test_obj = ActiveFedora::Base.find(@test_object4.pid)
358
- expect(test_obj.datastreams["DS1"].mimeType).to eq("image/jpeg")
359
- end
360
- end
361
-
362
- describe '.add_datastream' do
363
-
364
- it "should be able to add datastreams" do
365
- ds = ActiveFedora::Datastream.new(@test_object.inner_object, 'DS1')
366
- expect(@test_object.add_datastream(ds)).to be_truthy
367
- end
368
-
369
- it "adding and saving should add the datastream to the datastreams array" do
370
- ds = ActiveFedora::Datastream.new(@test_object.inner_object, 'DS1')
371
- ds.content = fixture('dino.jpg').read
372
- expect(@test_object.datastreams).not_to have_key("DS1")
373
- @test_object.add_datastream(ds)
374
- ds.save
375
- expect(@test_object.datastreams).to have_key("DS1")
376
- end
377
-
378
- end
379
-
380
- it "should retrieve blobs that match the saved blobs" do
381
- ds = ActiveFedora::Datastream.new(@test_object.inner_object, 'DS1')
382
- ds.content = "foo"
383
- new_ds = ds.save
384
- @test_object.add_datastream(new_ds)
385
- expect(@test_object.class.find(@test_object.pid).datastreams["DS1"].content).to eq(new_ds.content)
386
- end
387
-
388
- describe ".create_date" do
389
- it "should return W3C date" do
390
- expect(@test_object.create_date).not_to be_nil
124
+ describe "#modified_date" do
125
+ subject { obj.modified_date }
126
+ it { should_not be_nil }
391
127
  end
392
- end
393
-
394
- describe ".modified_date" do
395
- it "should return nil before saving and a W3C date after saving" do
396
- expect(@test_object.modified_date).not_to be_nil
397
- end
398
- end
399
-
400
- describe "delete" do
401
-
402
- it "should delete the object from Fedora and Solr" do
403
- @test_object.save
404
- expect(ActiveFedora::Base.find_with_conditions(:id=>@test_object.pid).first["id"]).to eq(@test_object.pid)
405
- pid = @test_object.pid # store so we can access it after deletion
406
- @test_object.delete
407
- expect(ActiveFedora::Base.find_with_conditions(:id=>pid)).to be_empty
408
- end
409
- end
410
128
 
411
- describe '#remove_relationship' do
412
- it 'should remove a relationship from an object after a save' do
413
- @test_object2 = ActiveFedora::Base.new
414
- @test_object2.save
415
- @test_object.add_relationship(:has_part,@test_object2)
416
- @test_object.save
417
- @pid = @test_object.pid
418
- begin
419
- @test_object = ActiveFedora::Base.find(@pid)
420
- rescue => e
421
- puts "#{e.message}\n#{e.backtrace}"
422
- raise e
129
+ describe "delete" do
130
+ it "should delete the object from Fedora and Solr" do
131
+ expect {
132
+ obj.delete
133
+ }.to change { ActiveFedora::Base.exists?(obj.id) }.from(true).to(false)
423
134
  end
424
- expect(@test_object.object_relations[:has_part]).to include @test_object2.internal_uri
425
- @test_object.remove_relationship(:has_part,@test_object2)
426
- @test_object.save
427
- @test_object = ActiveFedora::Base.find(@pid)
428
- expect(@test_object.object_relations[:has_part]).to be_empty
429
135
  end
430
136
  end
431
-
432
137
 
138
+
433
139
  describe "#exists?" do
434
140
  let(:obj) { ActiveFedora::Base.create }
435
141
  it "should return true for objects that exist" do
436
142
  expect(ActiveFedora::Base.exists?(obj)).to be true
437
143
  end
438
- it "should return true for pids that exist" do
439
- expect(ActiveFedora::Base.exists?(obj.pid)).to be true
144
+ it "should return true for ids that exist" do
145
+ expect(ActiveFedora::Base.exists?(obj.id)).to be true
440
146
  end
441
- it "should return false for pids that don't exist" do
147
+ it "should return false for ids that don't exist" do
442
148
  expect(ActiveFedora::Base.exists?('test:missing_object')).to be false
443
149
  end
444
150
  it "should return false for nil" do