active-fedora 11.0.0.rc1 → 11.0.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|