active-fedora 11.0.0.rc1 → 11.0.0.rc2
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.
- checksums.yaml +4 -4
- data/lib/active_fedora/railtie.rb +2 -2
- data/lib/active_fedora/version.rb +1 -1
- data/spec/integration/associations_spec.rb +17 -18
- data/spec/integration/attached_files_spec.rb +4 -4
- data/spec/integration/attributes_spec.rb +12 -16
- data/spec/integration/autosave_association_spec.rb +5 -5
- data/spec/integration/base_spec.rb +2 -2
- data/spec/integration/collection_association_spec.rb +2 -5
- data/spec/integration/datastream_rdf_nested_attributes_spec.rb +23 -23
- data/spec/integration/date_time_properties_spec.rb +1 -2
- data/spec/integration/direct_container_spec.rb +8 -8
- data/spec/integration/directly_contains_one_association_spec.rb +11 -13
- data/spec/integration/fedora_solr_sync_spec.rb +2 -2
- data/spec/integration/file_fixity_spec.rb +6 -8
- data/spec/integration/file_spec.rb +9 -10
- data/spec/integration/has_many_associations_spec.rb +6 -8
- data/spec/integration/indirect_container_spec.rb +8 -9
- data/spec/integration/json_serialization_spec.rb +4 -4
- data/spec/integration/ntriples_datastream_spec.rb +74 -74
- data/spec/integration/om_datastream_spec.rb +13 -13
- data/spec/integration/rdf_nested_attributes_spec.rb +6 -6
- data/spec/integration/relation_delegation_spec.rb +8 -8
- data/spec/integration/relation_spec.rb +13 -16
- data/spec/integration/solr_hit_spec.rb +4 -4
- data/spec/integration/versionable_spec.rb +132 -132
- data/spec/unit/aggregation/list_source_spec.rb +37 -37
- data/spec/unit/aggregation/ordered_reader_spec.rb +4 -4
- data/spec/unit/association_hash_spec.rb +15 -15
- data/spec/unit/attached_files_spec.rb +19 -19
- data/spec/unit/attributes_spec.rb +25 -25
- data/spec/unit/base_active_model_spec.rb +8 -8
- data/spec/unit/base_extra_spec.rb +5 -4
- data/spec/unit/base_spec.rb +9 -9
- data/spec/unit/change_set_spec.rb +5 -5
- data/spec/unit/core_spec.rb +26 -26
- data/spec/unit/default_model_mapper_spec.rb +3 -3
- data/spec/unit/fedora_spec.rb +2 -2
- data/spec/unit/file_configurator_spec.rb +92 -92
- data/spec/unit/file_spec.rb +60 -60
- data/spec/unit/files_hash_spec.rb +7 -7
- data/spec/unit/has_and_belongs_to_many_association_spec.rb +12 -12
- data/spec/unit/has_many_association_spec.rb +2 -2
- data/spec/unit/indexers/global_indexer_spec.rb +6 -6
- data/spec/unit/indexing_service_spec.rb +5 -5
- data/spec/unit/indexing_spec.rb +4 -4
- data/spec/unit/loadable_from_json_spec.rb +4 -4
- data/spec/unit/model_classifier_spec.rb +4 -4
- data/spec/unit/nom_datastream_spec.rb +8 -8
- data/spec/unit/om_datastream_spec.rb +43 -43
- data/spec/unit/ordered_spec.rb +142 -142
- data/spec/unit/orders/list_node_spec.rb +20 -20
- data/spec/unit/orders/ordered_list_spec.rb +96 -96
- data/spec/unit/orders/reflection_spec.rb +3 -3
- data/spec/unit/pathing_spec.rb +4 -4
- data/spec/unit/persistence_spec.rb +28 -28
- data/spec/unit/qualified_dublin_core_datastream_spec.rb +8 -8
- data/spec/unit/query_spec.rb +5 -5
- data/spec/unit/rdf/indexing_service_spec.rb +17 -17
- data/spec/unit/rdf_datastream_spec.rb +10 -10
- data/spec/unit/rdf_resource_datastream_spec.rb +37 -37
- data/spec/unit/rdfxml_datastream_spec.rb +14 -14
- data/spec/unit/readonly_spec.rb +5 -4
- data/spec/unit/rspec_matchers/belong_to_associated_active_fedora_object_matcher_spec.rb +9 -9
- data/spec/unit/rspec_matchers/have_many_associated_active_fedora_objects_matcher_spec.rb +9 -9
- data/spec/unit/rspec_matchers/have_predicate_matcher_spec.rb +9 -9
- data/spec/unit/schema_indexing_strategy_spec.rb +5 -5
- data/spec/unit/serializers_spec.rb +3 -4
- data/spec/unit/solr_hit_spec.rb +9 -9
- data/spec/unit/sparql_insert_spec.rb +2 -2
- data/spec/unit/validations_spec.rb +9 -9
- data/spec/unit/with_metadata/default_metadata_class_factory_spec.rb +2 -1
- data/spec/unit/with_metadata/metadata_node_spec.rb +3 -2
- metadata +2 -2
data/spec/unit/indexing_spec.rb
CHANGED
@@ -25,7 +25,7 @@ describe ActiveFedora::Indexing do
|
|
25
25
|
Object.send(:remove_const, :SpecNode)
|
26
26
|
end
|
27
27
|
|
28
|
-
subject { SpecNode.new }
|
28
|
+
subject(:node) { SpecNode.new }
|
29
29
|
|
30
30
|
describe "#create_needs_index?" do
|
31
31
|
subject { SpecNode.new.send(:create_needs_index?) }
|
@@ -55,10 +55,10 @@ describe ActiveFedora::Indexing do
|
|
55
55
|
|
56
56
|
let(:test_object) { SpecNode.new(title: ['first title'], abstract: 'The abstract') }
|
57
57
|
|
58
|
-
subject { test_object.to_solr }
|
58
|
+
subject(:solr_doc) { test_object.to_solr }
|
59
59
|
|
60
60
|
it "indexs the rdf properties" do
|
61
|
-
expect(
|
61
|
+
expect(solr_doc).to include('title_tesim' => ['first title'], 'abstract_ssi' => 'The abstract')
|
62
62
|
end
|
63
63
|
|
64
64
|
it "adds id, system_create_date, system_modified_date from object attributes" do
|
@@ -80,7 +80,7 @@ describe ActiveFedora::Indexing do
|
|
80
80
|
expect(mock2).to receive(:to_solr).and_return("two" => "title two")
|
81
81
|
|
82
82
|
allow(test_object).to receive(:declared_attached_files).and_return(ds1: mock1, ds2: mock2)
|
83
|
-
expect(
|
83
|
+
expect(solr_doc).to include('one' => 'title one', 'two' => 'title two')
|
84
84
|
end
|
85
85
|
end
|
86
86
|
end
|
@@ -23,17 +23,17 @@ describe ActiveFedora::LoadableFromJson::SolrBackedResource do
|
|
23
23
|
|
24
24
|
describe "#query" do
|
25
25
|
describe "a known relationship" do
|
26
|
-
subject { resource.query(predicate: ::RDF::Vocab::DC.extent) }
|
26
|
+
subject(:resources) { resource.query(predicate: ::RDF::Vocab::DC.extent) }
|
27
27
|
|
28
28
|
it "is enumerable" do
|
29
|
-
expect(
|
29
|
+
expect(resources.map(&:object)).to eq [RDF::URI('http://example.org/123')]
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
33
|
describe "a unknown relationship" do
|
34
|
-
subject { resource.query(predicate: ::RDF::Vocab::DC.accrualPeriodicity) }
|
34
|
+
subject(:resources) { resource.query(predicate: ::RDF::Vocab::DC.accrualPeriodicity) }
|
35
35
|
it "raises an error" do
|
36
|
-
expect {
|
36
|
+
expect { resources }.to raise_error "Unable to find reflection for http://purl.org/dc/terms/accrualPeriodicity in Foo"
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
@@ -11,7 +11,7 @@ describe ActiveFedora::ModelClassifier do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
let(:class_names) { ["ParentClass::SiblingClass", "ParentClass::OtherSiblingClass", "ParentClass::SubclassClass", "ParentClass::NoSuchClass"] }
|
14
|
-
subject { described_class.new class_names }
|
14
|
+
subject(:classifier) { described_class.new class_names }
|
15
15
|
|
16
16
|
describe ".class_from_string" do
|
17
17
|
it "returns class constants based on strings" do
|
@@ -33,17 +33,17 @@ describe ActiveFedora::ModelClassifier do
|
|
33
33
|
|
34
34
|
describe '#models' do
|
35
35
|
it 'converts class names to classes' do
|
36
|
-
expect(
|
36
|
+
expect(classifier.models).to match_array [ParentClass::SiblingClass, ParentClass::OtherSiblingClass, ParentClass::SubclassClass]
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
40
|
describe '#best_model' do
|
41
41
|
it 'selects the most specific matching model' do
|
42
|
-
expect(
|
42
|
+
expect(classifier.best_model(default: nil)).to eq ParentClass::SubclassClass
|
43
43
|
end
|
44
44
|
|
45
45
|
it 'filters models to subclasses of the default' do
|
46
|
-
expect(
|
46
|
+
expect(classifier.best_model(default: ActiveFedora::Base)).to eq ActiveFedora::Base
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe ActiveFedora::NomDatastream do
|
4
4
|
describe "test" do
|
5
|
-
subject {
|
5
|
+
subject(:datastream) {
|
6
6
|
class MyNomDatastream < ActiveFedora::NomDatastream
|
7
7
|
set_terminology do |t|
|
8
8
|
t.a path: '//a', accessor: lambda { |x| x.text }, index: 'a_s'
|
@@ -13,21 +13,21 @@ describe ActiveFedora::NomDatastream do
|
|
13
13
|
MyNomDatastream.new
|
14
14
|
}
|
15
15
|
before do
|
16
|
-
|
16
|
+
datastream.content = '<root><a>123</a><b><c>asdf</c></b></root>'
|
17
17
|
end
|
18
18
|
|
19
19
|
it "works" do
|
20
|
-
expect(
|
20
|
+
expect(datastream.a).to include("123")
|
21
21
|
end
|
22
22
|
|
23
23
|
it "to_solrs" do
|
24
|
-
expect(
|
25
|
-
expect(
|
24
|
+
expect(datastream.to_solr['a_s']).to include('123')
|
25
|
+
expect(datastream.to_solr['b_s']).to include('asdf')
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
describe "with options for .set_terminology" do
|
30
|
-
subject {
|
30
|
+
subject(:datastream) {
|
31
31
|
class TerminologyOptions < ActiveFedora::NomDatastream
|
32
32
|
set_terminology(namespaces: {
|
33
33
|
'dc' => "http://purl.org/dc/elements/1.1/",
|
@@ -41,7 +41,7 @@ describe ActiveFedora::NomDatastream do
|
|
41
41
|
}
|
42
42
|
|
43
43
|
before do
|
44
|
-
|
44
|
+
datastream.content = %(
|
45
45
|
<root
|
46
46
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
47
47
|
xmlns:dcterms="http://purl.org/dc/terms/"
|
@@ -54,7 +54,7 @@ describe ActiveFedora::NomDatastream do
|
|
54
54
|
end
|
55
55
|
|
56
56
|
it "scopes #a attribute to only the dc namespace" do
|
57
|
-
expect(
|
57
|
+
expect(datastream.a).to eq ["123"]
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe ActiveFedora::OmDatastream do
|
4
|
-
subject { described_class.new }
|
4
|
+
subject(:datastream) { described_class.new }
|
5
5
|
it { should be_metadata }
|
6
6
|
|
7
7
|
it "includes the Solrizer::XML::TerminologyBasedSolrizer for .to_solr support" do
|
@@ -23,16 +23,16 @@ describe ActiveFedora::OmDatastream do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
describe "#prefix" do
|
26
|
-
subject { described_class.new }
|
26
|
+
subject(:datastream) { described_class.new }
|
27
27
|
it "reflects the dsid" do
|
28
|
-
expect(
|
28
|
+
expect(datastream.send(:prefix, 'descMetadata')).to eq "desc_metadata__"
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
describe '#xml_template' do
|
33
|
-
subject { described_class.xml_template.to_xml }
|
33
|
+
subject(:datastream) { described_class.xml_template.to_xml }
|
34
34
|
it "returns an empty xml document" do
|
35
|
-
expect(
|
35
|
+
expect(datastream).to be_equivalent_to("<?xml version=\"1.0\"?>\n<xml/>\n")
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
@@ -54,17 +54,17 @@ describe ActiveFedora::OmDatastream do
|
|
54
54
|
"foo__"
|
55
55
|
end
|
56
56
|
end
|
57
|
-
|
57
|
+
datastream.title = 'Science'
|
58
58
|
end
|
59
59
|
after do
|
60
60
|
Object.send(:remove_const, :MyDatastream)
|
61
61
|
end
|
62
|
-
subject { MyDatastream.new }
|
62
|
+
subject(:datastream) { MyDatastream.new }
|
63
63
|
it "uses the prefix" do
|
64
|
-
expect(
|
64
|
+
expect(datastream.to_solr).to have_key('foo__title_tesim')
|
65
65
|
end
|
66
66
|
it "does not prefix fields that aren't defined by this datastream" do
|
67
|
-
expect(
|
67
|
+
expect(datastream.to_solr('id' => 'test:123')).to have_key('id')
|
68
68
|
end
|
69
69
|
end
|
70
70
|
end
|
@@ -170,55 +170,55 @@ describe ActiveFedora::OmDatastream do
|
|
170
170
|
end
|
171
171
|
|
172
172
|
before do
|
173
|
-
allow(
|
173
|
+
allow(datastream).to receive(:ldp_source).and_return(ldp_source)
|
174
174
|
end
|
175
175
|
|
176
176
|
it "persists the product of .to_xml in fedora" do
|
177
|
-
|
178
|
-
|
179
|
-
expect(
|
177
|
+
datastream.serialize!
|
178
|
+
datastream.save
|
179
|
+
expect(datastream.mime_type).to eq 'text/xml'
|
180
180
|
end
|
181
181
|
end
|
182
182
|
|
183
183
|
describe 'setting content' do
|
184
|
-
subject { described_class.new }
|
185
|
-
before {
|
184
|
+
subject(:datastream) { described_class.new }
|
185
|
+
before { datastream.content = "<a />" }
|
186
186
|
|
187
187
|
it "updates the content" do
|
188
|
-
expect(
|
188
|
+
expect(datastream.content).to eq "<?xml version=\"1.0\"?>\n<a/>"
|
189
189
|
end
|
190
190
|
|
191
191
|
it "marks the object as changed" do
|
192
|
-
expect(
|
192
|
+
expect(datastream).to be_changed
|
193
193
|
end
|
194
194
|
|
195
195
|
it "update ngxml and mark the xml as loaded" do
|
196
|
-
expect(
|
197
|
-
expect(
|
196
|
+
expect(datastream.ng_xml.to_xml).to match(/<a\/>/)
|
197
|
+
expect(datastream.xml_loaded).to be true
|
198
198
|
end
|
199
199
|
end
|
200
200
|
|
201
201
|
describe 'ng_xml=' do
|
202
202
|
let(:sample_raw_xml) { "<foo><xmlelement/></foo>" }
|
203
203
|
|
204
|
-
subject { described_class.new }
|
204
|
+
subject(:datastream) { described_class.new }
|
205
205
|
|
206
206
|
it "parses raw xml for you" do
|
207
|
-
|
208
|
-
expect(
|
209
|
-
expect(
|
207
|
+
datastream.ng_xml = sample_raw_xml
|
208
|
+
expect(datastream.ng_xml).to be_kind_of Nokogiri::XML::Document
|
209
|
+
expect(datastream.ng_xml.to_xml).to be_equivalent_to(sample_raw_xml)
|
210
210
|
end
|
211
211
|
|
212
212
|
it "alwayses set a document when an Element is passed" do
|
213
|
-
|
214
|
-
expect(
|
215
|
-
expect(
|
213
|
+
datastream.ng_xml = Nokogiri::XML(sample_raw_xml).xpath('//xmlelement').first
|
214
|
+
expect(datastream.ng_xml).to be_kind_of Nokogiri::XML::Document
|
215
|
+
expect(datastream.ng_xml.to_xml).to be_equivalent_to("<xmlelement/>")
|
216
216
|
end
|
217
217
|
|
218
218
|
it "marks the datastream as changed" do
|
219
219
|
expect {
|
220
|
-
|
221
|
-
}.to change {
|
220
|
+
datastream.ng_xml = sample_raw_xml
|
221
|
+
}.to change { datastream.changed? }.from(false).to(true)
|
222
222
|
end
|
223
223
|
end
|
224
224
|
|
@@ -226,23 +226,23 @@ describe ActiveFedora::OmDatastream do
|
|
226
226
|
let(:doc) { Nokogiri::XML::Document.parse("<text_document/>") }
|
227
227
|
|
228
228
|
it "ng_xml.to_xmls" do
|
229
|
-
allow(
|
230
|
-
expect(
|
229
|
+
allow(datastream).to receive(:ng_xml).and_return(doc)
|
230
|
+
expect(datastream.to_xml).to eq "<?xml version=\"1.0\"?>\n<text_document/>"
|
231
231
|
end
|
232
232
|
|
233
233
|
it 'accepts an optional Nokogiri::XML Document as an argument and insert its fields into that (mocked test)' do
|
234
234
|
expect(doc.root).to receive(:add_child) # .with(test_ds.ng_xml.root)
|
235
|
-
|
235
|
+
datastream.to_xml(doc)
|
236
236
|
end
|
237
237
|
|
238
238
|
context "with some existing content" do
|
239
239
|
before do
|
240
|
-
|
240
|
+
datastream.content = "<test_xml/>"
|
241
241
|
end
|
242
242
|
it 'accepts an optional Nokogiri::XML Document as an argument and insert its fields into that (functional test)' do
|
243
243
|
expected_result = "<test_document><foo/><test_xml/></test_document>"
|
244
244
|
doc = Nokogiri::XML::Document.parse("<test_document><foo/></test_document>")
|
245
|
-
result =
|
245
|
+
result = datastream.to_xml(doc)
|
246
246
|
expect(doc).to be_equivalent_to expected_result
|
247
247
|
expect(result).to be_equivalent_to expected_result
|
248
248
|
end
|
@@ -250,25 +250,25 @@ describe ActiveFedora::OmDatastream do
|
|
250
250
|
it 'adds to root of Nokogiri::XML::Documents, but add directly to the elements if a Nokogiri::XML::Node is passed in' do
|
251
251
|
doc = Nokogiri::XML::Document.parse("<test_document/>")
|
252
252
|
el = Nokogiri::XML::Node.new("test_element", Nokogiri::XML::Document.new)
|
253
|
-
expect(
|
254
|
-
expect(
|
253
|
+
expect(datastream.to_xml(doc)).to be_equivalent_to "<test_document><test_xml/></test_document>"
|
254
|
+
expect(datastream.to_xml(el)).to be_equivalent_to "<test_element/>"
|
255
255
|
end
|
256
256
|
end
|
257
257
|
end
|
258
258
|
|
259
259
|
describe '.update_values' do
|
260
|
-
subject { described_class.new }
|
260
|
+
subject(:datastream) { described_class.new }
|
261
261
|
|
262
|
-
before {
|
262
|
+
before { datastream.content = fixture(File.join("mods_articles", "mods_article1.xml")).read }
|
263
263
|
|
264
264
|
it "updates a value internally call OM::XML::TermValueOperators::update_values if internal_solr_doc is not set" do
|
265
|
-
expect(
|
266
|
-
|
265
|
+
expect(datastream).to receive(:om_update_values)
|
266
|
+
datastream.update_values([{ ":person" => "0" }, "role", "text"] => { "0" => "role1", "1" => "role2", "2" => "role3" })
|
267
267
|
end
|
268
268
|
|
269
269
|
it "sets changed to true" do
|
270
|
-
|
271
|
-
expect(
|
270
|
+
datastream.update_values([{ ":person" => "0" }, "role", "text"] => { "0" => "role1", "1" => "role2", "2" => "role3" })
|
271
|
+
expect(datastream).to be_changed
|
272
272
|
end
|
273
273
|
end
|
274
274
|
|
@@ -285,10 +285,10 @@ describe ActiveFedora::OmDatastream do
|
|
285
285
|
@obj.destroy
|
286
286
|
Object.send(:remove_const, :MyObj)
|
287
287
|
end
|
288
|
-
subject { @obj.reload.descMetadata }
|
288
|
+
subject(:datastream) { @obj.reload.descMetadata }
|
289
289
|
it "does not load the descMetadata datastream when calling content_changed?" do
|
290
290
|
expect(@obj).to_not receive(:content)
|
291
|
-
expect(
|
291
|
+
expect(datastream).to_not be_content_changed
|
292
292
|
end
|
293
293
|
end
|
294
294
|
end
|
data/spec/unit/ordered_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe ActiveFedora::Orders do
|
4
|
-
subject { Image.new }
|
4
|
+
subject(:image) { Image.new }
|
5
5
|
before do
|
6
6
|
class Member < ActiveFedora::Base
|
7
7
|
end
|
@@ -19,9 +19,9 @@ describe ActiveFedora::Orders do
|
|
19
19
|
describe "<<" do
|
20
20
|
it "does not accept base objects" do
|
21
21
|
member = Member.new
|
22
|
-
expect {
|
23
|
-
expect(
|
24
|
-
expect(
|
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
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -62,53 +62,53 @@ describe ActiveFedora::Orders do
|
|
62
62
|
describe "<<" do
|
63
63
|
it "appends" do
|
64
64
|
member = Member.new
|
65
|
-
|
66
|
-
expect(
|
67
|
-
expect(
|
68
|
-
expect(
|
69
|
-
expect(
|
70
|
-
|
71
|
-
expect(
|
72
|
-
expect(
|
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
73
|
end
|
74
74
|
it "maintains member associations" do
|
75
75
|
member = Member.create
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
expect(
|
76
|
+
image.ordered_members << member
|
77
|
+
image.save
|
78
|
+
image.reload
|
79
|
+
expect(image.members).to eq [member]
|
80
80
|
end
|
81
81
|
end
|
82
82
|
describe "#=" do
|
83
83
|
it "sets ordered members" do
|
84
84
|
member = Member.new
|
85
85
|
member_2 = Member.new
|
86
|
-
|
87
|
-
expect(
|
88
|
-
|
89
|
-
expect(
|
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
90
|
# Removing from ordering is not the same as removing from aggregation.
|
91
|
-
expect(
|
91
|
+
expect(image.members).to contain_exactly member, member_2
|
92
92
|
end
|
93
93
|
end
|
94
94
|
describe "+=" do
|
95
95
|
it "appends ordered members" do
|
96
96
|
member = Member.new
|
97
97
|
member_2 = Member.new
|
98
|
-
|
99
|
-
expect(
|
100
|
-
expect(
|
101
|
-
expect(
|
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
102
|
end
|
103
103
|
end
|
104
104
|
describe "#delete_at" do
|
105
105
|
it "deletes that position" do
|
106
106
|
member = Member.new
|
107
107
|
member_2 = Member.new
|
108
|
-
|
108
|
+
image.ordered_members += [member, member_2]
|
109
109
|
|
110
|
-
expect(
|
111
|
-
expect(
|
110
|
+
expect(image.ordered_members.delete_at(0)).to eq member
|
111
|
+
expect(image.ordered_members).to eq [member_2]
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
@@ -116,27 +116,27 @@ describe ActiveFedora::Orders do
|
|
116
116
|
let(:member) { Member.create }
|
117
117
|
let(:member_2) { Member.create }
|
118
118
|
before do
|
119
|
-
|
120
|
-
|
119
|
+
image.ordered_members += [member, member_2, member]
|
120
|
+
image.save!
|
121
121
|
end
|
122
122
|
|
123
123
|
context "with an object found in the list" do
|
124
124
|
it "deletes all occurences of the object" do
|
125
|
-
expect(
|
126
|
-
expect(
|
125
|
+
expect(image.ordered_members.delete(member)).to eq member
|
126
|
+
expect(image.ordered_members.to_a).to eq [member_2]
|
127
127
|
end
|
128
128
|
it "can delete all" do
|
129
|
-
expect(
|
130
|
-
expect(
|
131
|
-
|
132
|
-
expect(
|
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
133
|
end
|
134
134
|
end
|
135
135
|
|
136
136
|
context "with an object not found in the list" do
|
137
137
|
it "returns nil" do
|
138
|
-
expect(
|
139
|
-
expect(
|
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
140
|
end
|
141
141
|
end
|
142
142
|
end
|
@@ -145,29 +145,29 @@ describe ActiveFedora::Orders do
|
|
145
145
|
it "adds at a given position" do
|
146
146
|
member = Member.new
|
147
147
|
member_2 = Member.new
|
148
|
-
|
148
|
+
image.ordered_members += [member, member_2]
|
149
149
|
|
150
|
-
|
151
|
-
expect(
|
150
|
+
image.ordered_members.insert_at(0, member_2)
|
151
|
+
expect(image.ordered_members).to eq [member_2, member, member_2]
|
152
152
|
end
|
153
153
|
it "adds a proxy_in statement" do
|
154
154
|
member = Member.new
|
155
155
|
member_2 = Member.new
|
156
|
-
|
156
|
+
image.ordered_members += [member, member_2]
|
157
157
|
|
158
|
-
|
159
|
-
expect(
|
158
|
+
image.ordered_members.insert_at(0, member_2)
|
159
|
+
expect(image.ordered_member_proxies.map(&:proxy_in).uniq).to eq [image]
|
160
160
|
end
|
161
161
|
end
|
162
162
|
describe "lazy loading" do
|
163
163
|
it "does not instantiate every record on append" do
|
164
164
|
member = Member.new
|
165
165
|
member_2 = Member.new
|
166
|
-
|
167
|
-
|
166
|
+
image.ordered_members += [member, member_2]
|
167
|
+
image.save
|
168
168
|
allow(ActiveFedora::Base).to receive(:find).and_call_original
|
169
169
|
|
170
|
-
reloaded =
|
170
|
+
reloaded = image.class.find(image.id)
|
171
171
|
reloaded.ordered_members << member
|
172
172
|
|
173
173
|
expect(ActiveFedora::Base).not_to have_received(:find).with(member_2.id)
|
@@ -175,11 +175,11 @@ describe ActiveFedora::Orders do
|
|
175
175
|
it "does not instantiate every record on #insert_at" do
|
176
176
|
member = Member.new
|
177
177
|
member_2 = Member.new
|
178
|
-
|
179
|
-
|
178
|
+
image.ordered_members += [member, member_2]
|
179
|
+
image.save
|
180
180
|
allow(ActiveFedora::Base).to receive(:find).and_call_original
|
181
181
|
|
182
|
-
reloaded =
|
182
|
+
reloaded = image.class.find(image.id)
|
183
183
|
reloaded.ordered_members.insert_at(0, member)
|
184
184
|
|
185
185
|
expect(ActiveFedora::Base).not_to have_received(:find).with(member_2.id)
|
@@ -189,179 +189,179 @@ describe ActiveFedora::Orders do
|
|
189
189
|
describe "append_target" do
|
190
190
|
it "doesn't add all members" do
|
191
191
|
member = Member.new
|
192
|
-
|
193
|
-
expect(
|
192
|
+
image.members << member
|
193
|
+
expect(image.ordered_members).to eq []
|
194
194
|
end
|
195
195
|
it "can handle adding many objects" do
|
196
196
|
member = Member.new
|
197
197
|
60.times do
|
198
|
-
|
198
|
+
image.ordered_member_proxies.append_target member
|
199
199
|
end
|
200
|
-
expect(
|
200
|
+
expect(image.ordered_member_proxies.to_a.length).to eq 60
|
201
201
|
end
|
202
202
|
it "can't add items not accepted by indirect container" do
|
203
203
|
bad_class = BadClass.new
|
204
|
-
expect {
|
204
|
+
expect { image.ordered_member_proxies.append_target bad_class }.to raise_error ActiveFedora::AssociationTypeMismatch
|
205
205
|
end
|
206
206
|
it "adds a member if it doesn't exist in members" do
|
207
207
|
member = Member.new
|
208
|
-
|
209
|
-
expect(
|
210
|
-
expect(
|
208
|
+
image.ordered_member_proxies.append_target member
|
209
|
+
expect(image.members).to eq [member]
|
210
|
+
expect(image.ordered_members).to eq [member]
|
211
211
|
end
|
212
212
|
it "doesn't add a member twice" do
|
213
213
|
member = Member.new
|
214
|
-
|
215
|
-
|
216
|
-
expect(
|
217
|
-
expect(
|
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
218
|
end
|
219
219
|
it "survives persistence" do
|
220
220
|
member = Member.new
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
expect(
|
226
|
-
expect(
|
227
|
-
expect(
|
228
|
-
expect(
|
229
|
-
expect(
|
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
230
|
end
|
231
231
|
it "can add already persisted items" do
|
232
232
|
member = Member.create
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
expect(
|
233
|
+
image.ordered_member_proxies.append_target member
|
234
|
+
image.save
|
235
|
+
image.reload
|
236
|
+
expect(image.ordered_members).to eq [member]
|
237
237
|
end
|
238
238
|
it "can append to a pre-persisted item" do
|
239
239
|
member = Member.new
|
240
|
-
|
241
|
-
|
242
|
-
|
240
|
+
image.ordered_member_proxies.append_target member
|
241
|
+
image.save
|
242
|
+
image.reload
|
243
243
|
member_2 = Member.new
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
expect(
|
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
248
|
end
|
249
249
|
end
|
250
250
|
describe "insert_target_at" do
|
251
251
|
it "can add between items" do
|
252
252
|
member = Member.new
|
253
253
|
member2 = Member.new
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
expect(
|
258
|
-
|
259
|
-
|
260
|
-
expect(
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
expect(
|
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
265
|
end
|
266
266
|
end
|
267
267
|
describe "insert_target_id_at" do
|
268
268
|
it "can add between items" do
|
269
269
|
member = Member.create
|
270
270
|
member2 = Member.create
|
271
|
-
|
271
|
+
image.ordered_members += [member, member2]
|
272
272
|
|
273
273
|
allow(ActiveFedora::Base).to receive(:find).and_call_original
|
274
|
-
|
274
|
+
image.ordered_member_proxies.insert_target_id_at(1, member2.id)
|
275
275
|
expect(ActiveFedora::Base).not_to have_received(:find).with(member2.id)
|
276
|
-
expect(
|
276
|
+
expect(image.ordered_members).to eq [member, member2, member2]
|
277
277
|
expect(ActiveFedora::Base).to have_received(:find).with(member2.id)
|
278
278
|
end
|
279
279
|
context "when given a nil id" do
|
280
280
|
it "raises an ArgumentError" do
|
281
|
-
expect {
|
281
|
+
expect { image.ordered_member_proxies.insert_target_id_at(0, nil) }.to raise_error ArgumentError, "ID can not be nil"
|
282
282
|
end
|
283
283
|
end
|
284
284
|
context "when given an ID not in members" do
|
285
285
|
it "raises an ArgumentError" do
|
286
|
-
expect {
|
286
|
+
expect { image.ordered_member_proxies.insert_target_id_at(0, "test") }.to raise_error "test is not a part of members"
|
287
287
|
end
|
288
288
|
end
|
289
289
|
end
|
290
290
|
describe "-=" do
|
291
291
|
it "can remove proxies" do
|
292
292
|
member = Member.new
|
293
|
-
|
294
|
-
|
295
|
-
expect(
|
296
|
-
expect(
|
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
297
|
end
|
298
298
|
it "can remove proxies in the middle" do
|
299
299
|
member = Member.new
|
300
300
|
member_2 = Member.new
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
expect(
|
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
306
|
end
|
307
307
|
it "can remove proxies post-create" do
|
308
308
|
member = Member.new
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
expect(
|
316
|
-
|
317
|
-
|
318
|
-
expect(
|
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
319
|
# THIS NEEDS TO PASS - can't delete fragment URI resources via sparql
|
320
320
|
# update?
|
321
321
|
# Blocked by https://jira.duraspace.org/browse/FCREPO-1764
|
322
|
-
# expect(
|
322
|
+
# expect(image.list_source.resource.subjects.to_a.length).to eq 5
|
323
323
|
end
|
324
324
|
end
|
325
325
|
describe ".delete_at" do
|
326
326
|
it "can remove in the middle" do
|
327
327
|
member = Member.new
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
expect(
|
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
333
|
end
|
334
334
|
it "returns the node" do
|
335
335
|
member = Member.new
|
336
|
-
|
337
|
-
|
338
|
-
second_node =
|
339
|
-
expect(
|
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
340
|
end
|
341
341
|
context "when the node doesn't exist" do
|
342
342
|
it "returns nil" do
|
343
|
-
expect(
|
343
|
+
expect(image.ordered_member_proxies.delete_at(0)).to eq nil
|
344
344
|
end
|
345
345
|
end
|
346
346
|
it "doesn't do anything if passed a bad value" do
|
347
347
|
member = Member.new
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
expect(
|
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
354
|
end
|
355
355
|
it "can persist a deletion" do
|
356
356
|
member = Member.new
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
expect(
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
expect(
|
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
365
|
end
|
366
366
|
end
|
367
367
|
end
|