hydra-works 0.0.1

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.
Files changed (104) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +17 -0
  4. data/.rspec +1 -0
  5. data/.travis.yml +14 -0
  6. data/CONTRIBUTING.md +115 -0
  7. data/Gemfile +14 -0
  8. data/LICENSE +16 -0
  9. data/README.md +80 -0
  10. data/Rakefile +23 -0
  11. data/hydra-works.gemspec +33 -0
  12. data/lib/hydra/works.rb +81 -0
  13. data/lib/hydra/works/models/collection.rb +5 -0
  14. data/lib/hydra/works/models/concerns/aggregates_collections.rb +16 -0
  15. data/lib/hydra/works/models/concerns/aggregates_generic_files.rb +20 -0
  16. data/lib/hydra/works/models/concerns/aggregates_generic_works.rb +20 -0
  17. data/lib/hydra/works/models/concerns/collection_behavior.rb +28 -0
  18. data/lib/hydra/works/models/concerns/generic_file/contained_files.rb +22 -0
  19. data/lib/hydra/works/models/concerns/generic_file/derivatives.rb +32 -0
  20. data/lib/hydra/works/models/concerns/generic_file/mime_types.rb +69 -0
  21. data/lib/hydra/works/models/concerns/generic_file_behavior.rb +25 -0
  22. data/lib/hydra/works/models/concerns/generic_work_behavior.rb +30 -0
  23. data/lib/hydra/works/models/generic_file.rb +17 -0
  24. data/lib/hydra/works/models/generic_work.rb +9 -0
  25. data/lib/hydra/works/processor.rb +9 -0
  26. data/lib/hydra/works/services/collection/add_collection.rb +19 -0
  27. data/lib/hydra/works/services/collection/add_generic_work.rb +19 -0
  28. data/lib/hydra/works/services/collection/add_related_object.rb +19 -0
  29. data/lib/hydra/works/services/collection/get_collections.rb +17 -0
  30. data/lib/hydra/works/services/collection/get_generic_works.rb +17 -0
  31. data/lib/hydra/works/services/collection/get_related_objects.rb +17 -0
  32. data/lib/hydra/works/services/collection/remove_collection.rb +19 -0
  33. data/lib/hydra/works/services/collection/remove_generic_work.rb +20 -0
  34. data/lib/hydra/works/services/collection/remove_related_object.rb +19 -0
  35. data/lib/hydra/works/services/generic_file/add_file.rb +55 -0
  36. data/lib/hydra/works/services/generic_file/add_generic_file.rb +19 -0
  37. data/lib/hydra/works/services/generic_file/add_original_file.rb +11 -0
  38. data/lib/hydra/works/services/generic_file/add_related_object.rb +19 -0
  39. data/lib/hydra/works/services/generic_file/add_versioned_original_file.rb +10 -0
  40. data/lib/hydra/works/services/generic_file/generate/thumbnail.rb +19 -0
  41. data/lib/hydra/works/services/generic_file/get_generic_files.rb +17 -0
  42. data/lib/hydra/works/services/generic_file/get_related_objects.rb +17 -0
  43. data/lib/hydra/works/services/generic_file/remove_generic_file.rb +20 -0
  44. data/lib/hydra/works/services/generic_file/remove_related_object.rb +19 -0
  45. data/lib/hydra/works/services/generic_file/upload_file.rb +32 -0
  46. data/lib/hydra/works/services/generic_work/add_generic_file.rb +19 -0
  47. data/lib/hydra/works/services/generic_work/add_generic_work.rb +19 -0
  48. data/lib/hydra/works/services/generic_work/add_related_object.rb +19 -0
  49. data/lib/hydra/works/services/generic_work/get_generic_files.rb +17 -0
  50. data/lib/hydra/works/services/generic_work/get_generic_works.rb +17 -0
  51. data/lib/hydra/works/services/generic_work/get_related_objects.rb +17 -0
  52. data/lib/hydra/works/services/generic_work/move_generic_file.rb +19 -0
  53. data/lib/hydra/works/services/generic_work/remove_generic_file.rb +20 -0
  54. data/lib/hydra/works/services/generic_work/remove_generic_work.rb +20 -0
  55. data/lib/hydra/works/services/generic_work/remove_related_object.rb +19 -0
  56. data/lib/hydra/works/version.rb +5 -0
  57. data/lib/hydra/works/vocab/works_terms.rb +12 -0
  58. data/spec/fixtures/sample-file.pdf +0 -0
  59. data/spec/fixtures/updated-file.txt +1 -0
  60. data/spec/hydra/works/models/collection_spec.rb +41 -0
  61. data/spec/hydra/works/models/concerns/file/contained_files_spec.rb +113 -0
  62. data/spec/hydra/works/models/concerns/generic_file_behavior_spec.rb +12 -0
  63. data/spec/hydra/works/models/generic_file_spec.rb +45 -0
  64. data/spec/hydra/works/models/generic_work_spec.rb +50 -0
  65. data/spec/hydra/works/services/collection/add_collection_spec.rb +166 -0
  66. data/spec/hydra/works/services/collection/add_generic_work_spec.rb +155 -0
  67. data/spec/hydra/works/services/collection/add_related_object_spec.rb +149 -0
  68. data/spec/hydra/works/services/collection/get_collections_spec.rb +35 -0
  69. data/spec/hydra/works/services/collection/get_generic_works_spec.rb +35 -0
  70. data/spec/hydra/works/services/collection/get_related_objects_spec.rb +49 -0
  71. data/spec/hydra/works/services/collection/remove_collection_spec.rb +133 -0
  72. data/spec/hydra/works/services/collection/remove_generic_work_spec.rb +133 -0
  73. data/spec/hydra/works/services/collection/remove_related_object_spec.rb +128 -0
  74. data/spec/hydra/works/services/generic_file/add_file_spec.rb +28 -0
  75. data/spec/hydra/works/services/generic_file/add_generic_file_spec.rb +174 -0
  76. data/spec/hydra/works/services/generic_file/add_related_object_spec.rb +150 -0
  77. data/spec/hydra/works/services/generic_file/generate/thumbnail_spec.rb +21 -0
  78. data/spec/hydra/works/services/generic_file/get_generic_files_spec.rb +19 -0
  79. data/spec/hydra/works/services/generic_file/get_related_objects_spec.rb +45 -0
  80. data/spec/hydra/works/services/generic_file/remove_generic_file_spec.rb +124 -0
  81. data/spec/hydra/works/services/generic_file/remove_related_object_spec.rb +123 -0
  82. data/spec/hydra/works/services/generic_file/upload_file_spec.rb +82 -0
  83. data/spec/hydra/works/services/generic_work/add_generic_file_spec.rb +156 -0
  84. data/spec/hydra/works/services/generic_work/add_generic_work_spec.rb +157 -0
  85. data/spec/hydra/works/services/generic_work/add_related_object_spec.rb +148 -0
  86. data/spec/hydra/works/services/generic_work/get_generic_files_spec.rb +35 -0
  87. data/spec/hydra/works/services/generic_work/get_generic_works_spec.rb +35 -0
  88. data/spec/hydra/works/services/generic_work/get_related_objects_spec.rb +46 -0
  89. data/spec/hydra/works/services/generic_work/move_generic_file_spec.rb +21 -0
  90. data/spec/hydra/works/services/generic_work/remove_generic_file_spec.rb +132 -0
  91. data/spec/hydra/works/services/generic_work/remove_generic_work_spec.rb +133 -0
  92. data/spec/hydra/works/services/generic_work/remove_related_object_spec.rb +128 -0
  93. data/spec/hydra/works_spec.rb +149 -0
  94. data/spec/spec_helper.rb +40 -0
  95. data/use-cases/conference_event_use_case.md +16 -0
  96. data/use-cases/lafayette_college_geospatial_use_case.md +80 -0
  97. data/use-cases/northwestern_adminset_use-case.md +19 -0
  98. data/use-cases/northwestern_displayset_use_case.md +23 -0
  99. data/use-cases/northwestern_playlist_use_case.md +21 -0
  100. data/use-cases/princeton_book_use_case.md +117 -0
  101. data/use-cases/scholarsphere_use_case.md +32 -0
  102. data/use-cases/stanford_data_model_use_case.md +86 -0
  103. data/use-cases/ucin_linked_resource_use_case.md +21 -0
  104. metadata +338 -0
@@ -0,0 +1,5 @@
1
+ module Hydra
2
+ module Works
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,12 @@
1
+ require 'rdf'
2
+ module WorksVocabularies
3
+ class WorksTerms < RDF::Vocabulary("http://hydra.org/works/models#")
4
+
5
+ # Class definitions
6
+ term :Collection
7
+ term :GenericWork
8
+ term :GenericFile
9
+ term :File
10
+
11
+ end
12
+ end
@@ -0,0 +1 @@
1
+ some updated content
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hydra::Works::Collection do
4
+
5
+ let(:collection1) { Hydra::Works::Collection.create }
6
+ let(:collection2) { Hydra::Works::Collection.create }
7
+ let(:collection3) { Hydra::Works::Collection.create }
8
+
9
+ let(:generic_work1) { Hydra::Works::GenericWork::Base.create }
10
+ let(:generic_work2) { Hydra::Works::GenericWork::Base.create }
11
+
12
+ describe '#collections=' do
13
+ it 'should aggregate collections' do
14
+ collection1.collections = [collection2, collection3]
15
+ collection1.save
16
+ expect(collection1.collections).to eq [collection2, collection3]
17
+ end
18
+ end
19
+
20
+ describe '#generic_works=' do
21
+ it 'should aggregate generic_works' do
22
+ collection1.generic_works = [generic_work1,generic_work2]
23
+ collection1.save
24
+ expect(collection1.generic_works).to eq [generic_work1,generic_work2]
25
+ end
26
+ end
27
+
28
+ describe 'Related objects' do
29
+ let(:object) { Hydra::PCDM::Object.create }
30
+ let(:collection) { Hydra::Works::Collection.create }
31
+
32
+ before do
33
+ collection.related_objects = [object]
34
+ collection.save
35
+ end
36
+
37
+ it 'persists' do
38
+ expect(collection.reload.related_objects).to eq [object]
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,113 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hydra::Works::GenericFile::ContainedFiles do
4
+
5
+ let(:generic_file) do
6
+ Hydra::Works::GenericFile::Base.create
7
+ end
8
+
9
+ let(:thumbnail) do
10
+ file = generic_file.files.build
11
+ Hydra::PCDM::AddTypeToFile.call(file, pcdm_thumbnail_uri)
12
+ end
13
+
14
+ let(:file) { generic_file.files.build }
15
+ let(:pcdm_thumbnail_uri) { ::RDF::URI("http://pcdm.org/ThumbnailImage") }
16
+
17
+ before do
18
+ generic_file.files = [file]
19
+ generic_file.save
20
+ end
21
+
22
+ describe "#thumbnail" do
23
+
24
+ context "when a thumbnail is present" do
25
+ before do
26
+ generic_file.thumbnail.content = "thumbnail"
27
+ end
28
+ subject { generic_file.thumbnail }
29
+ it "can be saved without errors" do
30
+ expect(subject.save).to be_truthy
31
+ end
32
+ it "retrieves content of the thumbnail" do
33
+ expect(subject.content).to eql "thumbnail"
34
+ end
35
+ it "retains origin pcdm.File RDF type" do
36
+ expect(subject.metadata_node.type).to include( ::RDF::URI("http://pcdm.org/ThumbnailImage") )
37
+ expect(subject.metadata_node.type).to include(RDFVocabularies::PCDMTerms.File)
38
+ end
39
+ end
40
+
41
+ context "when no thumbnail is present" do
42
+ subject { generic_file.thumbnail }
43
+ it "initializes an unsaved File object with Thumbnail type" do
44
+ expect(subject).to be_new_record
45
+ expect(subject.metadata_node.type).to include(pcdm_thumbnail_uri)
46
+ expect(subject.metadata_node.type).to include(RDFVocabularies::PCDMTerms.File)
47
+ end
48
+ end
49
+
50
+ end
51
+
52
+ describe "#original_file" do
53
+
54
+ context "when an original file is present" do
55
+ before do
56
+ generic_file.original_file.content = "original_file"
57
+ end
58
+ subject { generic_file.original_file }
59
+
60
+ it "can be saved without errors" do
61
+ expect(subject.save).to be_truthy
62
+ end
63
+ it "retrieves content of the original_file" do
64
+ expect(subject.content).to eql "original_file"
65
+ end
66
+ it "retains origin pcdm.File RDF type" do
67
+ expect(subject.metadata_node.type).to include(::RDF::URI("http://pcdm.org/OriginalFile") )
68
+ expect(generic_file.original_file.metadata_node.type).to include(RDFVocabularies::PCDMTerms.File)
69
+ end
70
+ end
71
+
72
+ context "when no original file is present" do
73
+ subject { generic_file.original_file }
74
+ it "initializes an unsaved File object with OrignalFile type" do
75
+ expect(subject).to be_new_record
76
+ expect(subject.metadata_node.type).to include(::RDF::URI("http://pcdm.org/OriginalFile") )
77
+ expect(subject.metadata_node.type).to include(RDFVocabularies::PCDMTerms.File)
78
+ end
79
+ end
80
+
81
+ end
82
+
83
+ describe "#extracted_text" do
84
+
85
+ context "when extracted text is present" do
86
+ before do
87
+ generic_file.extracted_text.content = "extracted_text"
88
+ end
89
+ subject { generic_file.extracted_text }
90
+ it "can be saved without errors" do
91
+ expect(subject.save).to be_truthy
92
+ end
93
+ it "retrieves content of the extracted_text" do
94
+ expect(subject.content).to eql "extracted_text"
95
+ end
96
+ it "retains origin pcdm.File RDF type" do
97
+ expect(subject.metadata_node.type).to include(::RDF::URI("http://pcdm.org/ExtractedText") )
98
+ expect(subject.metadata_node.type).to include(RDFVocabularies::PCDMTerms.File)
99
+ end
100
+ end
101
+
102
+ context "when no extracted text is present" do
103
+ subject { generic_file.extracted_text }
104
+ it "initializes an unsaved File object with ExtractedText type" do
105
+ expect(subject).to be_new_record
106
+ expect(subject.metadata_node.type).to include(::RDF::URI("http://pcdm.org/ExtractedText") )
107
+ expect(subject.metadata_node.type).to include(RDFVocabularies::PCDMTerms.File)
108
+ end
109
+ end
110
+
111
+ end
112
+
113
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hydra::Works::GenericFileBehavior do
4
+ class IncludesGenericFileBehavior < ActiveFedora::Base
5
+ include Hydra::Works::GenericFileBehavior
6
+ end
7
+ subject { IncludesGenericFileBehavior.new }
8
+
9
+ it "ensures that objects will be recognized as generic_files" do
10
+ expect(Hydra::Works.generic_file? subject).to be_truthy
11
+ end
12
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hydra::Works::GenericFile::Base do
4
+
5
+ let(:generic_file1) { Hydra::Works::GenericFile::Base.create }
6
+ let(:generic_file2) { Hydra::Works::GenericFile::Base.create }
7
+ let(:generic_file3) { Hydra::Works::GenericFile::Base.create }
8
+
9
+ describe '#generic_files=' do
10
+ it 'should aggregate generic_files' do
11
+ generic_file1.generic_files = [generic_file2, generic_file3]
12
+ generic_file1.save
13
+ expect(generic_file1.generic_files).to eq [generic_file2, generic_file3]
14
+ end
15
+ end
16
+
17
+ describe 'Related objects' do
18
+ let(:object1) { Hydra::PCDM::Object.create }
19
+
20
+ before do
21
+ generic_file1.related_objects = [object1]
22
+ generic_file1.save
23
+ end
24
+
25
+ it 'persists' do
26
+ expect(generic_file1.reload.related_objects).to eq [object1]
27
+ end
28
+ end
29
+
30
+ describe '#files' do
31
+ let(:object) { described_class.create }
32
+ let(:file1) { object.files.build }
33
+ let(:file2) { object.files.build }
34
+
35
+ before do
36
+ file1.content = "I'm a file"
37
+ file2.content = "I am too"
38
+ object.save!
39
+ end
40
+
41
+ subject { described_class.find(object.id).files }
42
+
43
+ it { is_expected.to eq [file1, file2] }
44
+ end
45
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hydra::Works::GenericWork do
4
+
5
+ let(:generic_work1) { Hydra::Works::GenericWork::Base.create }
6
+ let(:generic_work2) { Hydra::Works::GenericWork::Base.create }
7
+ let(:generic_work3) { Hydra::Works::GenericWork::Base.create }
8
+
9
+ let(:generic_file1) { Hydra::Works::GenericFile::Base.create }
10
+ let(:generic_file2) { Hydra::Works::GenericFile::Base.create }
11
+
12
+ let(:pcdm_file1) { Hydra::PCDM::File.new }
13
+
14
+ describe '#generic_works=' do
15
+ it 'should aggregate generic_works' do
16
+ generic_work1.generic_works = [generic_work2, generic_work3]
17
+ generic_work1.save
18
+ expect(generic_work1.generic_works).to eq [generic_work2, generic_work3]
19
+ end
20
+ end
21
+
22
+ describe '#generic_files=' do
23
+ it 'should aggregate generic_files' do
24
+ generic_work1.generic_files = [generic_file1, generic_file2]
25
+ generic_work1.save
26
+ expect(generic_work1.generic_files).to eq [generic_file1, generic_file2]
27
+ end
28
+ end
29
+
30
+ describe '#contains' do
31
+ it 'should present as a missing method' do
32
+ 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.")
33
+ end
34
+ end
35
+
36
+ describe 'Related objects' do
37
+ let(:generic_work1) { Hydra::Works::GenericWork::Base.create }
38
+ let(:object1) { Hydra::PCDM::Object.create }
39
+
40
+ before do
41
+ generic_work1.related_objects = [object1]
42
+ generic_work1.save
43
+ end
44
+
45
+ it 'persists' do
46
+ expect(generic_work1.reload.related_objects).to eq [object1]
47
+ end
48
+ end
49
+
50
+ end
@@ -0,0 +1,166 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hydra::Works::AddCollectionToCollection do
4
+
5
+ subject { Hydra::Works::Collection.create }
6
+
7
+ describe '#call' do
8
+ context 'with acceptable collections' do
9
+ let(:collection1) { Hydra::Works::Collection.create }
10
+ let(:collection2) { Hydra::Works::Collection.create }
11
+ let(:collection3) { Hydra::Works::Collection.create }
12
+ let(:generic_work1) { Hydra::Works::GenericWork::Base.create }
13
+ let(:generic_work2) { Hydra::Works::GenericWork::Base.create }
14
+
15
+ context 'with collections and generic_works' do
16
+ before do
17
+ Hydra::Works::AddCollectionToCollection.call( subject, collection1 )
18
+ Hydra::Works::AddCollectionToCollection.call( subject, collection2 )
19
+ Hydra::Works::AddGenericWorkToCollection.call( subject, generic_work1 )
20
+ Hydra::Works::AddGenericWorkToCollection.call( subject, generic_work2 )
21
+ subject.save
22
+ end
23
+
24
+ it 'should add an generic_work to collection with collections and generic_works' do
25
+ Hydra::Works::AddCollectionToCollection.call( subject, collection3 )
26
+ expect( Hydra::Works::GetCollectionsFromCollection.call( subject ) ).to eq [collection1,collection2,collection3]
27
+ end
28
+
29
+ it 'should solrize member ids' do
30
+ skip 'skipping this test because issue #109 needs to be addressed' do
31
+ expect(subject.to_solr["generic_works_ssim"]).to include(generic_work1.id,generic_work2.id)
32
+ expect(subject.to_solr["generic_works_ssim"]).not_to include(collection2.id,collection1.id,collection3.id)
33
+ expect(subject.to_solr["collections_ssim"]).to include(collection2.id,collection1.id,collection3.id)
34
+ expect(subject.to_solr["collections_ssim"]).not_to include(generic_work1.id,generic_work2.id)
35
+ end
36
+ end
37
+ end
38
+
39
+ describe 'aggregates collections that implement Hydra::Works' do
40
+ before do
41
+ class Kollection < ActiveFedora::Base
42
+ include Hydra::Works::CollectionBehavior
43
+ end
44
+ end
45
+ after { Object.send(:remove_const, :Kollection) }
46
+ let(:kollection1) { Kollection.create }
47
+
48
+ it 'should accept implementing collection as a child' do
49
+ Hydra::Works::AddCollectionToCollection.call( subject, kollection1 )
50
+ subject.save
51
+ expect( Hydra::Works::GetCollectionsFromCollection.call( subject ) ).to eq [kollection1]
52
+ end
53
+
54
+ it 'should accept implementing collection as a parent' do
55
+ Hydra::Works::AddCollectionToCollection.call( kollection1, collection1 )
56
+ subject.save
57
+ expect( Hydra::Works::GetCollectionsFromCollection.call( kollection1 ) ).to eq [collection1]
58
+ end
59
+ end
60
+
61
+ describe 'aggregates collections that extend Hydra::Works' do
62
+ before do
63
+ class Cullection < Hydra::Works::Collection
64
+ end
65
+ end
66
+ after { Object.send(:remove_const, :Cullection) }
67
+ let(:cullection1) { Cullection.create }
68
+
69
+ it 'should accept extending collection as a child' do
70
+ Hydra::Works::AddCollectionToCollection.call( subject, cullection1 )
71
+ subject.save
72
+ expect( Hydra::Works::GetCollectionsFromCollection.call( subject ) ).to eq [cullection1]
73
+ end
74
+
75
+ it 'should accept extending collection as a parent' do
76
+ Hydra::Works::AddCollectionToCollection.call( cullection1, collection1 )
77
+ subject.save
78
+ expect( Hydra::Works::GetCollectionsFromCollection.call( cullection1 ) ).to eq [collection1]
79
+ end
80
+ end
81
+ end
82
+
83
+ context 'with unacceptable child collections' do
84
+ let(:generic_work1) { Hydra::Works::GenericWork::Base.create }
85
+ let(:generic_file1) { Hydra::Works::GenericFile::Base.create }
86
+ let(:pcdm_collection1) { Hydra::PCDM::Collection.create }
87
+ let(:pcdm_object1) { Hydra::PCDM::Object.create }
88
+ let(:pcdm_file1) { Hydra::PCDM::File.new }
89
+ let(:non_PCDM_object) { "I'm not a PCDM object" }
90
+ let(:af_base_object) { ActiveFedora::Base.create }
91
+
92
+ let(:error_message) { 'child_collection must be a hydra-works collection' }
93
+
94
+ it 'should NOT aggregate Hydra::Works::GenericWork in collections aggregation' do
95
+ expect{ Hydra::Works::AddCollectionToCollection.call( subject, generic_work1 ) }.to raise_error(ArgumentError,error_message)
96
+ end
97
+
98
+ it 'should NOT aggregate Hydra::Works::GenericFile in collections aggregation' do
99
+ expect{ Hydra::Works::AddCollectionToCollection.call( subject, generic_file1 ) }.to raise_error(ArgumentError,error_message)
100
+ end
101
+
102
+ it 'should NOT aggregate Hydra::PCDM::Collections in collections aggregation' do
103
+ expect{ Hydra::Works::AddCollectionToCollection.call( subject, pcdm_collection1 ) }.to raise_error(ArgumentError,error_message)
104
+ end
105
+
106
+ it 'should NOT aggregate Hydra::PCDM::Objects in collections aggregation' do
107
+ expect{ Hydra::Works::AddCollectionToCollection.call( subject, pcdm_object1 ) }.to raise_error(ArgumentError,error_message)
108
+ end
109
+
110
+ it 'should NOT aggregate Hydra::PCDM::Files in collections aggregation' do
111
+ expect{ Hydra::Works::AddCollectionToCollection.call( subject, pcdm_file1 ) }.to raise_error(ArgumentError,error_message)
112
+ end
113
+
114
+ it 'should NOT aggregate non-PCDM objects in collections aggregation' do
115
+ expect{ Hydra::Works::AddCollectionToCollection.call( subject, non_PCDM_object ) }.to raise_error(ArgumentError,error_message)
116
+ end
117
+
118
+ it 'should NOT aggregate AF::Base objects in collections aggregation' do
119
+ expect{ Hydra::Works::AddCollectionToCollection.call( subject, af_base_object ) }.to raise_error(ArgumentError,error_message)
120
+ end
121
+ end
122
+
123
+ context 'with unacceptable parent collections' do
124
+ let(:collection1) { Hydra::Works::Collection.create }
125
+ let(:generic_work1) { Hydra::Works::GenericWork::Base.create }
126
+ let(:generic_file1) { Hydra::Works::GenericFile::Base.create }
127
+ let(:pcdm_collection1) { Hydra::PCDM::Collection.create }
128
+ let(:pcdm_object1) { Hydra::PCDM::Object.create }
129
+ let(:pcdm_file1) { Hydra::PCDM::File.new }
130
+ let(:non_PCDM_object) { "I'm not a PCDM object" }
131
+ let(:af_base_object) { ActiveFedora::Base.create }
132
+
133
+ let(:error_message) { 'parent_collection must be a hydra-works collection' }
134
+
135
+ it 'should NOT accept Hydra::Works::GenericWork as parent collection' do
136
+ expect{ Hydra::Works::AddCollectionToCollection.call( generic_work1, collection1 ) }.to raise_error(ArgumentError,error_message)
137
+ end
138
+
139
+ it 'should NOT accept Hydra::Works::GenericFile as parent collection' do
140
+ expect{ Hydra::Works::AddCollectionToCollection.call( generic_file1, collection1 ) }.to raise_error(ArgumentError,error_message)
141
+ end
142
+
143
+ it 'should NOT accept Hydra::PCDM::Collections as parent collection' do
144
+ expect{ Hydra::Works::AddCollectionToCollection.call( pcdm_collection1, collection1 ) }.to raise_error(ArgumentError,error_message)
145
+ end
146
+
147
+ it 'should NOT accept Hydra::PCDM::Objects as parent collection' do
148
+ expect{ Hydra::Works::AddCollectionToCollection.call( pcdm_object1, collection1 ) }.to raise_error(ArgumentError,error_message)
149
+ end
150
+
151
+ it 'should NOT accept Hydra::PCDM::Files as parent collection' do
152
+ expect{ Hydra::Works::AddCollectionToCollection.call( pcdm_file1, collection1 ) }.to raise_error(ArgumentError,error_message)
153
+ end
154
+
155
+ it 'should NOT accept non-PCDM objects as parent collection' do
156
+ expect{ Hydra::Works::AddCollectionToCollection.call( non_PCDM_object, collection1 ) }.to raise_error(ArgumentError,error_message)
157
+ end
158
+
159
+ it 'should NOT accept AF::Base objects as parent collection' do
160
+ expect{ Hydra::Works::AddCollectionToCollection.call( af_base_object, collection1 ) }.to raise_error(ArgumentError,error_message)
161
+ end
162
+ end
163
+
164
+ end
165
+
166
+ end