hydra-works 0.0.1 → 0.1.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/.gitignore +3 -1
- data/.travis.yml +2 -5
- data/Gemfile +1 -3
- data/README.md +28 -13
- data/hydra-works.gemspec +4 -3
- data/lib/hydra/works.rb +7 -57
- data/lib/hydra/works/models/concerns/block_child_objects.rb +16 -0
- data/lib/hydra/works/models/concerns/collection_behavior.rb +27 -2
- data/lib/hydra/works/models/concerns/generic_file/contained_files.rb +5 -13
- data/lib/hydra/works/models/concerns/generic_file/derivatives.rb +9 -13
- data/lib/hydra/works/models/concerns/generic_file/mime_types.rb +14 -9
- data/lib/hydra/works/models/concerns/generic_file/versioned_content.rb +18 -0
- data/lib/hydra/works/models/concerns/generic_file/virus_check.rb +48 -0
- data/lib/hydra/works/models/concerns/generic_file_behavior.rb +24 -1
- data/lib/hydra/works/models/concerns/generic_work_behavior.rb +32 -3
- data/lib/hydra/works/models/generic_file.rb +3 -0
- data/lib/hydra/works/services/generic_file/add_file_to_generic_file.rb +127 -0
- data/lib/hydra/works/services/generic_file/generate/thumbnail.rb +1 -2
- data/lib/hydra/works/services/generic_file/persist_derivative.rb +22 -0
- data/lib/hydra/works/services/generic_file/upload_file.rb +11 -19
- data/lib/hydra/works/version.rb +1 -1
- data/lib/hydra/works/vocab/works_terms.rb +1 -1
- data/spec/fixtures/Example.ogg +0 -0
- data/spec/fixtures/charter.docx +0 -0
- data/spec/fixtures/countdown.avi +0 -0
- data/spec/fixtures/image.jp2 +0 -0
- data/spec/fixtures/piano_note.wav +0 -0
- data/spec/fixtures/test5.mp3 +0 -0
- data/spec/fixtures/world.png +0 -0
- data/spec/hydra/works/models/collection_spec.rb +499 -16
- data/spec/hydra/works/models/concerns/block_child_objects_spec.rb +19 -0
- data/spec/hydra/works/models/concerns/{file → generic_file}/contained_files_spec.rb +20 -17
- data/spec/hydra/works/models/concerns/generic_file/mime_types_spec.rb +76 -0
- data/spec/hydra/works/models/concerns/generic_file/versioned_content_spec.rb +32 -0
- data/spec/hydra/works/models/concerns/generic_file/virus_check_spec.rb +50 -0
- data/spec/hydra/works/models/concerns/generic_file_behavior_spec.rb +1 -1
- data/spec/hydra/works/models/generic_file_spec.rb +201 -14
- data/spec/hydra/works/models/generic_work_spec.rb +530 -14
- data/spec/hydra/works/services/generic_file/add_file_to_generic_file_spec.rb +110 -0
- data/spec/hydra/works/services/generic_file/upload_file_spec.rb +45 -28
- data/spec/hydra/works/services/persist_derivatives_spec.rb +93 -0
- data/spec/hydra/works_spec.rb +35 -35
- data/spec/spec_helper.rb +6 -0
- metadata +56 -95
- data/lib/hydra/works/models/concerns/aggregates_collections.rb +0 -16
- data/lib/hydra/works/models/concerns/aggregates_generic_files.rb +0 -20
- data/lib/hydra/works/models/concerns/aggregates_generic_works.rb +0 -20
- data/lib/hydra/works/processor.rb +0 -9
- data/lib/hydra/works/services/collection/add_collection.rb +0 -19
- data/lib/hydra/works/services/collection/add_generic_work.rb +0 -19
- data/lib/hydra/works/services/collection/add_related_object.rb +0 -19
- data/lib/hydra/works/services/collection/get_collections.rb +0 -17
- data/lib/hydra/works/services/collection/get_generic_works.rb +0 -17
- data/lib/hydra/works/services/collection/get_related_objects.rb +0 -17
- data/lib/hydra/works/services/collection/remove_collection.rb +0 -19
- data/lib/hydra/works/services/collection/remove_generic_work.rb +0 -20
- data/lib/hydra/works/services/collection/remove_related_object.rb +0 -19
- data/lib/hydra/works/services/generic_file/add_file.rb +0 -55
- data/lib/hydra/works/services/generic_file/add_generic_file.rb +0 -19
- data/lib/hydra/works/services/generic_file/add_original_file.rb +0 -11
- data/lib/hydra/works/services/generic_file/add_related_object.rb +0 -19
- data/lib/hydra/works/services/generic_file/add_versioned_original_file.rb +0 -10
- data/lib/hydra/works/services/generic_file/get_generic_files.rb +0 -17
- data/lib/hydra/works/services/generic_file/get_related_objects.rb +0 -17
- data/lib/hydra/works/services/generic_file/remove_generic_file.rb +0 -20
- data/lib/hydra/works/services/generic_file/remove_related_object.rb +0 -19
- data/lib/hydra/works/services/generic_work/add_generic_file.rb +0 -19
- data/lib/hydra/works/services/generic_work/add_generic_work.rb +0 -19
- data/lib/hydra/works/services/generic_work/add_related_object.rb +0 -19
- data/lib/hydra/works/services/generic_work/get_generic_files.rb +0 -17
- data/lib/hydra/works/services/generic_work/get_generic_works.rb +0 -17
- data/lib/hydra/works/services/generic_work/get_related_objects.rb +0 -17
- data/lib/hydra/works/services/generic_work/move_generic_file.rb +0 -19
- data/lib/hydra/works/services/generic_work/remove_generic_file.rb +0 -20
- data/lib/hydra/works/services/generic_work/remove_generic_work.rb +0 -20
- data/lib/hydra/works/services/generic_work/remove_related_object.rb +0 -19
- data/spec/hydra/works/services/collection/add_collection_spec.rb +0 -166
- data/spec/hydra/works/services/collection/add_generic_work_spec.rb +0 -155
- data/spec/hydra/works/services/collection/add_related_object_spec.rb +0 -149
- data/spec/hydra/works/services/collection/get_collections_spec.rb +0 -35
- data/spec/hydra/works/services/collection/get_generic_works_spec.rb +0 -35
- data/spec/hydra/works/services/collection/get_related_objects_spec.rb +0 -49
- data/spec/hydra/works/services/collection/remove_collection_spec.rb +0 -133
- data/spec/hydra/works/services/collection/remove_generic_work_spec.rb +0 -133
- data/spec/hydra/works/services/collection/remove_related_object_spec.rb +0 -128
- data/spec/hydra/works/services/generic_file/add_file_spec.rb +0 -28
- data/spec/hydra/works/services/generic_file/add_generic_file_spec.rb +0 -174
- data/spec/hydra/works/services/generic_file/add_related_object_spec.rb +0 -150
- data/spec/hydra/works/services/generic_file/get_generic_files_spec.rb +0 -19
- data/spec/hydra/works/services/generic_file/get_related_objects_spec.rb +0 -45
- data/spec/hydra/works/services/generic_file/remove_generic_file_spec.rb +0 -124
- data/spec/hydra/works/services/generic_file/remove_related_object_spec.rb +0 -123
- data/spec/hydra/works/services/generic_work/add_generic_file_spec.rb +0 -156
- data/spec/hydra/works/services/generic_work/add_generic_work_spec.rb +0 -157
- data/spec/hydra/works/services/generic_work/add_related_object_spec.rb +0 -148
- data/spec/hydra/works/services/generic_work/get_generic_files_spec.rb +0 -35
- data/spec/hydra/works/services/generic_work/get_generic_works_spec.rb +0 -35
- data/spec/hydra/works/services/generic_work/get_related_objects_spec.rb +0 -46
- data/spec/hydra/works/services/generic_work/move_generic_file_spec.rb +0 -21
- data/spec/hydra/works/services/generic_work/remove_generic_file_spec.rb +0 -132
- data/spec/hydra/works/services/generic_work/remove_generic_work_spec.rb +0 -133
- data/spec/hydra/works/services/generic_work/remove_related_object_spec.rb +0 -128
@@ -2,31 +2,56 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Hydra::Works::GenericWork do
|
4
4
|
|
5
|
-
|
6
|
-
let(:generic_work2) { Hydra::Works::GenericWork::Base.create }
|
7
|
-
let(:generic_work3) { Hydra::Works::GenericWork::Base.create }
|
5
|
+
subject { Hydra::Works::GenericWork::Base.new }
|
8
6
|
|
9
|
-
let(:
|
10
|
-
let(:
|
7
|
+
let(:generic_work1) { Hydra::Works::GenericWork::Base.new }
|
8
|
+
let(:generic_work2) { Hydra::Works::GenericWork::Base.new }
|
9
|
+
let(:generic_work3) { Hydra::Works::GenericWork::Base.new }
|
10
|
+
let(:generic_work4) { Hydra::Works::GenericWork::Base.new }
|
11
|
+
let(:generic_work5) { Hydra::Works::GenericWork::Base.new }
|
12
|
+
|
13
|
+
let(:generic_file1) { Hydra::Works::GenericFile::Base.new }
|
14
|
+
let(:generic_file2) { Hydra::Works::GenericFile::Base.new }
|
15
|
+
|
16
|
+
let(:object1) { Hydra::PCDM::Object.new }
|
17
|
+
let(:object2) { Hydra::PCDM::Object.new }
|
11
18
|
|
12
19
|
let(:pcdm_file1) { Hydra::PCDM::File.new }
|
13
20
|
|
14
|
-
describe '#
|
21
|
+
describe '#child_generic_works=' do
|
15
22
|
it 'should aggregate generic_works' do
|
16
|
-
generic_work1.
|
17
|
-
generic_work1.
|
18
|
-
expect(generic_work1.generic_works).to eq [generic_work2, generic_work3]
|
23
|
+
generic_work1.child_generic_works = [generic_work2, generic_work3]
|
24
|
+
expect(generic_work1.child_generic_works).to eq [generic_work2, generic_work3]
|
19
25
|
end
|
20
26
|
end
|
21
27
|
|
22
28
|
describe '#generic_files=' do
|
23
29
|
it 'should aggregate generic_files' do
|
24
30
|
generic_work1.generic_files = [generic_file1, generic_file2]
|
25
|
-
generic_work1.save
|
26
31
|
expect(generic_work1.generic_files).to eq [generic_file1, generic_file2]
|
27
32
|
end
|
28
33
|
end
|
29
34
|
|
35
|
+
describe '#generic_file_ids' do
|
36
|
+
it 'should list child generic_file ids' do
|
37
|
+
generic_work1.generic_files = [generic_file1, generic_file2]
|
38
|
+
expect(generic_work1.generic_file_ids).to eq [generic_file1.id, generic_file2.id]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "sub-class" do
|
43
|
+
before do
|
44
|
+
class TestWork < Hydra::Works::GenericWork::Base
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
subject { TestWork.new(generic_files: [generic_file1]) }
|
49
|
+
|
50
|
+
it "should have many generic files" do
|
51
|
+
expect(subject.generic_files).to eq [generic_file1]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
30
55
|
describe '#contains' do
|
31
56
|
it 'should present as a missing method' do
|
32
57
|
expect{ generic_work1.contains = [pcdm_file1] }.to raise_error(NoMethodError,"works can not directly contain files. You must add a GenericFile to the work's members and add files to that GenericFile.")
|
@@ -34,17 +59,508 @@ describe Hydra::Works::GenericWork do
|
|
34
59
|
end
|
35
60
|
|
36
61
|
describe 'Related objects' do
|
37
|
-
let(:generic_work1) { Hydra::Works::GenericWork::Base.
|
38
|
-
let(:object1) { Hydra::PCDM::Object.
|
62
|
+
let(:generic_work1) { Hydra::Works::GenericWork::Base.new }
|
63
|
+
let(:object1) { Hydra::PCDM::Object.new }
|
39
64
|
|
40
65
|
before do
|
41
66
|
generic_work1.related_objects = [object1]
|
42
|
-
generic_work1.save
|
43
67
|
end
|
44
68
|
|
45
69
|
it 'persists' do
|
46
|
-
expect(generic_work1.
|
70
|
+
expect(generic_work1.related_objects).to eq [object1]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe '#child_generic_works' do
|
75
|
+
context 'with acceptable generic_works' do
|
76
|
+
|
77
|
+
context 'with generic_files and generic_works' do
|
78
|
+
before do
|
79
|
+
subject.generic_files << generic_file1
|
80
|
+
subject.generic_files << generic_file2
|
81
|
+
subject.child_generic_works << generic_work1
|
82
|
+
subject.child_generic_works << generic_work2
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'should add generic_work to generic_work with generic_files and generic_works' do
|
86
|
+
subject.child_generic_works << generic_work3
|
87
|
+
expect(subject.child_generic_works).to eq [generic_work1,generic_work2,generic_work3]
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe 'aggregates generic_works that implement Hydra::Works::GenericWorkBehavior' do
|
92
|
+
before do
|
93
|
+
class DummyIncWork < ActiveFedora::Base
|
94
|
+
include Hydra::Works::GenericWorkBehavior
|
95
|
+
end
|
96
|
+
end
|
97
|
+
after { Object.send(:remove_const, :DummyIncWork) }
|
98
|
+
let(:iwork1) { DummyIncWork.new }
|
99
|
+
|
100
|
+
it 'should accept implementing generic_work as a child' do
|
101
|
+
subject.child_generic_works << iwork1
|
102
|
+
expect(subject.child_generic_works).to eq [iwork1]
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe 'aggregates generic_works that extend Hydra::Works::GenericWork::Base' do
|
107
|
+
before do
|
108
|
+
class DummyExtWork < Hydra::Works::GenericWork::Base
|
109
|
+
end
|
110
|
+
end
|
111
|
+
after { Object.send(:remove_const, :DummyExtWork) }
|
112
|
+
let(:ework1) { DummyExtWork.new }
|
113
|
+
|
114
|
+
it 'should accept extending generic_work as a child' do
|
115
|
+
subject.child_generic_works << ework1
|
116
|
+
expect(subject.child_generic_works).to eq [ework1]
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
context 'with unacceptable inputs' do
|
122
|
+
before(:all) do
|
123
|
+
@generic_work102 = Hydra::Works::GenericWork::Base.new
|
124
|
+
|
125
|
+
@works_collection101 = Hydra::Works::Collection.new
|
126
|
+
@generic_file101 = Hydra::Works::GenericFile::Base.new
|
127
|
+
@pcdm_collection101 = Hydra::PCDM::Collection.new
|
128
|
+
@pcdm_object101 = Hydra::PCDM::Object.new
|
129
|
+
@pcdm_file101 = Hydra::PCDM::File.new
|
130
|
+
@non_PCDM_object = "I'm not a PCDM object"
|
131
|
+
@af_base_object = ActiveFedora::Base.new
|
132
|
+
end
|
133
|
+
|
134
|
+
context 'that are unacceptable child generic works' do
|
135
|
+
|
136
|
+
let(:error_type1) { ArgumentError }
|
137
|
+
let(:error_message1) { /Hydra::Works::(GenericFile::Base|Collection) with ID: was expected to works_generic_work\?, but it was false/ }
|
138
|
+
let(:error_type2) { NoMethodError }
|
139
|
+
let(:error_message2) { /undefined method `works_generic_work\?' for .*/ }
|
140
|
+
|
141
|
+
it 'should NOT aggregate Hydra::Works::Collection in generic works aggregation' do
|
142
|
+
expect{ subject.child_generic_works << @works_collection101 }.to raise_error(error_type1,error_message1)
|
143
|
+
end
|
144
|
+
|
145
|
+
it 'should NOT aggregate Hydra::Works::GenericFile in generic works aggregation' do
|
146
|
+
expect{ subject.child_generic_works << @generic_file101 }.to raise_error(error_type1,error_message1)
|
147
|
+
end
|
148
|
+
|
149
|
+
it 'should NOT aggregate Hydra::PCDM::Collections in generic works aggregation' do
|
150
|
+
expect{ subject.child_generic_works << @pcdm_collection101 }.to raise_error(error_type2,error_message2)
|
151
|
+
end
|
152
|
+
|
153
|
+
it 'should NOT aggregate Hydra::PCDM::Objects in generic works aggregation' do
|
154
|
+
expect{ subject.child_generic_works << @pcdm_object101 }.to raise_error(error_type2,error_message2)
|
155
|
+
end
|
156
|
+
|
157
|
+
it 'should NOT aggregate Hydra::PCDM::Files in generic works aggregation' do
|
158
|
+
expect{ subject.child_generic_works << @pcdm_file101 }.to raise_error(error_type2,error_message2)
|
159
|
+
end
|
160
|
+
|
161
|
+
it 'should NOT aggregate non-PCDM objects in generic works aggregation' do
|
162
|
+
expect{ subject.child_generic_works << @non_PCDM_object }.to raise_error(error_type2,error_message2)
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'should NOT aggregate AF::Base objects in generic works aggregation' do
|
166
|
+
expect{ subject.child_generic_works << @af_base_object }.to raise_error(error_type2,error_message2)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
describe '#generic_files <<' do
|
173
|
+
it 'should return empty array when only generic_files are aggregated' do
|
174
|
+
subject.generic_files << generic_file1
|
175
|
+
subject.generic_files << generic_file2
|
176
|
+
expect(subject.child_generic_works).to eq []
|
177
|
+
end
|
178
|
+
|
179
|
+
context 'with generic_files and generic_works' do
|
180
|
+
before do
|
181
|
+
subject.generic_files << generic_file1
|
182
|
+
subject.generic_files << generic_file2
|
183
|
+
subject.child_generic_works << generic_work1
|
184
|
+
subject.child_generic_works << generic_work2
|
185
|
+
end
|
186
|
+
|
187
|
+
it 'should only return generic_works' do
|
188
|
+
expect(subject.child_generic_works).to eq [generic_work1,generic_work2]
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
describe '#child_generic_works.delete' do
|
194
|
+
context 'when multiple collections' do
|
195
|
+
before do
|
196
|
+
subject.child_generic_works << generic_work1
|
197
|
+
subject.child_generic_works << generic_work2
|
198
|
+
subject.generic_files << generic_file2
|
199
|
+
subject.child_generic_works << generic_work3
|
200
|
+
subject.child_generic_works << generic_work4
|
201
|
+
subject.generic_files << generic_file1
|
202
|
+
subject.child_generic_works << generic_work5
|
203
|
+
expect(subject.child_generic_works).to eq [generic_work1,generic_work2,generic_work3,generic_work4,generic_work5]
|
204
|
+
end
|
205
|
+
|
206
|
+
it 'should remove first collection' do
|
207
|
+
expect(subject.child_generic_works.delete generic_work1).to eq [generic_work1]
|
208
|
+
expect(subject.child_generic_works).to eq [generic_work2,generic_work3,generic_work4,generic_work5]
|
209
|
+
expect(subject.generic_files).to eq [generic_file2,generic_file1]
|
210
|
+
end
|
211
|
+
|
212
|
+
it 'should remove last collection' do
|
213
|
+
expect(subject.child_generic_works.delete generic_work5).to eq [generic_work5]
|
214
|
+
expect(subject.child_generic_works).to eq [generic_work1,generic_work2,generic_work3,generic_work4]
|
215
|
+
expect(subject.generic_files).to eq [generic_file2,generic_file1]
|
216
|
+
end
|
217
|
+
|
218
|
+
it 'should remove middle collection' do
|
219
|
+
expect(subject.child_generic_works.delete generic_work3).to eq [generic_work3]
|
220
|
+
expect(subject.child_generic_works).to eq [generic_work1,generic_work2,generic_work4,generic_work5]
|
221
|
+
expect(subject.generic_files).to eq [generic_file2,generic_file1]
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
describe '#child_generic_works <<' do
|
227
|
+
context 'with acceptable generic_works' do
|
228
|
+
context 'with generic_files and generic_works' do
|
229
|
+
let(:generic_file3) { Hydra::Works::GenericFile::Base.new }
|
230
|
+
before do
|
231
|
+
subject.generic_files << generic_file1
|
232
|
+
subject.generic_files << generic_file2
|
233
|
+
subject.child_generic_works << generic_work1
|
234
|
+
subject.child_generic_works << generic_work2
|
235
|
+
end
|
236
|
+
|
237
|
+
it 'should add generic_file to generic_work with generic_files and generic_works' do
|
238
|
+
subject.generic_files << generic_file3
|
239
|
+
expect(subject.generic_files).to eq [generic_file1,generic_file2,generic_file3]
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
describe 'aggregates generic_files that implement Hydra::Works::GenericFileBehavior' do
|
244
|
+
before do
|
245
|
+
class DummyIncFile < ActiveFedora::Base
|
246
|
+
include Hydra::Works::GenericFileBehavior
|
247
|
+
end
|
248
|
+
end
|
249
|
+
after { Object.send(:remove_const, :DummyIncFile) }
|
250
|
+
let(:ifile1) { DummyIncFile.new }
|
251
|
+
|
252
|
+
it 'should accept implementing generic_file as a child' do
|
253
|
+
subject.generic_files << ifile1
|
254
|
+
expect(subject.generic_files).to eq [ifile1]
|
255
|
+
end
|
256
|
+
|
257
|
+
end
|
258
|
+
|
259
|
+
describe 'aggregates generic_files that extend Hydra::Works::GenericFile::Base' do
|
260
|
+
before do
|
261
|
+
class DummyExtFile < Hydra::Works::GenericFile::Base
|
262
|
+
end
|
263
|
+
end
|
264
|
+
after { Object.send(:remove_const, :DummyExtFile) }
|
265
|
+
let(:efile1) { DummyExtFile.new }
|
266
|
+
|
267
|
+
it 'should accept extending generic_file as a child' do
|
268
|
+
subject.generic_files << efile1
|
269
|
+
expect(subject.generic_files).to eq [efile1]
|
270
|
+
end
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
context 'with unacceptable inputs' do
|
275
|
+
before(:all) do
|
276
|
+
@generic_work102 = Hydra::Works::GenericWork::Base.new
|
277
|
+
|
278
|
+
@works_collection101 = Hydra::Works::Collection.new
|
279
|
+
@generic_work101 = Hydra::Works::GenericWork::Base.new
|
280
|
+
@generic_file101 = Hydra::Works::GenericFile::Base.new
|
281
|
+
@pcdm_collection101 = Hydra::PCDM::Collection.new
|
282
|
+
@pcdm_object101 = Hydra::PCDM::Object.new
|
283
|
+
@pcdm_file101 = Hydra::PCDM::File.new
|
284
|
+
@non_PCDM_object = "I'm not a PCDM object"
|
285
|
+
@af_base_object = ActiveFedora::Base.new
|
286
|
+
end
|
287
|
+
|
288
|
+
context 'that are unacceptable child generic files' do
|
289
|
+
|
290
|
+
let(:error_type1) { ArgumentError }
|
291
|
+
let(:error_message1) { /Hydra::Works::(GenericWork::Base|Collection) with ID: was expected to works_generic_file\?, but it was false/ }
|
292
|
+
let(:error_type2) { NoMethodError }
|
293
|
+
let(:error_message2) { /undefined method `works_generic_file\?' for .*/ }
|
294
|
+
|
295
|
+
it 'should NOT aggregate Hydra::Works::Collection in generic files aggregation' do
|
296
|
+
expect{ subject.generic_files << @works_collection101 }.to raise_error(error_type1,error_message1)
|
297
|
+
end
|
298
|
+
|
299
|
+
it 'should NOT aggregate Hydra::Works::GenericWork in generic files aggregation' do
|
300
|
+
expect{ subject.generic_files << @generic_work101 }.to raise_error(error_type1,error_message1)
|
301
|
+
end
|
302
|
+
|
303
|
+
it 'should NOT aggregate Hydra::PCDM::Collections in generic files aggregation' do
|
304
|
+
expect{ subject.generic_files << @pcdm_collection101 }.to raise_error(error_type2,error_message2)
|
305
|
+
end
|
306
|
+
|
307
|
+
it 'should NOT aggregate Hydra::PCDM::Objects in generic files aggregation' do
|
308
|
+
expect{ subject.generic_files << @pcdm_object101 }.to raise_error(error_type2,error_message2)
|
309
|
+
end
|
310
|
+
|
311
|
+
it 'should NOT aggregate Hydra::PCDM::Files in generic files aggregation' do
|
312
|
+
expect{ subject.generic_files << @pcdm_file101 }.to raise_error(error_type2,error_message2)
|
313
|
+
end
|
314
|
+
|
315
|
+
it 'should NOT aggregate non-PCDM objects in generic files aggregation' do
|
316
|
+
expect{ subject.generic_files << @non_PCDM_object }.to raise_error(error_type2,error_message2)
|
317
|
+
end
|
318
|
+
|
319
|
+
it 'should NOT aggregate AF::Base objects in generic files aggregation' do
|
320
|
+
expect{ subject.generic_files << @af_base_object }.to raise_error(error_type2,error_message2)
|
321
|
+
end
|
322
|
+
end
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
context "move generic file" do
|
327
|
+
before do
|
328
|
+
subject.generic_files << generic_file1
|
329
|
+
subject.generic_files << generic_file2
|
330
|
+
end
|
331
|
+
it "moves file from one work to another" do
|
332
|
+
expect(subject.generic_files).to eq([generic_file1, generic_file2])
|
333
|
+
expect(generic_work1.generic_files).to eq([])
|
334
|
+
generic_work1.generic_files << subject.generic_files.delete(generic_file1)
|
335
|
+
expect(subject.generic_files).to eq([generic_file2])
|
336
|
+
expect(generic_work1.generic_files).to eq([generic_file1])
|
337
|
+
end
|
338
|
+
end
|
339
|
+
|
340
|
+
describe '#generic_files' do
|
341
|
+
it 'should return empty array when only generic_works are aggregated' do
|
342
|
+
subject.child_generic_works << generic_work1
|
343
|
+
subject.child_generic_works << generic_work2
|
344
|
+
expect(subject.generic_files).to eq []
|
345
|
+
end
|
346
|
+
|
347
|
+
context 'with generic_files and generic_works' do
|
348
|
+
before do
|
349
|
+
subject.generic_files << generic_file1
|
350
|
+
subject.generic_files << generic_file2
|
351
|
+
subject.child_generic_works << generic_work1
|
352
|
+
subject.child_generic_works << generic_work2
|
353
|
+
end
|
354
|
+
|
355
|
+
it 'should only return generic_files' do
|
356
|
+
expect(subject.generic_files).to eq [generic_file1,generic_file2]
|
357
|
+
end
|
358
|
+
end
|
359
|
+
end
|
360
|
+
|
361
|
+
describe '#generic_files.delete' do
|
362
|
+
context 'when multiple collections' do
|
363
|
+
let(:generic_file3) { Hydra::Works::GenericFile::Base.new }
|
364
|
+
let(:generic_file4) { Hydra::Works::GenericFile::Base.new }
|
365
|
+
let(:generic_file5) { Hydra::Works::GenericFile::Base.new }
|
366
|
+
before do
|
367
|
+
subject.generic_files << generic_file1
|
368
|
+
subject.generic_files << generic_file2
|
369
|
+
subject.child_generic_works << generic_work2
|
370
|
+
subject.generic_files << generic_file3
|
371
|
+
subject.generic_files << generic_file4
|
372
|
+
subject.child_generic_works << generic_work1
|
373
|
+
subject.generic_files << generic_file5
|
374
|
+
expect(subject.generic_files).to eq [generic_file1,generic_file2,generic_file3,generic_file4,generic_file5]
|
375
|
+
end
|
376
|
+
|
377
|
+
it 'should remove first collection' do
|
378
|
+
expect(subject.generic_files.delete generic_file1).to eq [generic_file1]
|
379
|
+
expect(subject.generic_files).to eq [generic_file2,generic_file3,generic_file4,generic_file5]
|
380
|
+
expect(subject.child_generic_works).to eq [generic_work2,generic_work1]
|
381
|
+
end
|
382
|
+
|
383
|
+
it 'should remove last collection' do
|
384
|
+
expect(subject.generic_files.delete generic_file5).to eq [generic_file5]
|
385
|
+
expect(subject.generic_files).to eq [generic_file1,generic_file2,generic_file3,generic_file4]
|
386
|
+
expect(subject.child_generic_works).to eq [generic_work2,generic_work1]
|
387
|
+
end
|
388
|
+
|
389
|
+
it 'should remove middle collection' do
|
390
|
+
expect(subject.generic_files.delete generic_file3).to eq [generic_file3]
|
391
|
+
expect(subject.generic_files).to eq [generic_file1,generic_file2,generic_file4,generic_file5]
|
392
|
+
expect(subject.child_generic_works).to eq [generic_work2,generic_work1]
|
393
|
+
end
|
394
|
+
end
|
395
|
+
end
|
396
|
+
|
397
|
+
describe '#related_objects' do
|
398
|
+
|
399
|
+
context 'with acceptable related objects' do
|
400
|
+
|
401
|
+
it 'should add various types of related objects to generic_work' do
|
402
|
+
subject.related_objects << generic_work1
|
403
|
+
subject.related_objects << generic_file1
|
404
|
+
subject.related_objects << object1
|
405
|
+
subject.save
|
406
|
+
subject.reload
|
407
|
+
expect(subject.related_objects.include? generic_work1).to be true
|
408
|
+
expect(subject.related_objects.include? generic_file1).to be true
|
409
|
+
expect(subject.related_objects.include? object1).to be true
|
410
|
+
expect(subject.related_objects.size).to eq 3
|
411
|
+
end
|
412
|
+
|
413
|
+
context 'with generic_works and generic_files' do
|
414
|
+
before do
|
415
|
+
subject.generic_files << generic_file1
|
416
|
+
subject.generic_files << generic_file2
|
417
|
+
subject.child_generic_works << generic_work1
|
418
|
+
subject.child_generic_works << generic_work2
|
419
|
+
subject.related_objects << object1
|
420
|
+
end
|
421
|
+
|
422
|
+
it 'should add a related object to generic_work with generic_works and generic_files' do
|
423
|
+
subject.related_objects << object2
|
424
|
+
subject.save
|
425
|
+
subject.reload
|
426
|
+
expect(subject.related_objects.include? object1).to be true
|
427
|
+
expect(subject.related_objects.include? object2).to be true
|
428
|
+
expect(subject.related_objects.size).to eq 2
|
429
|
+
end
|
430
|
+
end
|
431
|
+
end
|
432
|
+
|
433
|
+
context 'with unacceptable child related objects' do
|
434
|
+
let(:collection1) { Hydra::Works::Collection.new }
|
435
|
+
let(:pcdm_collection1) { Hydra::PCDM::Collection.new }
|
436
|
+
let(:pcdm_file1) { Hydra::PCDM::File.new }
|
437
|
+
let(:non_PCDM_object) { "I'm not a PCDM object" }
|
438
|
+
let(:af_base_object) { ActiveFedora::Base.new }
|
439
|
+
|
440
|
+
let(:error_message) { 'child_related_object must be a pcdm object' }
|
441
|
+
|
442
|
+
it 'should NOT aggregate Hydra::Works::Collection in related objects aggregation' do
|
443
|
+
expect{ subject.related_objects << collection1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /Hydra::Works::Collection:.*> is not a PCDM object./)
|
444
|
+
end
|
445
|
+
|
446
|
+
it 'should NOT aggregate Hydra::PCDM::Collections in related objects aggregation' do
|
447
|
+
expect{ subject.related_objects << pcdm_collection1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /Hydra::PCDM::Collection:.*> is not a PCDM object./)
|
448
|
+
end
|
449
|
+
|
450
|
+
it 'should NOT aggregate Hydra::PCDM::Files in related objects aggregation' do
|
451
|
+
expect{ subject.related_objects << pcdm_file1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base.* expected, got Hydra::PCDM::File.*/)
|
452
|
+
end
|
453
|
+
|
454
|
+
it 'should NOT aggregate non-PCDM objects in related objects aggregation' do
|
455
|
+
expect{ subject.related_objects << non_PCDM_object }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base.* expected, got String.*/)
|
456
|
+
end
|
457
|
+
|
458
|
+
it 'should NOT aggregate AF::Base objects in related objects aggregation' do
|
459
|
+
expect{ subject.related_objects << af_base_object }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base:.*> is not a PCDM object./)
|
460
|
+
end
|
461
|
+
end
|
462
|
+
|
463
|
+
context 'with invalid bahaviors' do
|
464
|
+
it 'should NOT allow related objects to repeat' do
|
465
|
+
skip 'skipping this test because issue pcdm#92 needs to be addressed' do
|
466
|
+
subject.related_objects << object1
|
467
|
+
subject.related_objects << object2
|
468
|
+
subject.related_objects << object1
|
469
|
+
expect(subject.related_objects.include? object1).to be true
|
470
|
+
expect(subject.related_objects.include? object2).to be true
|
471
|
+
expect(subject.related_objects.size).to eq 2
|
472
|
+
end
|
473
|
+
end
|
474
|
+
end
|
475
|
+
end
|
476
|
+
|
477
|
+
describe '#related_objects <<' do
|
478
|
+
context 'with generic files and works' do
|
479
|
+
before do
|
480
|
+
subject.child_generic_works << generic_work1
|
481
|
+
subject.child_generic_works << generic_work1
|
482
|
+
subject.generic_files << generic_file1
|
483
|
+
end
|
484
|
+
|
485
|
+
it 'should return empty array when only generic files and generic works are aggregated' do
|
486
|
+
expect(subject.related_objects).to eq []
|
487
|
+
end
|
488
|
+
|
489
|
+
it 'should only return related objects' do
|
490
|
+
subject.related_objects << object2
|
491
|
+
expect(subject.related_objects).to eq [object2]
|
492
|
+
end
|
493
|
+
|
494
|
+
it 'should return related objects of various types' do
|
495
|
+
subject.related_objects << generic_work2
|
496
|
+
subject.related_objects << generic_file1
|
497
|
+
subject.related_objects << object1
|
498
|
+
expect(subject.related_objects).to eq [generic_work2,generic_file1,object1]
|
499
|
+
expect(subject.related_objects.size).to eq 3
|
500
|
+
end
|
501
|
+
end
|
502
|
+
end
|
503
|
+
|
504
|
+
describe '#related_objects.delete' do
|
505
|
+
context 'when multiple related objects' do
|
506
|
+
let(:related_object1) { Hydra::PCDM::Object.new }
|
507
|
+
let(:related_work2) { Hydra::Works::GenericWork::Base.new }
|
508
|
+
let(:related_file3) { Hydra::Works::GenericFile::Base.new }
|
509
|
+
let(:related_object4) { Hydra::PCDM::Object.new }
|
510
|
+
let(:related_work5) { Hydra::Works::GenericWork::Base.new }
|
511
|
+
before do
|
512
|
+
subject.related_objects << related_object1
|
513
|
+
subject.related_objects << related_work2
|
514
|
+
subject.child_generic_works << generic_work2
|
515
|
+
subject.generic_files << generic_file1
|
516
|
+
subject.related_objects << related_file3
|
517
|
+
subject.related_objects << related_object4
|
518
|
+
subject.child_generic_works << generic_work1
|
519
|
+
subject.related_objects << related_work5
|
520
|
+
expect(subject.related_objects).to eq [related_object1,related_work2,related_file3,related_object4,related_work5]
|
521
|
+
end
|
522
|
+
|
523
|
+
it 'should remove first related object' do
|
524
|
+
expect(subject.related_objects.delete related_object1).to eq [related_object1]
|
525
|
+
expect(subject.related_objects).to eq [related_work2,related_file3,related_object4,related_work5]
|
526
|
+
expect(subject.child_generic_works).to eq [generic_work2,generic_work1]
|
527
|
+
expect(subject.generic_files).to eq [generic_file1]
|
528
|
+
end
|
529
|
+
|
530
|
+
it 'should remove last related object' do
|
531
|
+
expect(subject.related_objects.delete related_work5).to eq [related_work5]
|
532
|
+
expect(subject.related_objects).to eq [related_object1,related_work2,related_file3,related_object4]
|
533
|
+
expect(subject.child_generic_works).to eq [generic_work2,generic_work1]
|
534
|
+
expect(subject.generic_files).to eq [generic_file1]
|
535
|
+
end
|
536
|
+
|
537
|
+
it 'should remove middle related object' do
|
538
|
+
expect(subject.related_objects.delete related_file3).to eq [related_file3]
|
539
|
+
expect(subject.related_objects).to eq [related_object1,related_work2,related_object4,related_work5]
|
540
|
+
expect(subject.child_generic_works).to eq [generic_work2,generic_work1]
|
541
|
+
expect(subject.generic_files).to eq [generic_file1]
|
542
|
+
end
|
47
543
|
end
|
48
544
|
end
|
49
545
|
|
546
|
+
describe "should have parent work and collection accessors" do
|
547
|
+
let(:collection1) { Hydra::Works::Collection.new }
|
548
|
+
before do
|
549
|
+
collection1.child_generic_works << generic_work2
|
550
|
+
generic_work1.child_generic_works << generic_work2
|
551
|
+
collection1.save
|
552
|
+
generic_work1.save
|
553
|
+
generic_work2.save
|
554
|
+
end
|
555
|
+
|
556
|
+
it 'should have parents' do
|
557
|
+
expect(generic_work2.parents).to eq [collection1,generic_work1]
|
558
|
+
end
|
559
|
+
it 'should have a parent collection' do
|
560
|
+
expect(generic_work2.parent_collections).to eq [collection1]
|
561
|
+
end
|
562
|
+
it 'should have a parent generic_work' do
|
563
|
+
expect(generic_work2.parent_generic_works).to eq [generic_work1]
|
564
|
+
end
|
565
|
+
end
|
50
566
|
end
|