hydra-works 0.1.0 → 0.2.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 +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
|