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