active-fedora 13.1.2 → 13.1.3

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 (140) hide show
  1. checksums.yaml +4 -4
  2. data/.github_changelog_generator +2 -0
  3. data/CHANGELOG.md +3362 -0
  4. data/CONTRIBUTING.md +23 -1
  5. data/README.md +4 -0
  6. data/active-fedora.gemspec +14 -13
  7. data/lib/active_fedora/version.rb +1 -1
  8. metadata +104 -206
  9. data/spec/config_helper.rb +0 -17
  10. data/spec/fixtures/dino.jpg +0 -0
  11. data/spec/fixtures/dino_jpg_no_file_ext +0 -0
  12. data/spec/fixtures/minivan.jpg +0 -0
  13. data/spec/fixtures/rails_root/config/fake_fedora.yml +0 -7
  14. data/spec/fixtures/rails_root/config/fedora.yml +0 -12
  15. data/spec/fixtures/rails_root/config/solr.yml +0 -15
  16. data/spec/fixtures/rails_root/config/solr_mappings.yml +0 -16
  17. data/spec/fixtures/rails_root/config/solr_mappings_af_0.1.yml +0 -9
  18. data/spec/fixtures/rails_root/config/solr_mappings_bl_2.4.yml +0 -17
  19. data/spec/integration/associations/rdf_spec.rb +0 -61
  20. data/spec/integration/associations_spec.rb +0 -680
  21. data/spec/integration/attached_files_spec.rb +0 -146
  22. data/spec/integration/attributes_spec.rb +0 -73
  23. data/spec/integration/autosave_association_spec.rb +0 -24
  24. data/spec/integration/base_spec.rb +0 -184
  25. data/spec/integration/basic_contains_association_spec.rb +0 -121
  26. data/spec/integration/belongs_to_association_spec.rb +0 -260
  27. data/spec/integration/caching_spec.rb +0 -59
  28. data/spec/integration/clean_connection_spec.rb +0 -21
  29. data/spec/integration/collection_association_spec.rb +0 -166
  30. data/spec/integration/date_time_properties_spec.rb +0 -41
  31. data/spec/integration/delete_all_spec.rb +0 -64
  32. data/spec/integration/direct_container_spec.rb +0 -250
  33. data/spec/integration/directly_contains_one_association_spec.rb +0 -96
  34. data/spec/integration/eradicate_spec.rb +0 -52
  35. data/spec/integration/fedora_solr_sync_spec.rb +0 -30
  36. data/spec/integration/file_fixity_spec.rb +0 -36
  37. data/spec/integration/file_spec.rb +0 -221
  38. data/spec/integration/generators/fedora_generator_spec.rb +0 -26
  39. data/spec/integration/generators/solr_generator_spec.rb +0 -23
  40. data/spec/integration/gone_spec.rb +0 -41
  41. data/spec/integration/has_and_belongs_to_many_associations_spec.rb +0 -414
  42. data/spec/integration/has_many_associations_spec.rb +0 -436
  43. data/spec/integration/has_subresource_spec.rb +0 -34
  44. data/spec/integration/indexing/descendant_fetcher_spec.rb +0 -64
  45. data/spec/integration/indexing_spec.rb +0 -110
  46. data/spec/integration/indirect_container_spec.rb +0 -290
  47. data/spec/integration/json_serialization_spec.rb +0 -32
  48. data/spec/integration/marshal_spec.rb +0 -39
  49. data/spec/integration/nested_attribute_spec.rb +0 -177
  50. data/spec/integration/nested_hash_resources_spec.rb +0 -43
  51. data/spec/integration/persistence_spec.rb +0 -37
  52. data/spec/integration/query_result_builder_spec.rb +0 -37
  53. data/spec/integration/rdf_nested_attributes_spec.rb +0 -85
  54. data/spec/integration/relation_delegation_spec.rb +0 -52
  55. data/spec/integration/relation_spec.rb +0 -117
  56. data/spec/integration/scoped_query_spec.rb +0 -134
  57. data/spec/integration/scoping_spec.rb +0 -48
  58. data/spec/integration/solr_hit_spec.rb +0 -32
  59. data/spec/integration/versionable_spec.rb +0 -256
  60. data/spec/integration/with_metadata_spec.rb +0 -111
  61. data/spec/lib/active_fedora/null_logger_spec.rb +0 -10
  62. data/spec/rcov.opts +0 -2
  63. data/spec/spec.opts +0 -5
  64. data/spec/spec_helper.rb +0 -106
  65. data/spec/support/an_active_model.rb +0 -29
  66. data/spec/unit/active_fedora/indexing/inserter_spec.rb +0 -35
  67. data/spec/unit/active_fedora_spec.rb +0 -118
  68. data/spec/unit/aggregation/list_source_spec.rb +0 -134
  69. data/spec/unit/aggregation/ordered_reader_spec.rb +0 -43
  70. data/spec/unit/association_hash_spec.rb +0 -64
  71. data/spec/unit/attached_files_spec.rb +0 -218
  72. data/spec/unit/attributes_spec.rb +0 -146
  73. data/spec/unit/base_active_model_spec.rb +0 -28
  74. data/spec/unit/base_cma_spec.rb +0 -15
  75. data/spec/unit/base_extra_spec.rb +0 -33
  76. data/spec/unit/base_spec.rb +0 -328
  77. data/spec/unit/builder/has_and_belongs_to_many_spec.rb +0 -8
  78. data/spec/unit/callback_spec.rb +0 -65
  79. data/spec/unit/change_set_spec.rb +0 -60
  80. data/spec/unit/checksum_spec.rb +0 -25
  81. data/spec/unit/code_configurator_spec.rb +0 -41
  82. data/spec/unit/collection_proxy_spec.rb +0 -25
  83. data/spec/unit/config_spec.rb +0 -18
  84. data/spec/unit/core/fedora_id_translator_spec.rb +0 -29
  85. data/spec/unit/core/fedora_uri_translator_spec.rb +0 -19
  86. data/spec/unit/core/logger_spec.rb +0 -18
  87. data/spec/unit/core_spec.rb +0 -242
  88. data/spec/unit/default_model_mapper_spec.rb +0 -39
  89. data/spec/unit/fedora_spec.rb +0 -31
  90. data/spec/unit/file/streaming_spec.rb +0 -33
  91. data/spec/unit/file_configurator_spec.rb +0 -295
  92. data/spec/unit/file_io_spec.rb +0 -137
  93. data/spec/unit/file_path_builder_spec.rb +0 -18
  94. data/spec/unit/file_spec.rb +0 -489
  95. data/spec/unit/files_hash_spec.rb +0 -52
  96. data/spec/unit/filter_spec.rb +0 -133
  97. data/spec/unit/finder_methods_spec.rb +0 -154
  98. data/spec/unit/fixity_service_spec.rb +0 -128
  99. data/spec/unit/forbidden_attributes_protection_spec.rb +0 -50
  100. data/spec/unit/has_and_belongs_to_many_association_spec.rb +0 -125
  101. data/spec/unit/has_many_association_spec.rb +0 -131
  102. data/spec/unit/indexers/global_indexer_spec.rb +0 -41
  103. data/spec/unit/indexing/map/index_object_spec.rb +0 -25
  104. data/spec/unit/indexing/map_spec.rb +0 -27
  105. data/spec/unit/indexing_service_spec.rb +0 -28
  106. data/spec/unit/indexing_spec.rb +0 -86
  107. data/spec/unit/inheritance_spec.rb +0 -60
  108. data/spec/unit/ldp_resource_spec.rb +0 -15
  109. data/spec/unit/loadable_from_json_spec.rb +0 -40
  110. data/spec/unit/logger_spec.rb +0 -19
  111. data/spec/unit/model_classifier_spec.rb +0 -49
  112. data/spec/unit/ordered_spec.rb +0 -367
  113. data/spec/unit/orders/list_node_spec.rb +0 -151
  114. data/spec/unit/orders/ordered_list_spec.rb +0 -335
  115. data/spec/unit/orders/reflection_spec.rb +0 -22
  116. data/spec/unit/pathing_spec.rb +0 -35
  117. data/spec/unit/persistence_spec.rb +0 -115
  118. data/spec/unit/property_predicate_spec.rb +0 -35
  119. data/spec/unit/property_spec.rb +0 -25
  120. data/spec/unit/query_result_builder_spec.rb +0 -31
  121. data/spec/unit/query_spec.rb +0 -307
  122. data/spec/unit/querying_spec.rb +0 -24
  123. data/spec/unit/rdf/indexing_service_spec.rb +0 -114
  124. data/spec/unit/rdf_vocab_spec.rb +0 -30
  125. data/spec/unit/readonly_spec.rb +0 -24
  126. data/spec/unit/reflection_spec.rb +0 -42
  127. data/spec/unit/rspec_matchers/belong_to_associated_active_fedora_object_matcher_spec.rb +0 -37
  128. data/spec/unit/rspec_matchers/have_many_associated_active_fedora_objects_matcher_spec.rb +0 -38
  129. data/spec/unit/rspec_matchers/have_predicate_matcher_spec.rb +0 -38
  130. data/spec/unit/schema_indexing_strategy_spec.rb +0 -68
  131. data/spec/unit/scoping_spec.rb +0 -67
  132. data/spec/unit/serializers_spec.rb +0 -19
  133. data/spec/unit/solr_config_options_spec.rb +0 -57
  134. data/spec/unit/solr_hit_spec.rb +0 -57
  135. data/spec/unit/solr_query_builder_spec.rb +0 -18
  136. data/spec/unit/solr_service_spec.rb +0 -165
  137. data/spec/unit/sparql_insert_spec.rb +0 -31
  138. data/spec/unit/validations_spec.rb +0 -92
  139. data/spec/unit/with_metadata/default_metadata_class_factory_spec.rb +0 -29
  140. data/spec/unit/with_metadata/metadata_node_spec.rb +0 -69
@@ -1,146 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::AttachedFiles do
4
- describe "#has_subresource" do
5
- before do
6
- class FooHistory < ActiveFedora::Base
7
- has_subresource 'child'
8
- end
9
- end
10
- after do
11
- Object.send(:remove_const, :FooHistory)
12
- end
13
-
14
- context "when the object exists" do
15
- let!(:o) { FooHistory.create }
16
- before do
17
- o.child.content = "HMMM"
18
- o.save
19
- end
20
-
21
- it "does not need to do a head on the children" do
22
- f = FooHistory.find(o.id)
23
- expect(f.ldp_source.client).not_to receive(:head)
24
- f.child.content
25
- end
26
- end
27
- end
28
-
29
- describe "Datastreams synched together" do
30
- before do
31
- class DSTest < ActiveFedora::Base
32
- def load_attached_files
33
- super
34
- return if attached_files.keys.include? :test_ds
35
- add_file("XXX", path: 'test_ds', mime_type: 'text/html')
36
- end
37
- end
38
- end
39
-
40
- subject { ds.content }
41
- let(:file) { DSTest.create }
42
- let(:ds) { file.test_ds }
43
-
44
- after do
45
- Object.send(:remove_const, :DSTest)
46
- end
47
-
48
- it { is_expected.to eq('XXX') }
49
-
50
- context "After updating" do
51
- before do
52
- ds.content = "Foobar"
53
- file.save!
54
- end
55
-
56
- it "updates datastream" do
57
- expect(DSTest.find(file.id).attached_files['test_ds'].content).to eq 'Foobar'
58
- expect(DSTest.find(file.id).test_ds.content).to eq 'Foobar'
59
- end
60
- end
61
- end
62
-
63
- describe "an instance of ActiveFedora::Base" do
64
- let(:obj) { ActiveFedora::Base.new }
65
-
66
- describe ".attached_files" do
67
- subject(:attached_files) { obj.attached_files }
68
- it "returns a Hash of datastreams from fedora" do
69
- expect(attached_files).to be_a_kind_of(ActiveFedora::FilesHash)
70
- expect(attached_files).to be_empty
71
- end
72
-
73
- it "initializes the datastream pointers with @new_object=false" do
74
- attached_files.each_value do |ds|
75
- expect(ds).to_not be_new
76
- end
77
- end
78
- end
79
-
80
- describe ".metadata_streams" do
81
- before do
82
- class Metadata < ActiveFedora::File
83
- def metadata?
84
- true
85
- end
86
- end
87
-
88
- obj.attach_file(mds1, 'md1')
89
- obj.attach_file(mds2, 'qdc')
90
- obj.attach_file(fds, 'fds')
91
- end
92
-
93
- let(:mds1) { Metadata.new }
94
- let(:mds2) { Metadata.new }
95
- let(:fds) { ActiveFedora::File.new }
96
-
97
- after do
98
- Object.send(:remove_const, :Metadata)
99
- end
100
-
101
- it "returns all of the datastreams from the object that are kinds of OmDatastream" do
102
- expect(obj.metadata_streams).to match_array [mds1, mds2]
103
- end
104
- end
105
-
106
- describe '#add_file' do
107
- before do
108
- f = File.new(File.join(File.dirname(__FILE__), "../fixtures/dino_jpg_no_file_ext"))
109
- obj.add_file(f, mime_type: "image/jpeg")
110
- obj.save
111
- end
112
-
113
- it "sets the correct mime_type if :mime_type is passed in and path does not contain correct extension" do
114
- expect(obj.reload.attached_files["DS1"].mime_type).to eq "image/jpeg"
115
- end
116
- end
117
-
118
- describe '.attach_file' do
119
- let(:ds) { ActiveFedora::File.new }
120
-
121
- it "is able to add datastreams" do
122
- expect(obj.attach_file(ds, 'DS1')).to eq 'DS1'
123
- end
124
-
125
- it "adding and saving should add the datastream to the datastreams array" do
126
- ds.content = fixture('dino.jpg').read
127
- expect(obj.attached_files).to_not have_key(:DS1)
128
- obj.attach_file(ds, 'DS1')
129
- obj.save
130
- expect(obj.attached_files).to have_key(:DS1)
131
- end
132
- end
133
-
134
- describe "retrieving datastream content" do
135
- let(:obj) { ActiveFedora::Base.create }
136
- after { obj.destroy }
137
-
138
- let(:ds) { ActiveFedora::File.new(obj.uri + '/DS1') { |ds| ds.content = "foo"; ds.save } }
139
-
140
- it "retrieves blobs that match the saved blobs" do
141
- obj.attach_file(ds, 'DS1')
142
- expect(obj.reload.attached_files["DS1"].content).to eq "foo"
143
- end
144
- end
145
- end
146
- end
@@ -1,73 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "delegating attributes" do
4
- before :all do
5
- class TitledObject < ActiveFedora::Base
6
- property :title, predicate: ::RDF::Vocab::DC.title
7
- end
8
-
9
- class RdfObject < ActiveFedora::Base
10
- property :resource_type, predicate: ::RDF::Vocab::DC.type do |index|
11
- index.as :stored_searchable, :facetable
12
- end
13
- end
14
- end
15
-
16
- after :all do
17
- Object.send(:remove_const, :TitledObject)
18
- Object.send(:remove_const, :RdfObject)
19
- end
20
-
21
- describe "#index_config" do
22
- context "on a class with properties" do
23
- subject(:index_config) { RdfObject.index_config }
24
- it "has configuration" do
25
- expect(index_config[:resource_type].behaviors).to eq [:stored_searchable, :facetable]
26
- end
27
- end
28
-
29
- context "when a class inherits properties" do
30
- before do
31
- class InheritedObject < RdfObject
32
- end
33
- end
34
-
35
- after do
36
- Object.send(:remove_const, :InheritedObject)
37
- end
38
-
39
- subject(:index_config) { InheritedObject.index_config }
40
-
41
- it "has configuration" do
42
- expect(index_config[:resource_type].behaviors).to eq [:stored_searchable, :facetable]
43
- end
44
-
45
- context "when the inherited config is modifed" do
46
- before do
47
- InheritedObject.index_config[:resource_type].behaviors.delete(:stored_searchable)
48
- end
49
- subject(:index_config) { RdfObject.index_config }
50
-
51
- it "the parent config is unchanged" do
52
- expect(index_config[:resource_type].behaviors).to eq [:stored_searchable, :facetable]
53
- end
54
- end
55
- end
56
- end
57
-
58
- describe "previous_changes" do
59
- subject(:titled_object) { TitledObject.create(title: ["Hydra for Dummies"]) }
60
- it "keeps a list of changes after a successful save" do
61
- expect(titled_object.previous_changes).to_not be_empty
62
- expect(titled_object.previous_changes.keys).to include("title")
63
- end
64
- end
65
-
66
- describe "#changes" do
67
- let(:titled_object) { TitledObject.create(title: ["Hydra for Dummies"]) }
68
- it "cleans out changes" do
69
- expect(titled_object).to_not be_title_changed
70
- expect(titled_object.changes).to be_empty
71
- end
72
- end
73
- end
@@ -1,24 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::Base do
4
- before :all do
5
- class MockAFBaseRelationship < ActiveFedora::Base
6
- end
7
- end
8
- after :all do
9
- Object.send(:remove_const, :MockAFBaseRelationship)
10
- end
11
-
12
- subject(:relationship) { MockAFBaseRelationship.new }
13
-
14
- context '#changed_for_autosave?' do
15
- before do
16
- expect(relationship).to receive(:new_record?).and_return(false)
17
- expect(relationship).to receive(:changed?).and_return(false)
18
- expect(relationship).to receive(:marked_for_destruction?).and_return(false)
19
- end
20
- it {
21
- expect { relationship.changed_for_autosave? }.to_not raise_error
22
- }
23
- end
24
- end
@@ -1,184 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::Base do
4
- before(:all) do
5
- class Foo < ActiveFedora::Base
6
- property :person, predicate: ::RDF::Vocab::DC.creator
7
- end
8
- end
9
- after(:all) { Object.send(:remove_const, :Foo) }
10
-
11
- describe '#reload' do
12
- context "when persisted" do
13
- let(:object) { Foo.create(person: ['bob']) }
14
- let(:object2) { Foo.find(object.id) }
15
- before { object2.update(person: ['dave']) }
16
-
17
- it 're-queries Fedora' do
18
- object.reload
19
- expect(object.person).to eq ['dave']
20
- end
21
- end
22
-
23
- context "when not persisted" do
24
- it 'raises an error' do
25
- expect { Foo.new.reload }.to raise_error(ActiveFedora::ObjectNotFoundError)
26
- end
27
- end
28
- end
29
-
30
- describe "a saved object" do
31
- before(:all) do
32
- class Book < ActiveFedora::Base
33
- type [::RDF::URI("http://www.example.com/Book")]
34
- property :title, predicate: ::RDF::Vocab::DC.title
35
- end
36
- end
37
- after(:all) { Object.send(:remove_const, :Book) }
38
- after { obj.destroy unless obj.destroyed? }
39
- let!(:obj) { Book.create }
40
-
41
- describe "#errors" do
42
- subject { obj.errors }
43
- it { is_expected.to be_empty }
44
- end
45
-
46
- describe "#id" do
47
- subject { obj.id }
48
- it { is_expected.to_not be_nil }
49
- end
50
-
51
- context "when updated with changes after one second" do
52
- before do
53
- obj.title = ['sample']
54
- sleep 1
55
- end
56
-
57
- it 'updates the modification time field in solr' do
58
- expect { obj.save }.to change {
59
- ActiveFedora::SolrService.query("id:\"#{obj.id}\"").first['system_modified_dtsi']
60
- }
61
- end
62
- end
63
-
64
- describe "#create_date" do
65
- subject { obj.create_date }
66
- it { is_expected.to_not be_nil }
67
- end
68
-
69
- describe "#modified_date" do
70
- subject { obj.modified_date }
71
- it { is_expected.to_not be_nil }
72
- end
73
-
74
- describe "delete" do
75
- it "deletes the object from Fedora and Solr" do
76
- expect {
77
- obj.delete
78
- }.to change { described_class.exists?(obj.id) }.from(true).to(false)
79
- end
80
- end
81
-
82
- describe "#type" do
83
- subject { obj.type }
84
- it { is_expected.to include(::RDF::URI("http://www.example.com/Book")) }
85
- context "when adding additional types" do
86
- before do
87
- t = obj.get_values(:type)
88
- t << ::RDF::URI("http://www.example.com/Novel")
89
- obj.set_value(:type, t)
90
- end
91
- it { is_expected.to include(::RDF::URI("http://www.example.com/Novel")) }
92
- end
93
- end
94
- end
95
-
96
- describe "#apply_schema" do
97
- before do
98
- class ExampleSchema < ActiveTriples::Schema
99
- property :title, predicate: RDF::Vocab::DC.title
100
- end
101
- class ExampleBase < ActiveFedora::Base
102
- apply_schema ExampleSchema, ActiveFedora::SchemaIndexingStrategy.new(ActiveFedora::Indexers::GlobalIndexer.new(:symbol))
103
- end
104
- end
105
- after do
106
- Object.send(:remove_const, :ExampleSchema)
107
- Object.send(:remove_const, :ExampleBase)
108
- end
109
- let(:obj) { ExampleBase.new }
110
- it "configures properties and solrize them" do
111
- obj.title = ["Test"]
112
- expect(obj.to_solr[ActiveFedora.index_field_mapper.solr_name("title", :symbol)]).to eq ["Test"]
113
- end
114
- end
115
-
116
- shared_examples 'ActiveFedora::Base#exists?' do
117
- let(:obj) { test_class.create }
118
- it "returns true for objects that exist" do
119
- expect(test_class.exists?(obj)).to be true
120
- end
121
- it "returns true for ids that exist" do
122
- expect(test_class.exists?(obj.id)).to be true
123
- end
124
- it "returns false for ids that don't exist" do
125
- expect(test_class.exists?('test_missing_object')).to be false
126
- end
127
- it "returns false for nil, false and empty" do
128
- expect(test_class.exists?(nil)).to be false
129
- expect(test_class.exists?(false)).to be false
130
- expect(test_class.exists?('')).to be false
131
- end
132
- context "when passed a hash of conditions" do
133
- let(:conditions) { { foo: "bar" } }
134
- context "and at least one object matches the conditions" do
135
- it "returns true" do
136
- allow(ActiveFedora::SolrService).to receive(:query) { [instance_double(RSolr::HashWithResponse)] }
137
- expect(test_class.exists?(conditions)).to be true
138
- end
139
- end
140
- context "and no object matches the conditions" do
141
- it "returns false" do
142
- allow(ActiveFedora::SolrService).to receive(:query) { [] }
143
- expect(test_class.exists?(conditions)).to be false
144
- end
145
- end
146
- end
147
- end
148
-
149
- context 'base class' do
150
- let(:test_class) { described_class }
151
- it_behaves_like 'ActiveFedora::Base#exists?'
152
- end
153
-
154
- context 'subclass' do
155
- let(:test_class) { Foo }
156
- it_behaves_like 'ActiveFedora::Base#exists?'
157
-
158
- it 'does not mistake other fedora objects for subclass' do
159
- obj = described_class.create
160
- expect { test_class.exists?(obj.id) }.not_to raise_error
161
- expect(test_class.exists?(obj.id)).to be false
162
- end
163
- end
164
-
165
- describe "overriding resource_class_factory" do
166
- subject(:test_base) { TestBase.new }
167
- before do
168
- class TestResource < ActiveTriples::Resource
169
- end
170
- class TestBase < ActiveFedora::Base
171
- def self.resource_class_factory
172
- TestResource
173
- end
174
- end
175
- end
176
- after do
177
- Object.send(:remove_const, :TestResource)
178
- Object.send(:remove_const, :TestBase)
179
- end
180
- it "uses that factory for #resource" do
181
- expect(test_base.resource.class.ancestors).to include TestResource
182
- end
183
- end
184
- end
@@ -1,121 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::Associations::BasicContainsAssociation do
4
- context "with a file" do
5
- before do
6
- class Source < ActiveFedora::Base
7
- is_a_container
8
- end
9
- end
10
-
11
- let(:model) { Source.new }
12
-
13
- after do
14
- Object.send(:remove_const, :Source)
15
- end
16
-
17
- it 'is empty' do
18
- expect(model.contains).to eq []
19
- end
20
-
21
- it 'can build a child' do
22
- child = model.contains.build
23
- expect(child).to be_kind_of ActiveFedora::File
24
- child.content = "hello"
25
- model.save!
26
- expect(child).to be_persisted
27
- expect(child.uri.to_s).to include model.uri.to_s
28
- end
29
-
30
- it 'can create a child on a persisted parent' do
31
- model.save!
32
- child = model.contains.build
33
- expect(child).to be_kind_of ActiveFedora::File
34
- child.content = "hello"
35
- model.save!
36
- expect(child).to be_persisted
37
- expect(child.uri.to_s).to include model.uri.to_s
38
- end
39
- end
40
-
41
- context "with an AF::Base object" do
42
- before do
43
- class Thing < ActiveFedora::Base
44
- property :title, predicate: ::RDF::Vocab::DC.title
45
- end
46
- class Source < ActiveFedora::Base
47
- is_a_container class_name: 'Thing'
48
- end
49
- end
50
- after do
51
- Object.send(:remove_const, :Source)
52
- Object.send(:remove_const, :Thing)
53
- end
54
-
55
- let(:model) { Source.new }
56
-
57
- it 'is empty' do
58
- expect(model.contains).to eq []
59
- end
60
-
61
- describe "creating" do
62
- it 'can build a child' do
63
- child = model.contains.build
64
- expect(model.contains.build(title: ['my title'])).to be_kind_of Thing
65
- model.save!
66
- expect(child).to be_persisted
67
- expect(child.uri.to_s).to include model.uri.to_s
68
- end
69
-
70
- it 'can create a child on a persisted parent' do
71
- model.save!
72
- child = model.contains.create(title: ['my title'])
73
- expect(child).to be_kind_of Thing
74
- expect(child).to be_persisted
75
- expect(child.uri.to_s).to include model.uri.to_s
76
- end
77
- end
78
-
79
- describe "loading" do
80
- before do
81
- model.save!
82
- model.contains.create(title: ['title 1'])
83
- model.contains.create(title: ['title 2'])
84
- model.reload
85
- end
86
-
87
- it "has the two contained objects" do
88
- expect(model.contains.size).to eq 2
89
- expect(model.contains.map(&:title)).to contain_exactly ['title 1'], ['title 2']
90
- end
91
- end
92
-
93
- describe "#destroy_all" do
94
- before do
95
- model.save!
96
- model.contains.create(title: ['title 1'])
97
- model.contains.create(title: ['title 2'])
98
- model.reload
99
- end
100
-
101
- it "destroys the two contained objects" do
102
- expect { model.contains.destroy_all }
103
- .to change { model.contains.size }.by(-2)
104
- .and change { Thing.count }.by(-2)
105
- end
106
- end
107
-
108
- describe "#reload" do
109
- before do
110
- model.save!
111
- child = model.contains.create(title: ['title 1'])
112
- model.reload # Cause the model to load its graph that contains the child ids.
113
- ActiveFedora::Base.find(child.id).destroy
114
- end
115
-
116
- it "can reload without attempting to load any deleted objects" do
117
- expect { model.contains.reload }.not_to raise_error
118
- end
119
- end
120
- end
121
- end