hydra-works 0.5.0 → 0.6.0
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/hydra/works/models/concerns/file_set/mime_types.rb +0 -10
- data/lib/hydra/works/models/concerns/file_set_behavior.rb +12 -0
- data/lib/hydra/works/version.rb +1 -1
- data/spec/hydra/works/models/collection_spec.rb +44 -192
- data/spec/hydra/works/models/concerns/file_set/mime_types_spec.rb +0 -18
- data/spec/hydra/works/models/file_set_spec.rb +22 -188
- data/spec/hydra/works/models/generic_work_spec.rb +0 -147
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc76ae65e10c75f045b933e2b8de237292821b2d
|
4
|
+
data.tar.gz: 20c76bd9fb5e0002a74f279efa932ab0685618e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e97285baab41bb01e5ab16541057e6a50fee7630eb48daeb92eb8d7d64ef3cfd50878520533e1ee7e34fe6b5f74b8ad015b7756a99661aa9cd234bdbc0401e6
|
7
|
+
data.tar.gz: 35363e268e45beaf3331bd7976ad99b8a269850e8a51ef4c00380f98b6f9b8e9526fc3244a59ceb8f79fc0a51b9d36e3ebbe13bb3853f461d0396370a035b911
|
@@ -28,16 +28,6 @@ module Hydra::Works
|
|
28
28
|
false
|
29
29
|
end
|
30
30
|
|
31
|
-
def file_format
|
32
|
-
if mime_type.present? && format_label.present?
|
33
|
-
"#{mime_type.split('/').last} (#{format_label.join(', ')})"
|
34
|
-
elsif mime_type.present?
|
35
|
-
mime_type.split('/').last
|
36
|
-
elsif format_label.present?
|
37
|
-
format_label
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
31
|
module ClassMethods
|
42
32
|
def image_mime_types
|
43
33
|
['image/png', 'image/jpeg', 'image/jpg', 'image/jp2', 'image/bmp', 'image/gif', 'image/tiff']
|
@@ -19,6 +19,8 @@ module Hydra::Works
|
|
19
19
|
include Hydra::Works::Derivatives
|
20
20
|
include Hydra::Works::MimeTypes
|
21
21
|
include Hydra::Works::VersionedContent
|
22
|
+
|
23
|
+
before_destroy :remove_from_works
|
22
24
|
end
|
23
25
|
|
24
26
|
# @return [Boolean] whether this instance is a Hydra::Works Collection.
|
@@ -39,5 +41,15 @@ module Hydra::Works
|
|
39
41
|
def in_works
|
40
42
|
ordered_by.select { |parent| parent.class.included_modules.include?(Hydra::Works::WorkBehavior) }.to_a
|
41
43
|
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def remove_from_works
|
48
|
+
in_works.each do |parent|
|
49
|
+
parent.ordered_members.delete(self) # Delete the list node
|
50
|
+
parent.members.delete(self) # Delete the indirect container Proxy
|
51
|
+
parent.save! # record the changes to the ordered members
|
52
|
+
end
|
53
|
+
end
|
42
54
|
end
|
43
55
|
end
|
data/lib/hydra/works/version.rb
CHANGED
@@ -1,229 +1,87 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Hydra::Works::Collection do
|
4
|
-
|
4
|
+
let(:collection) { described_class.new }
|
5
5
|
|
6
6
|
let(:collection1) { described_class.new }
|
7
|
-
let(:collection2) { described_class.new }
|
8
|
-
let(:collection3) { described_class.new }
|
9
|
-
let(:collection4) { described_class.new }
|
10
|
-
|
11
7
|
let(:generic_work1) { Hydra::Works::GenericWork.new }
|
12
|
-
let(:generic_work2) { Hydra::Works::GenericWork.new }
|
13
|
-
let(:generic_work3) { Hydra::Works::GenericWork.new }
|
14
|
-
let(:generic_work4) { Hydra::Works::GenericWork.new }
|
15
8
|
|
16
9
|
describe '#collections' do
|
17
10
|
it 'returns empty array when only works are aggregated' do
|
18
|
-
|
19
|
-
|
20
|
-
expect(subject.collections).to eq []
|
11
|
+
collection.ordered_members << generic_work1
|
12
|
+
expect(collection.collections).to eq []
|
21
13
|
end
|
22
14
|
|
23
15
|
context 'with other collections & works' do
|
16
|
+
let(:collection2) { described_class.new }
|
24
17
|
before do
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
subject.ordered_members << generic_work2
|
18
|
+
collection.ordered_members << collection1
|
19
|
+
collection.ordered_members << collection2
|
20
|
+
collection.ordered_members << generic_work1
|
29
21
|
end
|
30
22
|
|
31
23
|
it 'returns only collections' do
|
32
|
-
expect(
|
24
|
+
expect(collection.ordered_collections).to eq [collection1, collection2]
|
33
25
|
end
|
34
26
|
end
|
35
27
|
end
|
36
28
|
|
37
29
|
describe '#works' do
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
30
|
+
subject { collection.works }
|
31
|
+
context "when only collections are aggregated" do
|
32
|
+
it 'returns empty array when only collections are aggregated' do
|
33
|
+
collection.ordered_members << collection1
|
34
|
+
expect(subject).to eq []
|
35
|
+
end
|
42
36
|
end
|
43
37
|
|
44
38
|
context 'with collections and generic works' do
|
39
|
+
let(:generic_work2) { Hydra::Works::GenericWork.new }
|
45
40
|
before do
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
subject.ordered_members << generic_work2
|
41
|
+
collection.ordered_members << collection1
|
42
|
+
collection.ordered_members << generic_work1
|
43
|
+
collection.ordered_members << generic_work2
|
50
44
|
end
|
51
45
|
|
52
46
|
it 'returns only generic works' do
|
53
|
-
expect(subject
|
47
|
+
expect(subject).to eq [generic_work1, generic_work2]
|
54
48
|
end
|
55
49
|
end
|
56
50
|
end
|
57
51
|
|
58
|
-
describe
|
59
|
-
|
60
|
-
|
61
|
-
|
52
|
+
describe '#ordered_works' do
|
53
|
+
subject { collection.ordered_works }
|
54
|
+
context "when only collections are aggregated" do
|
55
|
+
it 'returns empty array when only collections are aggregated' do
|
56
|
+
collection.ordered_members << collection1
|
57
|
+
expect(subject).to eq []
|
58
|
+
end
|
62
59
|
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe '#related_objects' do
|
66
|
-
let(:generic_file1) { Hydra::Works::FileSet.new }
|
67
|
-
let(:object1) { Hydra::PCDM::Object.new }
|
68
|
-
let(:object2) { Hydra::PCDM::Object.new }
|
69
60
|
|
70
61
|
context 'with collections and generic works' do
|
62
|
+
let(:generic_work2) { Hydra::Works::GenericWork.new }
|
71
63
|
before do
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'returns empty array when only collections and generic works are aggregated' do
|
78
|
-
expect(subject.related_objects).to eq []
|
64
|
+
collection.ordered_members << collection1
|
65
|
+
collection.ordered_members << generic_work1
|
66
|
+
collection.ordered_members << generic_work2
|
79
67
|
end
|
80
68
|
|
81
|
-
it 'returns only
|
82
|
-
subject.
|
83
|
-
expect(subject.related_objects).to eq [object2]
|
84
|
-
end
|
85
|
-
|
86
|
-
it 'returns related objects of various types' do
|
87
|
-
subject.related_objects << generic_work2
|
88
|
-
subject.related_objects << generic_file1
|
89
|
-
subject.related_objects << object1
|
90
|
-
subject.save
|
91
|
-
subject.reload
|
92
|
-
expect(subject.related_objects.include? object1).to be true
|
93
|
-
expect(subject.related_objects.include? generic_work2).to be true
|
94
|
-
expect(subject.related_objects.include? generic_file1).to be true
|
95
|
-
expect(subject.related_objects.size).to eq 3
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
describe '#related_objects <<' do
|
101
|
-
context 'with acceptable related objects' do
|
102
|
-
let(:object1) { Hydra::PCDM::Object.new }
|
103
|
-
let(:object2) { Hydra::PCDM::Object.new }
|
104
|
-
let(:generic_file1) { Hydra::Works::FileSet.new }
|
105
|
-
|
106
|
-
it 'adds various types of related objects to collection' do
|
107
|
-
subject.related_objects << generic_work1
|
108
|
-
subject.related_objects << generic_file1
|
109
|
-
subject.related_objects << object1
|
110
|
-
subject.save
|
111
|
-
subject.reload
|
112
|
-
expect(subject.related_objects.include? generic_work1).to be true
|
113
|
-
expect(subject.related_objects.include? generic_file1).to be true
|
114
|
-
expect(subject.related_objects.include? object1).to be true
|
115
|
-
expect(subject.related_objects.size).to eq 3
|
116
|
-
end
|
117
|
-
|
118
|
-
context 'with collections and works' do
|
119
|
-
before do
|
120
|
-
subject.ordered_members << collection1
|
121
|
-
subject.ordered_members << collection2
|
122
|
-
subject.ordered_members << generic_work1
|
123
|
-
subject.ordered_members << generic_work2
|
124
|
-
subject.related_objects << object1
|
125
|
-
end
|
126
|
-
|
127
|
-
it 'adds a related object to collection with collections and works' do
|
128
|
-
subject.related_objects << object2
|
129
|
-
subject.save
|
130
|
-
subject.reload
|
131
|
-
expect(subject.related_objects.include? object1).to be true
|
132
|
-
expect(subject.related_objects.include? object2).to be true
|
133
|
-
expect(subject.related_objects.size).to eq 2
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
context 'with unacceptable child related objects' do
|
139
|
-
let(:pcdm_collection1) { Hydra::PCDM::Collection.new }
|
140
|
-
let(:pcdm_file1) { Hydra::PCDM::File.new }
|
141
|
-
let(:non_PCDM_object) { "I'm not a PCDM object" }
|
142
|
-
let(:af_base_object) { ActiveFedora::Base.new }
|
143
|
-
|
144
|
-
it 'does not aggregate Hydra::Works::Collection in related objects aggregation' do
|
145
|
-
expect { subject.related_objects << collection1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /Hydra::Works::Collection:.*> is not a PCDM object./)
|
146
|
-
end
|
147
|
-
|
148
|
-
it 'does not aggregate Hydra::PCDM::Collections in related objects aggregation' do
|
149
|
-
expect { subject.related_objects << pcdm_collection1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /Hydra::PCDM::Collection:.* is not a PCDM object./)
|
150
|
-
end
|
151
|
-
|
152
|
-
it 'does not aggregate Hydra::PCDM::Files in related objects aggregation' do
|
153
|
-
expect { subject.related_objects << pcdm_file1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base.* expected, got Hydra::PCDM::File.*/)
|
154
|
-
end
|
155
|
-
|
156
|
-
it 'does not aggregate non-PCDM objects in related objects aggregation' do
|
157
|
-
expect { subject.related_objects << non_PCDM_object }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base.* expected, got String.*/)
|
158
|
-
end
|
159
|
-
|
160
|
-
it 'does not aggregate AF::Base objects in related objects aggregation' do
|
161
|
-
expect { subject.related_objects << af_base_object }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base.* is not a PCDM object./)
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
context 'with invalid behaviors' do
|
166
|
-
let(:object1) { Hydra::PCDM::Object.new }
|
167
|
-
let(:object2) { Hydra::PCDM::Object.new }
|
168
|
-
|
169
|
-
it 'does not allow related objects to repeat' do
|
170
|
-
skip 'skipping this test because issue pcdm#92 needs to be addressed' do
|
171
|
-
subject.related_objects << object1
|
172
|
-
subject.related_objects << object2
|
173
|
-
subject.related_objects << object1
|
174
|
-
related_objects = subject.related_objects
|
175
|
-
expect(related_objects.include? object1).to be true
|
176
|
-
expect(related_objects.include? object2).to be true
|
177
|
-
expect(related_objects.size).to eq 2
|
178
|
-
end
|
69
|
+
it 'returns only generic works' do
|
70
|
+
expect(subject).to eq [generic_work1, generic_work2]
|
179
71
|
end
|
180
72
|
end
|
181
73
|
end
|
182
74
|
|
183
|
-
describe
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
let(:related_work5) { Hydra::Works::GenericWork.new }
|
189
|
-
|
190
|
-
context 'when multiple related objects' do
|
191
|
-
before do
|
192
|
-
subject.related_objects << related_object1
|
193
|
-
subject.related_objects << related_work2
|
194
|
-
subject.members << collection2
|
195
|
-
subject.members << generic_work1
|
196
|
-
subject.related_objects << related_file3
|
197
|
-
subject.related_objects << related_object4
|
198
|
-
subject.members << collection1
|
199
|
-
subject.related_objects << related_work5
|
200
|
-
expect(subject.related_objects).to eq [related_object1, related_work2, related_file3, related_object4, related_work5]
|
201
|
-
end
|
202
|
-
|
203
|
-
it 'removes first related object' do
|
204
|
-
expect(subject.related_objects.delete related_object1).to eq [related_object1]
|
205
|
-
expect(subject.related_objects).to eq [related_work2, related_file3, related_object4, related_work5]
|
206
|
-
expect(subject.collections).to eq [collection2, collection1]
|
207
|
-
expect(subject.works). to eq [generic_work1]
|
208
|
-
end
|
209
|
-
|
210
|
-
it 'removes last related object' do
|
211
|
-
expect(subject.related_objects.delete related_work5).to eq [related_work5]
|
212
|
-
expect(subject.related_objects).to eq [related_object1, related_work2, related_file3, related_object4]
|
213
|
-
expect(subject.collections).to eq [collection2, collection1]
|
214
|
-
expect(subject.works). to eq [generic_work1]
|
215
|
-
end
|
216
|
-
|
217
|
-
it 'removes middle related object' do
|
218
|
-
expect(subject.related_objects.delete related_file3).to eq [related_file3]
|
219
|
-
expect(subject.related_objects).to eq [related_object1, related_work2, related_object4, related_work5]
|
220
|
-
expect(subject.collections).to eq [collection2, collection1]
|
221
|
-
expect(subject.works). to eq [generic_work1]
|
222
|
-
end
|
75
|
+
describe "#ordered_work_ids" do
|
76
|
+
subject { collection.ordered_work_ids }
|
77
|
+
it "returns IDs of ordered works" do
|
78
|
+
collection.ordered_members << generic_work1
|
79
|
+
expect(subject).to eq [generic_work1.id]
|
223
80
|
end
|
224
81
|
end
|
225
82
|
|
226
|
-
describe '
|
83
|
+
describe '#related_objects' do
|
84
|
+
subject { collection.related_objects }
|
227
85
|
let(:object) { Hydra::PCDM::Object.new }
|
228
86
|
let(:collection) { described_class.new }
|
229
87
|
|
@@ -231,22 +89,16 @@ describe Hydra::Works::Collection do
|
|
231
89
|
collection.related_objects = [object]
|
232
90
|
end
|
233
91
|
|
234
|
-
it
|
235
|
-
expect(collection.related_objects).to eq [object]
|
236
|
-
end
|
92
|
+
it { is_expected.to eq [object] }
|
237
93
|
end
|
238
94
|
|
239
|
-
describe
|
95
|
+
describe "#in_collections" do
|
240
96
|
before do
|
241
|
-
collection1.ordered_members <<
|
97
|
+
collection1.ordered_members << collection
|
242
98
|
collection1.save
|
243
99
|
end
|
244
100
|
|
245
|
-
|
246
|
-
|
247
|
-
end
|
248
|
-
it 'has a parent collection' do
|
249
|
-
expect(collection2.in_collections).to eq [collection1]
|
250
|
-
end
|
101
|
+
subject { collection.in_collections }
|
102
|
+
it { is_expected.to eq [collection1] }
|
251
103
|
end
|
252
104
|
end
|
@@ -53,22 +53,4 @@ describe Hydra::Works::MimeTypes do
|
|
53
53
|
expect(subject.collection?).to be false
|
54
54
|
end
|
55
55
|
end
|
56
|
-
|
57
|
-
describe '#file_format?' do
|
58
|
-
it 'handles both mime and format_label' do
|
59
|
-
allow(subject).to receive(:mime_type).and_return('image/png')
|
60
|
-
allow(subject).to receive(:format_label).and_return(['Portable Network Graphics'])
|
61
|
-
expect(subject.file_format).to eq 'png (Portable Network Graphics)'
|
62
|
-
end
|
63
|
-
it 'handles just mime type' do
|
64
|
-
allow(subject).to receive(:mime_type).and_return('image/png')
|
65
|
-
allow(subject).to receive(:format_label).and_return([])
|
66
|
-
expect(subject.file_format).to eq 'png'
|
67
|
-
end
|
68
|
-
it 'handles just format_label' do
|
69
|
-
allow(subject).to receive(:mime_type).and_return('')
|
70
|
-
allow(subject).to receive(:format_label).and_return(['Portable Network Graphics'])
|
71
|
-
expect(subject.file_format).to eq ['Portable Network Graphics']
|
72
|
-
end
|
73
|
-
end
|
74
56
|
end
|
@@ -1,223 +1,57 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Hydra::Works::FileSet do
|
4
|
-
let(:
|
4
|
+
let(:file_set) { described_class.new }
|
5
5
|
|
6
6
|
describe 'Related objects' do
|
7
7
|
let(:object1) { Hydra::PCDM::Object.new }
|
8
8
|
|
9
9
|
before do
|
10
|
-
|
10
|
+
file_set.related_objects = [object1]
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'persists' do
|
14
|
-
expect(
|
14
|
+
expect(file_set.related_objects).to eq [object1]
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
18
|
describe '#files' do
|
19
|
-
let(:
|
20
|
-
let(:
|
21
|
-
let(:file2) { object.files.build }
|
19
|
+
let(:file1) { file_set.files.build }
|
20
|
+
let(:file2) { file_set.files.build }
|
22
21
|
|
23
22
|
before do
|
23
|
+
file_set.save!
|
24
24
|
file1.content = "I'm a file"
|
25
25
|
file2.content = 'I am too'
|
26
|
-
|
26
|
+
file_set.save!
|
27
27
|
end
|
28
28
|
|
29
|
-
subject { described_class.find(
|
29
|
+
subject { described_class.find(file_set.id).files }
|
30
30
|
|
31
31
|
it { is_expected.to eq [file1, file2] }
|
32
32
|
end
|
33
33
|
|
34
|
-
describe '
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
let(:object2) { Hydra::PCDM::Object.new }
|
41
|
-
let(:generic_work1) { Hydra::Works::GenericWork.create }
|
42
|
-
let(:generic_work2) { Hydra::Works::GenericWork.new }
|
43
|
-
let(:generic_file1) { described_class.create }
|
44
|
-
|
45
|
-
it 'adds various types of related objects to generic_file' do
|
46
|
-
subject.related_objects << generic_work1
|
47
|
-
subject.related_objects << generic_file1
|
48
|
-
subject.related_objects << object1
|
49
|
-
subject.save
|
50
|
-
subject.reload
|
51
|
-
related_objects = subject.related_objects
|
52
|
-
expect(related_objects.include? generic_work1).to be true
|
53
|
-
expect(related_objects.include? generic_file1).to be true
|
54
|
-
expect(related_objects.include? object1).to be true
|
55
|
-
expect(related_objects.size).to eq 3
|
56
|
-
end
|
57
|
-
|
58
|
-
context 'with files and generic_files' do
|
59
|
-
let(:file1) { subject.files.build }
|
60
|
-
let(:file2) { subject.files.build }
|
61
|
-
|
62
|
-
before do
|
63
|
-
subject.save
|
64
|
-
file1.content = "I'm a file"
|
65
|
-
file2.content = 'I am too'
|
66
|
-
subject.related_objects << object1
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'adds a related object to a generic_file with files and generic_files' do
|
70
|
-
subject.related_objects << object2
|
71
|
-
subject.save
|
72
|
-
subject.reload
|
73
|
-
related_objects = subject.related_objects
|
74
|
-
expect(related_objects.include? object1).to be true
|
75
|
-
expect(related_objects.include? object2).to be true
|
76
|
-
expect(related_objects.size).to eq 2
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
context 'with unacceptable child related objects' do
|
82
|
-
let(:collection1) { Hydra::Works::Collection.new }
|
83
|
-
let(:pcdm_collection1) { Hydra::PCDM::Collection.new }
|
84
|
-
let(:pcdm_file1) { Hydra::PCDM::File.new }
|
85
|
-
let(:non_PCDM_object) { "I'm not a PCDM object" }
|
86
|
-
let(:af_base_object) { ActiveFedora::Base.new }
|
87
|
-
|
88
|
-
let(:error_message) { 'child_related_object must be a pcdm object' }
|
89
|
-
|
90
|
-
it 'does not aggregate Hydra::Works::Collection in related objects aggregation' do
|
91
|
-
expect { subject.related_objects << collection1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /Hydra::Works::Collection:.*> is not a PCDM object./)
|
92
|
-
end
|
93
|
-
|
94
|
-
it 'does not aggregate Hydra::PCDM::Collections in related objects aggregation' do
|
95
|
-
expect { subject.related_objects << pcdm_collection1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /Hydra::PCDM::Collection:.*> is not a PCDM object./)
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'does not aggregate Hydra::PCDM::Files in related objects aggregation' do
|
99
|
-
expect { subject.related_objects << pcdm_file1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base.* expected, got Hydra::PCDM::File.*/)
|
100
|
-
end
|
101
|
-
|
102
|
-
it 'does not aggregate non-PCDM objects in related objects aggregation' do
|
103
|
-
expect { subject.related_objects << non_PCDM_object }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base.* expected, got String.*/)
|
104
|
-
end
|
105
|
-
|
106
|
-
it 'does not aggregate AF::Base objects in related objects aggregation' do
|
107
|
-
expect { subject.related_objects << af_base_object }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base.* is not a PCDM object./)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
context 'with invalid behaviors' do
|
112
|
-
let(:object1) { Hydra::PCDM::Object.new }
|
113
|
-
let(:object2) { Hydra::PCDM::Object.new }
|
114
|
-
|
115
|
-
it 'does not allow related objects to repeat' do
|
116
|
-
skip 'skipping this test because issue pcdm#92 needs to be addressed' do
|
117
|
-
subject.related_objects << object1
|
118
|
-
subject.related_objects << object2
|
119
|
-
subject.related_objects << object1
|
120
|
-
subject.save
|
121
|
-
subject.reload
|
122
|
-
related_objects = subject.related_objects
|
123
|
-
expect(related_objects.include? object1).to be true
|
124
|
-
expect(related_objects.include? object2).to be true
|
125
|
-
expect(related_objects.size).to eq 2
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
describe 'get related objects from generic file' do
|
133
|
-
subject { described_class.new }
|
134
|
-
|
135
|
-
let(:object1) { Hydra::PCDM::Object.new }
|
136
|
-
let(:object2) { Hydra::PCDM::Object.new }
|
137
|
-
|
138
|
-
let(:generic_work1) { Hydra::Works::GenericWork.new }
|
139
|
-
let(:generic_file1) { described_class.new }
|
140
|
-
|
141
|
-
context 'with generic files' do
|
142
|
-
it 'returns empty array when only generic files are aggregated' do
|
143
|
-
expect(subject.related_objects).to eq []
|
144
|
-
end
|
145
|
-
|
146
|
-
it 'returns related objects' do
|
147
|
-
subject.related_objects << object2
|
148
|
-
expect(subject.related_objects).to eq [object2]
|
149
|
-
end
|
150
|
-
|
151
|
-
it 'returns related objects of various types' do
|
152
|
-
subject.related_objects << generic_work1
|
153
|
-
subject.related_objects << generic_file1
|
154
|
-
subject.related_objects << object1
|
155
|
-
subject.save
|
156
|
-
subject.reload
|
157
|
-
related_objects = subject.related_objects
|
158
|
-
expect(related_objects.include? object1).to be true
|
159
|
-
expect(related_objects.include? generic_work1).to be true
|
160
|
-
expect(related_objects.include? generic_file1).to be true
|
161
|
-
expect(related_objects.size).to eq 3
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
describe 'remove related object from related object' do
|
167
|
-
subject { described_class.new }
|
168
|
-
|
169
|
-
let(:related_object1) { Hydra::PCDM::Object.new }
|
170
|
-
let(:related_work2) { Hydra::Works::GenericWork.new }
|
171
|
-
let(:related_file3) { described_class.new }
|
172
|
-
let(:related_object4) { Hydra::PCDM::Object.new }
|
173
|
-
let(:related_work5) { Hydra::Works::GenericWork.new }
|
174
|
-
|
175
|
-
let(:generic_file1) { described_class.new }
|
176
|
-
let(:generic_file2) { described_class.new }
|
177
|
-
|
178
|
-
context 'when multiple related objects' do
|
179
|
-
before do
|
180
|
-
subject.related_objects << related_object1
|
181
|
-
subject.related_objects << related_work2
|
182
|
-
subject.related_objects << related_file3
|
183
|
-
subject.related_objects << related_object4
|
184
|
-
subject.related_objects << related_work5
|
185
|
-
expect(subject.related_objects).to eq [related_object1, related_work2, related_file3, related_object4, related_work5]
|
186
|
-
end
|
187
|
-
|
188
|
-
it 'removes first related object' do
|
189
|
-
expect(subject.related_objects.delete related_object1).to eq [related_object1]
|
190
|
-
expect(subject.related_objects).to eq [related_work2, related_file3, related_object4, related_work5]
|
191
|
-
end
|
192
|
-
|
193
|
-
it 'removes last related object' do
|
194
|
-
expect(subject.related_objects.delete related_work5).to eq [related_work5]
|
195
|
-
expect(subject.related_objects).to eq [related_object1, related_work2, related_file3, related_object4]
|
196
|
-
end
|
197
|
-
|
198
|
-
it 'removes middle related object' do
|
199
|
-
expect(subject.related_objects.delete related_file3).to eq [related_file3]
|
200
|
-
expect(subject.related_objects).to eq [related_object1, related_work2, related_object4, related_work5]
|
201
|
-
end
|
34
|
+
describe '#in_works' do
|
35
|
+
subject { file_set.in_works }
|
36
|
+
let(:generic_work) { Hydra::Works::GenericWork.create }
|
37
|
+
before do
|
38
|
+
generic_work.ordered_members << file_set
|
39
|
+
generic_work.save
|
202
40
|
end
|
203
41
|
|
204
|
-
|
205
|
-
# can't be added.
|
206
|
-
# context 'with unacceptable related object' do
|
42
|
+
it { is_expected.to eq [generic_work] }
|
207
43
|
end
|
208
44
|
|
209
|
-
describe '
|
210
|
-
let(:
|
45
|
+
describe '#destroy' do
|
46
|
+
let(:generic_work) { Hydra::Works::GenericWork.create }
|
211
47
|
before do
|
212
|
-
|
213
|
-
|
48
|
+
generic_work.ordered_members << file_set
|
49
|
+
generic_work.save
|
214
50
|
end
|
215
51
|
|
216
|
-
it
|
217
|
-
expect
|
218
|
-
|
219
|
-
it 'has a parent work' do
|
220
|
-
expect(generic_file1.in_works).to eq [generic_work1]
|
52
|
+
it "Removes the proxy, the list_node and the FileSet" do
|
53
|
+
expect { file_set.destroy }.to change { ActiveFedora::Aggregation::Proxy.count }.by(-1)
|
54
|
+
.and change { generic_work.reload.ordered_member_proxies.to_a.length }.by(-1)
|
221
55
|
end
|
222
56
|
end
|
223
57
|
end
|
@@ -207,153 +207,6 @@ describe Hydra::Works::GenericWork do
|
|
207
207
|
end
|
208
208
|
end
|
209
209
|
|
210
|
-
describe '#related_objects' do
|
211
|
-
context 'with acceptable related objects' do
|
212
|
-
it 'adds various types of related objects to generic_work' do
|
213
|
-
subject.related_objects << generic_work1
|
214
|
-
subject.related_objects << file_set1
|
215
|
-
subject.related_objects << object1
|
216
|
-
subject.save
|
217
|
-
subject.reload
|
218
|
-
expect(subject.related_objects.include? generic_work1).to be true
|
219
|
-
expect(subject.related_objects.include? file_set1).to be true
|
220
|
-
expect(subject.related_objects.include? object1).to be true
|
221
|
-
expect(subject.related_objects.size).to eq 3
|
222
|
-
end
|
223
|
-
|
224
|
-
context 'with works and file_sets' do
|
225
|
-
before do
|
226
|
-
subject.ordered_file_sets << file_set1
|
227
|
-
subject.ordered_file_sets << file_set2
|
228
|
-
subject.ordered_works << generic_work1
|
229
|
-
subject.ordered_works << generic_work2
|
230
|
-
subject.related_objects << object1
|
231
|
-
end
|
232
|
-
|
233
|
-
it 'adds a related object to file_set with works and file_sets' do
|
234
|
-
subject.related_objects << object2
|
235
|
-
subject.save
|
236
|
-
subject.reload
|
237
|
-
expect(subject.related_objects.include? object1).to be true
|
238
|
-
expect(subject.related_objects.include? object2).to be true
|
239
|
-
expect(subject.related_objects.size).to eq 2
|
240
|
-
end
|
241
|
-
end
|
242
|
-
end
|
243
|
-
|
244
|
-
context 'with unacceptable child related objects' do
|
245
|
-
let(:collection1) { Hydra::Works::Collection.new }
|
246
|
-
let(:pcdm_collection1) { Hydra::PCDM::Collection.new }
|
247
|
-
let(:pcdm_file1) { Hydra::PCDM::File.new }
|
248
|
-
let(:non_PCDM_object) { "I'm not a PCDM object" }
|
249
|
-
let(:af_base_object) { ActiveFedora::Base.new }
|
250
|
-
|
251
|
-
let(:error_message) { 'child_related_object must be a pcdm object' }
|
252
|
-
|
253
|
-
it 'does not aggregate Hydra::Works::Collection in related objects aggregation' do
|
254
|
-
expect { subject.related_objects << collection1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /Hydra::Works::Collection:.*> is not a PCDM object./)
|
255
|
-
end
|
256
|
-
|
257
|
-
it 'does not aggregate Hydra::PCDM::Collections in related objects aggregation' do
|
258
|
-
expect { subject.related_objects << pcdm_collection1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /Hydra::PCDM::Collection:.*> is not a PCDM object./)
|
259
|
-
end
|
260
|
-
|
261
|
-
it 'does not aggregate Hydra::PCDM::Files in related objects aggregation' do
|
262
|
-
expect { subject.related_objects << pcdm_file1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base.* expected, got Hydra::PCDM::File.*/)
|
263
|
-
end
|
264
|
-
|
265
|
-
it 'does not aggregate non-PCDM objects in related objects aggregation' do
|
266
|
-
expect { subject.related_objects << non_PCDM_object }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base.* expected, got String.*/)
|
267
|
-
end
|
268
|
-
|
269
|
-
it 'does not aggregate AF::Base objects in related objects aggregation' do
|
270
|
-
expect { subject.related_objects << af_base_object }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base:.*> is not a PCDM object./)
|
271
|
-
end
|
272
|
-
end
|
273
|
-
|
274
|
-
context 'with invalid bahaviors' do
|
275
|
-
it 'does not allow related objects to repeat' do
|
276
|
-
skip 'skipping this test because issue pcdm#92 needs to be addressed' do
|
277
|
-
subject.related_objects << object1
|
278
|
-
subject.related_objects << object2
|
279
|
-
subject.related_objects << object1
|
280
|
-
expect(subject.related_objects.include? object1).to be true
|
281
|
-
expect(subject.related_objects.include? object2).to be true
|
282
|
-
expect(subject.related_objects.size).to eq 2
|
283
|
-
end
|
284
|
-
end
|
285
|
-
end
|
286
|
-
end
|
287
|
-
|
288
|
-
describe '#related_objects <<' do
|
289
|
-
context 'with file sets and works' do
|
290
|
-
before do
|
291
|
-
subject.ordered_members << generic_work1
|
292
|
-
subject.ordered_members << generic_work1
|
293
|
-
subject.ordered_members << file_set1
|
294
|
-
end
|
295
|
-
|
296
|
-
it 'returns empty array when only generic files and generic works are aggregated' do
|
297
|
-
expect(subject.related_objects).to eq []
|
298
|
-
end
|
299
|
-
|
300
|
-
it 'returns only related objects' do
|
301
|
-
subject.related_objects << object2
|
302
|
-
expect(subject.related_objects).to eq [object2]
|
303
|
-
end
|
304
|
-
|
305
|
-
it 'returns related objects of various types' do
|
306
|
-
subject.related_objects << generic_work2
|
307
|
-
subject.related_objects << file_set1
|
308
|
-
subject.related_objects << object1
|
309
|
-
expect(subject.related_objects).to eq [generic_work2, file_set1, object1]
|
310
|
-
expect(subject.related_objects.size).to eq 3
|
311
|
-
end
|
312
|
-
end
|
313
|
-
end
|
314
|
-
|
315
|
-
describe '#related_objects.delete' do
|
316
|
-
context 'when multiple related objects' do
|
317
|
-
let(:related_object1) { Hydra::PCDM::Object.new }
|
318
|
-
let(:related_work2) { described_class.new }
|
319
|
-
let(:related_file3) { Hydra::Works::FileSet.new }
|
320
|
-
let(:related_object4) { Hydra::PCDM::Object.new }
|
321
|
-
let(:related_work5) { described_class.new }
|
322
|
-
before do
|
323
|
-
subject.related_objects << related_object1
|
324
|
-
subject.related_objects << related_work2
|
325
|
-
subject.ordered_members << generic_work2
|
326
|
-
subject.ordered_members << file_set1
|
327
|
-
subject.related_objects << related_file3
|
328
|
-
subject.related_objects << related_object4
|
329
|
-
subject.ordered_members << generic_work1
|
330
|
-
subject.related_objects << related_work5
|
331
|
-
expect(subject.related_objects).to eq [related_object1, related_work2, related_file3, related_object4, related_work5]
|
332
|
-
end
|
333
|
-
|
334
|
-
it 'removes first related object' do
|
335
|
-
expect(subject.related_objects.delete related_object1).to eq [related_object1]
|
336
|
-
expect(subject.related_objects).to eq [related_work2, related_file3, related_object4, related_work5]
|
337
|
-
expect(subject.ordered_works).to eq [generic_work2, generic_work1]
|
338
|
-
expect(subject.ordered_file_sets).to eq [file_set1]
|
339
|
-
end
|
340
|
-
|
341
|
-
it 'removes last related object' do
|
342
|
-
expect(subject.related_objects.delete related_work5).to eq [related_work5]
|
343
|
-
expect(subject.related_objects).to eq [related_object1, related_work2, related_file3, related_object4]
|
344
|
-
expect(subject.ordered_works).to eq [generic_work2, generic_work1]
|
345
|
-
expect(subject.ordered_file_sets).to eq [file_set1]
|
346
|
-
end
|
347
|
-
|
348
|
-
it 'removes middle related object' do
|
349
|
-
expect(subject.related_objects.delete related_file3).to eq [related_file3]
|
350
|
-
expect(subject.related_objects).to eq [related_object1, related_work2, related_object4, related_work5]
|
351
|
-
expect(subject.ordered_works).to eq [generic_work2, generic_work1]
|
352
|
-
expect(subject.ordered_file_sets).to eq [file_set1]
|
353
|
-
end
|
354
|
-
end
|
355
|
-
end
|
356
|
-
|
357
210
|
describe 'should have parent work and collection accessors' do
|
358
211
|
let(:collection1) { Hydra::Works::Collection.new }
|
359
212
|
before do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hydra-works
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Coyne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11
|
11
|
+
date: 2015-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hydra-pcdm
|