active-fedora 13.1.2 → 13.1.3

Sign up to get free protection for your applications and to get access to all the features.
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,60 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::Base do
4
- before do
5
- class MyDS < ActiveFedora::File
6
- end
7
-
8
- class MySample < ActiveFedora::File
9
- end
10
-
11
- class MyDeepSample < MySample
12
- end
13
-
14
- class Foo < ActiveFedora::Base
15
- has_subresource 'foostream', class_name: 'MyDS'
16
- has_subresource 'dcstream', class_name: 'MySample'
17
- end
18
-
19
- class Bar < ActiveFedora::Base
20
- has_subresource 'barstream', class_name: 'MyDS'
21
- end
22
-
23
- class Baz < Bar
24
- end
25
- end
26
-
27
- subject(:attached_files) { f.attached_files }
28
- let(:f) { Foo.new }
29
-
30
- it "doesn't overwrite stream specs" do
31
- expect(attached_files.values).to match_array [MyDS, MySample]
32
- end
33
-
34
- context 'base_class' do
35
- it 'shallow < Base' do
36
- expect(Bar.base_class).to eq(Bar)
37
- end
38
-
39
- it 'deep < Base' do
40
- expect(Baz.base_class).to eq(Bar)
41
- end
42
-
43
- it 'shallow < File' do
44
- expect(MySample.base_class).to eq(ActiveFedora::File)
45
- end
46
-
47
- it 'deep < File' do
48
- expect(MyDeepSample.base_class).to eq(ActiveFedora::File)
49
- end
50
- end
51
-
52
- after do
53
- Object.send(:remove_const, :Baz)
54
- Object.send(:remove_const, :Bar)
55
- Object.send(:remove_const, :Foo)
56
- Object.send(:remove_const, :MyDS)
57
- Object.send(:remove_const, :MyDeepSample)
58
- Object.send(:remove_const, :MySample)
59
- end
60
- end
@@ -1,15 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::LdpResource do
4
- let(:obj) { ActiveFedora::Base.create! }
5
- let!(:r1) { described_class.new(ActiveFedora.fedora.connection, obj.uri) }
6
- let!(:r2) { described_class.new(ActiveFedora.fedora.connection, obj.uri) }
7
-
8
- it "caches requests" do
9
- expect_any_instance_of(Faraday::Connection).to receive(:get).once.and_call_original
10
- ActiveFedora::Base.cache do
11
- r1.get
12
- r2.get
13
- end
14
- end
15
- end
@@ -1,40 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::LoadableFromJson::SolrBackedResource do
4
- before do
5
- class Foo < ActiveFedora::Base
6
- belongs_to :bar, predicate: ::RDF::Vocab::DC.extent
7
- end
8
-
9
- class Bar < ActiveFedora::Base
10
- end
11
- end
12
-
13
- after do
14
- Object.send(:remove_const, :Foo)
15
- Object.send(:remove_const, :Bar)
16
- end
17
-
18
- let(:resource) { described_class.new(Foo) }
19
-
20
- before do
21
- resource.insert [nil, ::RDF::Vocab::DC.extent, RDF::URI('http://example.org/123')]
22
- end
23
-
24
- describe "#query" do
25
- describe "a known relationship" do
26
- subject(:resources) { resource.query(predicate: ::RDF::Vocab::DC.extent) }
27
-
28
- it "is enumerable" do
29
- expect(resources.map(&:object)).to eq [RDF::URI('http://example.org/123')]
30
- end
31
- end
32
-
33
- describe "a unknown relationship" do
34
- subject(:resources) { resource.query(predicate: ::RDF::Vocab::DC.accrualPeriodicity) }
35
- it "raises an error" do
36
- expect { resources }.to raise_error "Unable to find reflection for http://purl.org/dc/terms/accrualPeriodicity in Foo"
37
- end
38
- end
39
- end
40
- end
@@ -1,19 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::Base do
4
- let(:logger1) { instance_double(::Logger, debug?: false) }
5
-
6
- before do
7
- @initial_logger = described_class.logger
8
- described_class.logger = logger1
9
- end
10
-
11
- after do
12
- described_class.logger = @initial_logger
13
- end
14
-
15
- it "Allows loggers to be set" do
16
- expect(logger1).to receive(:warn).with("Hey")
17
- described_class.new.logger.warn "Hey"
18
- end
19
- end
@@ -1,49 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::ModelClassifier do
4
- module ParentClass
5
- class SiblingClass
6
- end
7
- class OtherSiblingClass
8
- end
9
- class SubclassClass < SiblingClass
10
- end
11
- end
12
-
13
- subject(:classifier) { described_class.new class_names }
14
- let(:class_names) { ["ParentClass::SiblingClass", "ParentClass::OtherSiblingClass", "ParentClass::SubclassClass", "ParentClass::NoSuchClass"] }
15
-
16
- describe ".class_from_string" do
17
- it "returns class constants based on strings" do
18
- expect(described_class.class_from_string("String")).to eq String
19
- expect(described_class.class_from_string("ActiveFedora::RDF::IndexingService")).to eq ActiveFedora::RDF::IndexingService
20
- expect(described_class.class_from_string("IndexingService", ActiveFedora::RDF)).to eq ActiveFedora::RDF::IndexingService
21
- end
22
-
23
- it "finds sibling classes" do
24
- expect(described_class.class_from_string("SiblingClass", ParentClass::OtherSiblingClass)).to eq ParentClass::SiblingClass
25
- end
26
-
27
- it "raises a NameError if the class isn't found" do
28
- expect {
29
- described_class.class_from_string("FooClass", ParentClass::OtherSiblingClass)
30
- }.to raise_error NameError, /uninitialized constant (Object::)?FooClass/
31
- end
32
- end
33
-
34
- describe '#models' do
35
- it 'converts class names to classes' do
36
- expect(classifier.models).to match_array [ParentClass::SiblingClass, ParentClass::OtherSiblingClass, ParentClass::SubclassClass]
37
- end
38
- end
39
-
40
- describe '#best_model' do
41
- it 'selects the most specific matching model' do
42
- expect(classifier.best_model(default: nil)).to eq ParentClass::SubclassClass
43
- end
44
-
45
- it 'filters models to subclasses of the default' do
46
- expect(classifier.best_model(default: ActiveFedora::Base)).to eq ActiveFedora::Base
47
- end
48
- end
49
- end
@@ -1,367 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveFedora::Orders do
4
- subject(:image) { Image.new }
5
- before do
6
- class Member < ActiveFedora::Base
7
- end
8
- class BadClass < ActiveFedora::Base
9
- end
10
- class Image < ActiveFedora::Base
11
- ordered_aggregation :members, through: :list_source
12
- end
13
- end
14
- after do
15
- Object.send(:remove_const, :Image)
16
- Object.send(:remove_const, :Member)
17
- Object.send(:remove_const, :BadClass)
18
- end
19
- describe "<<" do
20
- it "does not accept base objects" do
21
- member = Member.new
22
- expect { image.ordered_member_proxies << member }.to raise_error ActiveFedora::AssociationTypeMismatch
23
- expect(image).not_to be_changed
24
- expect(image.list_source).not_to be_changed
25
- end
26
- end
27
-
28
- describe "ordered_by" do
29
- let(:image) { Image.new }
30
-
31
- context "an element aggregated by one record" do
32
- it "can find the record that contains it" do
33
- m = Member.create
34
- image.ordered_members << m
35
- image.save
36
-
37
- expect(m.ordered_by.to_a).to eq [image]
38
- end
39
- end
40
-
41
- context "a new element" do
42
- it "returns an empty array" do
43
- m = Member.new
44
- expect(m.ordered_by.to_a).to eq []
45
- end
46
- end
47
-
48
- context "an element aggregated by multiple records" do
49
- let(:image2) { Image.new }
50
- it "can find all of the records that contain it" do
51
- m = Member.create
52
- image.ordered_members << m
53
- image2.ordered_members << m
54
- image.save
55
- image2.save
56
- expect(m.ordered_by).to contain_exactly(image2, image)
57
- end
58
- end
59
- end
60
-
61
- describe "#ordered_members" do
62
- describe "<<" do
63
- it "appends" do
64
- member = Member.new
65
- image.save!
66
- expect(image.ordered_members << member).to eq [member]
67
- expect(image.ordered_members).to eq [member]
68
- expect(image.members).to eq [member]
69
- expect(image.ordered_member_proxies.to_a.length).to eq 1
70
- image.save!
71
- expect(image.head).not_to be_blank
72
- expect(image.reload.head).not_to be_blank
73
- end
74
- it "maintains member associations" do
75
- member = Member.create
76
- image.ordered_members << member
77
- image.save
78
- image.reload
79
- expect(image.members).to eq [member]
80
- end
81
- end
82
- describe "#=" do
83
- it "sets ordered members" do
84
- member = Member.new
85
- member_2 = Member.new
86
- image.ordered_members << member
87
- expect(image.ordered_members).to eq [member]
88
- image.ordered_members = [member_2, member_2]
89
- expect(image.ordered_members).to eq [member_2, member_2]
90
- # Removing from ordering is not the same as removing from aggregation.
91
- expect(image.members).to contain_exactly member, member_2
92
- end
93
- end
94
- describe "+=" do
95
- it "appends ordered members" do
96
- member = Member.new
97
- member_2 = Member.new
98
- image.ordered_members << member
99
- expect(image.ordered_members += [member, member_2]).to eq [member, member, member_2]
100
- expect(image.ordered_members).to eq [member, member, member_2]
101
- expect(image.ordered_member_proxies.map(&:target)).to eq [member, member, member_2]
102
- end
103
- end
104
- describe "#delete_at" do
105
- it "deletes that position" do
106
- member = Member.new
107
- member_2 = Member.new
108
- image.ordered_members += [member, member_2]
109
-
110
- expect(image.ordered_members.delete_at(0)).to eq member
111
- expect(image.ordered_members).to eq [member_2]
112
- end
113
- end
114
-
115
- describe "#delete" do
116
- let(:member) { Member.create }
117
- let(:member_2) { Member.create }
118
- before do
119
- image.ordered_members += [member, member_2, member]
120
- image.save!
121
- end
122
-
123
- context "with an object found in the list" do
124
- it "deletes all occurences of the object" do
125
- expect(image.ordered_members.delete(member)).to eq member
126
- expect(image.ordered_members.to_a).to eq [member_2]
127
- end
128
- it "can delete all" do
129
- expect(image.ordered_members.delete(member)).to eq member
130
- expect(image.ordered_members.delete(member_2)).to eq member_2
131
- image.save!
132
- expect(image.reload.ordered_members.to_a).to eq []
133
- end
134
- end
135
-
136
- context "with an object not found in the list" do
137
- it "returns nil" do
138
- expect(image.ordered_members.delete(Member.create)).to be_nil
139
- expect(image.ordered_members.to_a).to eq [member, member_2, member]
140
- end
141
- end
142
- end
143
-
144
- describe "#insert_at" do
145
- it "adds at a given position" do
146
- member = Member.new
147
- member_2 = Member.new
148
- image.ordered_members += [member, member_2]
149
-
150
- image.ordered_members.insert_at(0, member_2)
151
- expect(image.ordered_members).to eq [member_2, member, member_2]
152
- end
153
- it "adds a proxy_in statement" do
154
- member = Member.new
155
- member_2 = Member.new
156
- image.ordered_members += [member, member_2]
157
-
158
- image.ordered_members.insert_at(0, member_2)
159
- expect(image.ordered_member_proxies.map(&:proxy_in).uniq).to eq [image]
160
- end
161
- end
162
- describe "lazy loading" do
163
- it "does not instantiate every record on append" do
164
- member = Member.new
165
- member_2 = Member.new
166
- image.ordered_members += [member, member_2]
167
- image.save
168
- allow(ActiveFedora::Base).to receive(:find).and_call_original
169
-
170
- reloaded = image.class.find(image.id)
171
- reloaded.ordered_members << member
172
-
173
- expect(ActiveFedora::Base).not_to have_received(:find).with(member_2.id)
174
- end
175
- it "does not instantiate every record on #insert_at" do
176
- member = Member.new
177
- member_2 = Member.new
178
- image.ordered_members += [member, member_2]
179
- image.save
180
- allow(ActiveFedora::Base).to receive(:find).and_call_original
181
-
182
- reloaded = image.class.find(image.id)
183
- reloaded.ordered_members.insert_at(0, member)
184
-
185
- expect(ActiveFedora::Base).not_to have_received(:find).with(member_2.id)
186
- end
187
- end
188
- end
189
- describe "append_target" do
190
- it "doesn't add all members" do
191
- member = Member.new
192
- image.members << member
193
- expect(image.ordered_members).to eq []
194
- end
195
- it "can handle adding many objects" do
196
- member = Member.new
197
- 60.times do
198
- image.ordered_member_proxies.append_target member
199
- end
200
- expect(image.ordered_member_proxies.to_a.length).to eq 60
201
- end
202
- it "can't add items not accepted by indirect container" do
203
- bad_class = BadClass.new
204
- expect { image.ordered_member_proxies.append_target bad_class }.to raise_error ActiveFedora::AssociationTypeMismatch
205
- end
206
- it "adds a member if it doesn't exist in members" do
207
- member = Member.new
208
- image.ordered_member_proxies.append_target member
209
- expect(image.members).to eq [member]
210
- expect(image.ordered_members).to eq [member]
211
- end
212
- it "doesn't add a member twice" do
213
- member = Member.new
214
- image.ordered_member_proxies.append_target member
215
- image.ordered_member_proxies.append_target member
216
- expect(image.members).to eq [member]
217
- expect(image.ordered_members).to eq [member, member]
218
- end
219
- it "survives persistence" do
220
- member = Member.new
221
- image.ordered_member_proxies.append_target member
222
- image.ordered_member_proxies.append_target member
223
- image.save
224
- image.reload
225
- expect(image.ordered_members).to eq [member, member]
226
- expect(image.ordered_member_ids).to eq [member.id, member.id]
227
- expect(image.list_source.resource.query([nil, ::RDF::Vocab::ORE.proxyIn, image.resource.rdf_subject]).to_a.length).to eq 2
228
- expect(image.head_ids).to eq image.list_source.head_id
229
- expect(image.tail_ids).to eq image.list_source.tail_id
230
- end
231
- it "can add already persisted items" do
232
- member = Member.create
233
- image.ordered_member_proxies.append_target member
234
- image.save
235
- image.reload
236
- expect(image.ordered_members).to eq [member]
237
- end
238
- it "can append to a pre-persisted item" do
239
- member = Member.new
240
- image.ordered_member_proxies.append_target member
241
- image.save
242
- image.reload
243
- member_2 = Member.new
244
- image.ordered_member_proxies.append_target member_2
245
- image.save
246
- image.reload
247
- expect(image.ordered_members).to eq [member, member_2]
248
- end
249
- end
250
- describe "insert_target_at" do
251
- it "can add between items" do
252
- member = Member.new
253
- member2 = Member.new
254
- image.ordered_member_proxies.append_target member
255
- image.ordered_member_proxies.append_target member
256
- image.ordered_member_proxies.insert_target_at(1, member2)
257
- expect(image.ordered_members).to eq [member, member2, member]
258
- image.save
259
- image.reload
260
- expect(image.ordered_members).to eq [member, member2, member]
261
- image.ordered_member_proxies.insert_target_at(2, member2)
262
- image.save
263
- image.reload
264
- expect(image.ordered_members).to eq [member, member2, member2, member]
265
- end
266
- end
267
- describe "insert_target_id_at" do
268
- it "can add between items" do
269
- member = Member.create
270
- member2 = Member.create
271
- image.ordered_members += [member, member2]
272
-
273
- allow(ActiveFedora::Base).to receive(:find).and_call_original
274
- image.ordered_member_proxies.insert_target_id_at(1, member2.id)
275
- expect(ActiveFedora::Base).not_to have_received(:find).with(member2.id)
276
- expect(image.ordered_members).to eq [member, member2, member2]
277
- expect(ActiveFedora::Base).to have_received(:find).with(member2.id)
278
- end
279
- context "when given a nil id" do
280
- it "raises an ArgumentError" do
281
- expect { image.ordered_member_proxies.insert_target_id_at(0, nil) }.to raise_error ArgumentError, "ID can not be nil"
282
- end
283
- end
284
- context "when given an ID not in members" do
285
- it "raises an ArgumentError" do
286
- expect { image.ordered_member_proxies.insert_target_id_at(0, "test") }.to raise_error "test is not a part of members"
287
- end
288
- end
289
- end
290
- describe "-=" do
291
- it "can remove proxies" do
292
- member = Member.new
293
- image.ordered_member_proxies.append_target member
294
- image.ordered_member_proxies -= [image.ordered_member_proxies.last]
295
- expect(image.ordered_members).to eq []
296
- expect(image.list_source.resource.statements.to_a.length).to eq 1
297
- end
298
- it "can remove proxies in the middle" do
299
- member = Member.new
300
- member_2 = Member.new
301
- image.ordered_member_proxies.append_target member
302
- image.ordered_member_proxies.append_target member_2
303
- image.ordered_member_proxies.append_target member
304
- image.ordered_member_proxies -= [image.ordered_member_proxies[1]]
305
- expect(image.ordered_members).to eq [member, member]
306
- end
307
- it "can remove proxies post-create" do
308
- member = Member.new
309
- image.ordered_member_proxies.append_target member
310
- image.ordered_member_proxies.append_target member
311
- image.ordered_member_proxies.append_target member
312
- image.save
313
- image.reload
314
- image.ordered_member_proxies -= [image.ordered_member_proxies[1]]
315
- expect(image.ordered_members).to eq [member, member]
316
- image.save
317
- image.reload
318
- expect(image.ordered_members).to eq [member, member]
319
- # THIS NEEDS TO PASS - can't delete fragment URI resources via sparql
320
- # update?
321
- # Blocked by https://jira.duraspace.org/browse/FCREPO-1764
322
- # expect(image.list_source.resource.subjects.to_a.length).to eq 5
323
- end
324
- end
325
- describe ".delete_at" do
326
- it "can remove in the middle" do
327
- member = Member.new
328
- image.ordered_member_proxies.append_target member
329
- image.ordered_member_proxies.append_target member
330
- image.ordered_member_proxies.append_target member
331
- image.ordered_member_proxies.delete_at(1)
332
- expect(image.ordered_members).to eq [member, member]
333
- end
334
- it "returns the node" do
335
- member = Member.new
336
- image.ordered_members << member
337
- image.ordered_members << member
338
- second_node = image.ordered_member_proxies[1]
339
- expect(image.ordered_member_proxies.delete_at(1)).to eq second_node
340
- end
341
- context "when the node doesn't exist" do
342
- it "returns nil" do
343
- expect(image.ordered_member_proxies.delete_at(0)).to eq nil
344
- end
345
- end
346
- it "doesn't do anything if passed a bad value" do
347
- member = Member.new
348
- image.ordered_member_proxies.append_target member
349
- image.ordered_member_proxies.append_target member
350
- image.ordered_member_proxies.append_target member
351
- image.ordered_member_proxies.delete_at(3)
352
- image.ordered_member_proxies.delete_at(nil)
353
- expect(image.ordered_members).to eq [member, member, member]
354
- end
355
- it "can persist a deletion" do
356
- member = Member.new
357
- image.ordered_member_proxies.append_target member
358
- image.ordered_member_proxies.append_target member
359
- image.ordered_member_proxies.append_target member
360
- expect(image.ordered_members).to eq [member, member, member]
361
- image.ordered_member_proxies.delete_at(1)
362
- image.save
363
- image.reload
364
- expect(image.ordered_members).to eq [member, member]
365
- end
366
- end
367
- end