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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +72 -0
  4. data/Gemfile +5 -4
  5. data/README.md +17 -11
  6. data/Rakefile +18 -8
  7. data/config/solrconfig.xml +223 -0
  8. data/hydra-works.gemspec +15 -15
  9. data/lib/hydra/works.rb +28 -17
  10. data/lib/hydra/works/errors/full_text_extraction_error.rb +5 -0
  11. data/lib/hydra/works/models/concerns/block_child_objects.rb +12 -6
  12. data/lib/hydra/works/models/concerns/collection_behavior.rb +44 -6
  13. data/lib/hydra/works/models/concerns/generic_file/contained_files.rb +3 -3
  14. data/lib/hydra/works/models/concerns/generic_file/derivatives.rb +2 -4
  15. data/lib/hydra/works/models/concerns/generic_file/mime_types.rb +1 -3
  16. data/lib/hydra/works/models/concerns/generic_file/versioned_content.rb +4 -6
  17. data/lib/hydra/works/models/concerns/generic_file/virus_check.rb +13 -14
  18. data/lib/hydra/works/models/concerns/generic_file_behavior.rb +13 -3
  19. data/lib/hydra/works/models/concerns/generic_work_behavior.rb +34 -9
  20. data/lib/hydra/works/models/generic_file.rb +0 -3
  21. data/lib/hydra/works/services/generic_file/add_file_to_generic_file.rb +14 -16
  22. data/lib/hydra/works/services/generic_file/full_text_extraction_service.rb +57 -0
  23. data/lib/hydra/works/services/generic_file/generate_thumbnail.rb +13 -0
  24. data/lib/hydra/works/services/generic_file/persist_derivative.rb +3 -5
  25. data/lib/hydra/works/services/generic_file/{upload_file.rb → upload_file_to_generic_file.rb} +1 -3
  26. data/lib/hydra/works/version.rb +1 -1
  27. data/lib/hydra/works/vocab/works_terms.rb +9 -9
  28. data/lib/tasks/hydra-works_tasks.rake +80 -0
  29. data/lib/tasks/jetty.rake +15 -0
  30. data/spec/hydra/works/models/collection_spec.rb +258 -246
  31. data/spec/hydra/works/models/concerns/block_child_objects_spec.rb +6 -8
  32. data/spec/hydra/works/models/concerns/generic_file/contained_files_spec.rb +40 -48
  33. data/spec/hydra/works/models/concerns/generic_file/mime_types_spec.rb +16 -18
  34. data/spec/hydra/works/models/concerns/generic_file/versioned_content_spec.rb +11 -11
  35. data/spec/hydra/works/models/concerns/generic_file/virus_check_spec.rb +11 -8
  36. data/spec/hydra/works/models/concerns/generic_file_behavior_spec.rb +1 -1
  37. data/spec/hydra/works/models/generic_file_spec.rb +87 -85
  38. data/spec/hydra/works/models/generic_work_spec.rb +167 -169
  39. data/spec/hydra/works/services/full_text_extraction_service_spec.rb +89 -0
  40. data/spec/hydra/works/services/generic_file/add_file_to_generic_file_spec.rb +36 -38
  41. data/spec/hydra/works/services/generic_file/generate/thumbnail_spec.rb +10 -12
  42. data/spec/hydra/works/services/generic_file/upload_file_spec.rb +39 -42
  43. data/spec/hydra/works/services/persist_derivatives_spec.rb +2 -3
  44. data/spec/hydra/works_spec.rb +57 -61
  45. data/spec/spec_helper.rb +2 -4
  46. metadata +23 -15
  47. data/lib/hydra/works/services/generic_file/generate/thumbnail.rb +0 -18
@@ -1,19 +1,17 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Hydra::Works::BlockChildObjects do
4
-
5
4
  subject { Hydra::Works::GenericFile::Base.new }
6
5
 
7
- describe "#child_objects=?" do
8
- it "should raise an error" do
9
- expect { subject.child_objects = [] }.to raise_error(StandardError, /method `child_objects=' not allowed for #<Hydra::Works::GenericFile::Base.*/)
6
+ describe '#objects=?' do
7
+ it 'raises an error' do
8
+ expect { subject.objects = [] }.to raise_error(StandardError, /method `objects=' not allowed for #<Hydra::Works::GenericFile::Base.*/)
10
9
  end
11
10
  end
12
11
 
13
- describe "#child_objects" do
14
- it "should raise an error" do
15
- expect { subject.child_objects }.to raise_error(StandardError, /method `child_objects' not allowed for #<Hydra::Works::GenericFile::Base.*/)
12
+ describe '#objects' do
13
+ it 'raises an error' do
14
+ expect { subject.objects }.to raise_error(StandardError, /method `objects' not allowed for #<Hydra::Works::GenericFile::Base.*/)
16
15
  end
17
16
  end
18
-
19
17
  end
@@ -1,116 +1,108 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Hydra::Works::GenericFile::ContainedFiles do
4
-
5
4
  let(:generic_file) do
6
5
  Hydra::Works::GenericFile::Base.create
7
6
  end
8
7
 
9
- let(:thumbnail) do
8
+ let(:thumbnail) do
10
9
  file = generic_file.files.build
11
10
  Hydra::PCDM::AddTypeToFile.call(file, pcdm_thumbnail_uri)
12
11
  end
13
12
 
14
13
  let(:file) { generic_file.files.build }
15
- let(:pcdm_thumbnail_uri) { ::RDF::URI("http://pcdm.org/use#ThumbnailImage") }
14
+ let(:pcdm_thumbnail_uri) { ::RDF::URI('http://pcdm.org/use#ThumbnailImage') }
16
15
 
17
16
  before do
18
17
  generic_file.files = [file]
19
18
  end
20
19
 
21
- describe "#thumbnail" do
22
-
23
- context "when a thumbnail is present" do
20
+ describe '#thumbnail' do
21
+ context 'when a thumbnail is present' do
24
22
  before do
25
23
  original_file = generic_file.build_thumbnail
26
- original_file.content = "thumbnail"
24
+ original_file.content = 'thumbnail'
27
25
  end
28
26
  subject { generic_file.thumbnail }
29
- it "can be saved without errors" do
27
+ it 'can be saved without errors' do
30
28
  expect(subject.save).to be_truthy
31
29
  end
32
- it "retrieves content of the thumbnail" do
33
- expect(subject.content).to eql "thumbnail"
30
+ it 'retrieves content of the thumbnail' do
31
+ expect(subject.content).to eql 'thumbnail'
34
32
  end
35
- it "retains origin pcdm.File RDF type" do
36
- expect(subject.metadata_node.type).to include( ::RDF::URI("http://pcdm.org/use#ThumbnailImage") )
37
- expect(subject.metadata_node.type).to include(RDFVocabularies::PCDMTerms.File)
33
+ it 'retains origin pcdm.File RDF type' do
34
+ expect(subject.metadata_node.type).to include(::RDF::URI('http://pcdm.org/use#ThumbnailImage'))
35
+ expect(subject.metadata_node.type).to include(Hydra::PCDM::Vocab::PCDMTerms.File)
38
36
  end
39
37
  end
40
38
 
41
- context "when building new thumbnail" do
39
+ context 'when building new thumbnail' do
42
40
  subject { generic_file.build_thumbnail }
43
- it "initializes an unsaved File object with Thumbnail type" do
41
+ it 'initializes an unsaved File object with Thumbnail type' do
44
42
  expect(subject).to be_new_record
45
43
  expect(subject.metadata_node.type).to include(pcdm_thumbnail_uri)
46
- expect(subject.metadata_node.type).to include(RDFVocabularies::PCDMTerms.File)
44
+ expect(subject.metadata_node.type).to include(Hydra::PCDM::Vocab::PCDMTerms.File)
47
45
  end
48
46
  end
49
-
50
47
  end
51
48
 
52
- describe "#original_file" do
53
-
54
- context "when an original file is present" do
49
+ describe '#original_file' do
50
+ context 'when an original file is present' do
55
51
  before do
56
52
  original_file = generic_file.build_original_file
57
- original_file.content = "original_file"
53
+ original_file.content = 'original_file'
58
54
  end
59
55
  subject { generic_file.original_file }
60
56
 
61
- it "can be saved without errors" do
57
+ it 'can be saved without errors' do
62
58
  expect(subject.save).to be_truthy
63
59
  end
64
- it "retrieves content of the original_file as a PCDM File" do
65
- expect(subject.content).to eql "original_file"
60
+ it 'retrieves content of the original_file as a PCDM File' do
61
+ expect(subject.content).to eql 'original_file'
66
62
  expect(subject).to be_instance_of Hydra::PCDM::File
67
63
  end
68
- it "retains origin pcdm.File RDF type" do
69
- expect(subject.metadata_node.type).to include(::RDF::URI("http://pcdm.org/use#OriginalFile") )
70
- expect(generic_file.original_file.metadata_node.type).to include(RDFVocabularies::PCDMTerms.File)
64
+ it 'retains origin pcdm.File RDF type' do
65
+ expect(subject.metadata_node.type).to include(::RDF::URI('http://pcdm.org/use#OriginalFile'))
66
+ expect(generic_file.original_file.metadata_node.type).to include(Hydra::PCDM::Vocab::PCDMTerms.File)
71
67
  end
72
68
  end
73
69
 
74
- context "when building original file" do
70
+ context 'when building original file' do
75
71
  subject { generic_file.build_original_file }
76
- it "initializes an unsaved File object with OrignalFile type" do
72
+ it 'initializes an unsaved File object with OrignalFile type' do
77
73
  expect(subject).to be_new_record
78
- expect(subject.metadata_node.type).to include(::RDF::URI("http://pcdm.org/use#OriginalFile") )
79
- expect(subject.metadata_node.type).to include(RDFVocabularies::PCDMTerms.File)
74
+ expect(subject.metadata_node.type).to include(::RDF::URI('http://pcdm.org/use#OriginalFile'))
75
+ expect(subject.metadata_node.type).to include(Hydra::PCDM::Vocab::PCDMTerms.File)
80
76
  end
81
77
  end
82
-
83
78
  end
84
79
 
85
- describe "#extracted_text" do
86
-
87
- context "when extracted text is present" do
80
+ describe '#extracted_text' do
81
+ context 'when extracted text is present' do
88
82
  before do
89
83
  extracted_text = generic_file.build_extracted_text
90
- extracted_text.content = "extracted_text"
84
+ extracted_text.content = 'extracted_text'
91
85
  end
92
86
  subject { generic_file.extracted_text }
93
- it "can be saved without errors" do
87
+ it 'can be saved without errors' do
94
88
  expect(subject.save).to be_truthy
95
89
  end
96
- it "retrieves content of the extracted_text" do
97
- expect(subject.content).to eql "extracted_text"
90
+ it 'retrieves content of the extracted_text' do
91
+ expect(subject.content).to eql 'extracted_text'
98
92
  end
99
- it "retains origin pcdm.File RDF type" do
100
- expect(subject.metadata_node.type).to include(::RDF::URI("http://pcdm.org/use#ExtractedText") )
101
- expect(subject.metadata_node.type).to include(RDFVocabularies::PCDMTerms.File)
93
+ it 'retains origin pcdm.File RDF type' do
94
+ expect(subject.metadata_node.type).to include(::RDF::URI('http://pcdm.org/use#ExtractedText'))
95
+ expect(subject.metadata_node.type).to include(Hydra::PCDM::Vocab::PCDMTerms.File)
102
96
  end
103
97
  end
104
98
 
105
- context "when building new extracted text object" do
99
+ context 'when building new extracted text object' do
106
100
  subject { generic_file.build_extracted_text }
107
- it "initializes an unsaved File object with ExtractedText type" do
101
+ it 'initializes an unsaved File object with ExtractedText type' do
108
102
  expect(subject).to be_new_record
109
- expect(subject.metadata_node.type).to include(::RDF::URI("http://pcdm.org/use#ExtractedText") )
110
- expect(subject.metadata_node.type).to include(RDFVocabularies::PCDMTerms.File)
103
+ expect(subject.metadata_node.type).to include(::RDF::URI('http://pcdm.org/use#ExtractedText'))
104
+ expect(subject.metadata_node.type).to include(Hydra::PCDM::Vocab::PCDMTerms.File)
111
105
  end
112
106
  end
113
-
114
107
  end
115
-
116
108
  end
@@ -1,76 +1,74 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Hydra::Works::GenericFile::MimeTypes do
4
-
5
4
  subject { Hydra::Works::GenericFile::Base.new }
6
5
 
7
- describe "#pdf?" do
6
+ describe '#pdf?' do
8
7
  before do
9
8
  allow(subject).to receive(:mime_type).and_return('application/pdf')
10
9
  end
11
- it "should be true" do
10
+ it 'is true' do
12
11
  expect(subject.pdf?).to be true
13
12
  end
14
13
  end
15
14
 
16
- describe "#image?" do
15
+ describe '#image?' do
17
16
  before do
18
17
  allow(subject).to receive(:mime_type).and_return('image/jpeg')
19
18
  end
20
- it "should be true" do
19
+ it 'is true' do
21
20
  expect(subject.image?).to be true
22
21
  end
23
22
  end
24
23
 
25
- describe "#video?" do
24
+ describe '#video?' do
26
25
  before do
27
26
  allow(subject).to receive(:mime_type).and_return('video/mp4')
28
27
  end
29
- it "should be true" do
28
+ it 'is true' do
30
29
  expect(subject.video?).to be true
31
30
  end
32
31
  end
33
32
 
34
- describe "#audio?" do
33
+ describe '#audio?' do
35
34
  before do
36
35
  allow(subject).to receive(:mime_type).and_return('audio/mp3')
37
36
  end
38
- it "should be true" do
37
+ it 'is true' do
39
38
  expect(subject.audio?).to be true
40
39
  end
41
40
  end
42
41
 
43
- describe "#office_document?" do
42
+ describe '#office_document?' do
44
43
  before do
45
44
  allow(subject).to receive(:mime_type).and_return('application/msword')
46
45
  end
47
- it "should be true" do
46
+ it 'is true' do
48
47
  expect(subject.office_document?).to be true
49
48
  end
50
49
  end
51
50
 
52
- describe "#collection?" do
53
- it "should be false" do
51
+ describe '#collection?' do
52
+ it 'is false' do
54
53
  expect(subject.collection?).to be false
55
54
  end
56
55
  end
57
56
 
58
- describe "#file_format?" do
59
- it "should handle both mime and format_label" do
57
+ describe '#file_format?' do
58
+ it 'handles both mime and format_label' do
60
59
  allow(subject).to receive(:mime_type).and_return('image/png')
61
60
  allow(subject).to receive(:format_label).and_return(['Portable Network Graphics'])
62
61
  expect(subject.file_format).to eq 'png (Portable Network Graphics)'
63
62
  end
64
- it "should handle just mime type" do
63
+ it 'handles just mime type' do
65
64
  allow(subject).to receive(:mime_type).and_return('image/png')
66
65
  allow(subject).to receive(:format_label).and_return([])
67
66
  expect(subject.file_format).to eq 'png'
68
67
  end
69
- it "should handle just format_label" do
68
+ it 'handles just format_label' do
70
69
  allow(subject).to receive(:mime_type).and_return('')
71
70
  allow(subject).to receive(:format_label).and_return(['Portable Network Graphics'])
72
71
  expect(subject.file_format).to eq ['Portable Network Graphics']
73
72
  end
74
73
  end
75
-
76
74
  end
@@ -1,31 +1,31 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Hydra::Works::GenericFile::VersionedContent do
4
- let(:generic_file) { Hydra::Works::GenericFile::Base.new }
4
+ let(:generic_file) { Hydra::Works::GenericFile::Base.new }
5
5
  before do
6
- Hydra::Works::UploadFileToGenericFile.call(generic_file, File.open(File.join(fixture_path, "sample-file.pdf")))
7
- Hydra::Works::UploadFileToGenericFile.call(generic_file, File.open(File.join(fixture_path, "updated-file.txt")))
6
+ Hydra::Works::UploadFileToGenericFile.call(generic_file, File.open(File.join(fixture_path, 'sample-file.pdf')))
7
+ Hydra::Works::UploadFileToGenericFile.call(generic_file, File.open(File.join(fixture_path, 'updated-file.txt')))
8
8
  end
9
9
 
10
- describe "content_versions" do
11
- subject {generic_file.content_versions}
12
- it "lists all of the versions of original_file" do
10
+ describe 'content_versions' do
11
+ subject { generic_file.content_versions }
12
+ it 'lists all of the versions of original_file' do
13
13
  expect(subject.count).to eq(2)
14
- expect(subject.map { |v| v.uri }).to eq(generic_file.original_file.versions.all.map { |v| v.uri })
14
+ expect(subject.map(&:uri)).to eq(generic_file.original_file.versions.all.map(&:uri))
15
15
  end
16
16
  end
17
17
 
18
- describe "latest_content_version" do
18
+ describe 'latest_content_version' do
19
19
  subject { generic_file.latest_content_version }
20
- it "returns the most recent version entry for original_file" do
20
+ it 'returns the most recent version entry for original_file' do
21
21
  # Can't use a simple equivalence because they are actually different ResourceVersion objects
22
22
  expect(subject.uri).to eq(generic_file.original_file.versions.last.uri)
23
23
  expect(subject.label).to eq(generic_file.original_file.versions.last.label)
24
24
  end
25
25
  end
26
26
 
27
- describe "current_content_version_uri" do
28
- it "returns the URI of the most recent version of original_file" do
27
+ describe 'current_content_version_uri' do
28
+ it 'returns the URI of the most recent version of original_file' do
29
29
  expect(generic_file.current_content_version_uri).to eq(generic_file.original_file.versions.last.uri)
30
30
  end
31
31
  end
@@ -7,8 +7,13 @@ describe Hydra::Works::GenericFile::VirusCheck do
7
7
  include Hydra::Works::GenericFile::VirusCheck
8
8
  end
9
9
  class ClamAV
10
- def self.instance; @instance ||= ClamAV.new; end
11
- def scanfile(path); puts "scanfile: #{path}"; end
10
+ def self.instance
11
+ @instance ||= ClamAV.new
12
+ end
13
+
14
+ def scanfile(path)
15
+ puts "scanfile: #{path}"
16
+ end
12
17
  end
13
18
  end
14
19
  after do
@@ -25,26 +30,24 @@ describe Hydra::Works::GenericFile::VirusCheck do
25
30
  end
26
31
 
27
32
  context 'with an infected file' do
28
-
29
33
  before do
30
34
  expect(ClamAV.instance).to receive(:scanfile).and_return(1)
31
35
  end
32
- it "should fail to save" do
36
+ it 'fails to save' do
33
37
  expect(subject.save).to eq false
34
38
  end
35
- it "should fail to validate" do
39
+ it 'fails to validate' do
36
40
  expect(subject.validate).to eq false
37
41
  end
38
42
  end
39
43
 
40
- context "with a clean file" do
44
+ context 'with a clean file' do
41
45
  before do
42
46
  expect(ClamAV.instance).to receive(:scanfile).and_return(0)
43
47
  end
44
48
 
45
- it "should not detect viruses" do
49
+ it 'does not detect viruses' do
46
50
  expect(subject.detect_viruses).to eq true
47
51
  end
48
52
  end
49
-
50
53
  end
@@ -6,7 +6,7 @@ describe Hydra::Works::GenericFileBehavior do
6
6
  end
7
7
  subject { IncludesGenericFileBehavior.new }
8
8
 
9
- it "ensures that objects will be recognized as generic_files" do
9
+ it 'ensures that objects will be recognized as generic_files' do
10
10
  expect(subject).to be_works_generic_file
11
11
  end
12
12
  end
@@ -1,8 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Hydra::Works::GenericFile::Base do
4
-
5
- let(:generic_file1) { Hydra::Works::GenericFile::Base.new }
4
+ let(:generic_file1) { described_class.new }
6
5
 
7
6
  describe 'Related objects' do
8
7
  let(:object1) { Hydra::PCDM::Object.new }
@@ -23,7 +22,7 @@ describe Hydra::Works::GenericFile::Base do
23
22
 
24
23
  before do
25
24
  file1.content = "I'm a file"
26
- file2.content = "I am too"
25
+ file2.content = 'I am too'
27
26
  object.save!
28
27
  end
29
28
 
@@ -33,50 +32,48 @@ describe Hydra::Works::GenericFile::Base do
33
32
  end
34
33
 
35
34
  describe 'add related object' do
36
-
37
- let(:subject) { Hydra::Works::GenericFile::Base.new }
35
+ let(:subject) { described_class.new }
38
36
 
39
37
  describe 'begin test' do
40
-
41
38
  context 'with acceptable related objects' do
42
39
  let(:object1) { Hydra::PCDM::Object.create }
43
40
  let(:object2) { Hydra::PCDM::Object.new }
44
41
  let(:generic_work1) { Hydra::Works::GenericWork::Base.create }
45
42
  let(:generic_work2) { Hydra::Works::GenericWork::Base.new }
46
- let(:generic_file1) { Hydra::Works::GenericFile::Base.create }
43
+ let(:generic_file1) { described_class.create }
47
44
 
48
- it 'should add various types of related objects to generic_file' do
45
+ it 'adds various types of related objects to generic_file' do
49
46
  subject.related_objects << generic_work1
50
47
  subject.related_objects << generic_file1
51
48
  subject.related_objects << object1
52
49
  subject.save
53
50
  subject.reload
54
51
  related_objects = subject.related_objects
55
- expect( related_objects.include? generic_work1 ).to be true
56
- expect( related_objects.include? generic_file1 ).to be true
57
- expect( related_objects.include? object1 ).to be true
58
- expect( related_objects.size ).to eq 3
52
+ expect(related_objects.include? generic_work1).to be true
53
+ expect(related_objects.include? generic_file1).to be true
54
+ expect(related_objects.include? object1).to be true
55
+ expect(related_objects.size).to eq 3
59
56
  end
60
57
 
61
58
  context 'with files and generic_files' do
62
59
  let(:file1) { subject.files.build }
63
60
  let(:file2) { subject.files.build }
64
-
61
+
65
62
  before do
66
63
  subject.save
67
64
  file1.content = "I'm a file"
68
- file2.content = "I am too"
65
+ file2.content = 'I am too'
69
66
  subject.related_objects << object1
70
67
  end
71
68
 
72
- it 'should add a related object to a generic_file with files and generic_files' do
73
- subject.related_objects << object2
69
+ it 'adds a related object to a generic_file with files and generic_files' do
70
+ subject.related_objects << object2
74
71
  subject.save
75
72
  subject.reload
76
73
  related_objects = subject.related_objects
77
- expect( related_objects.include? object1 ).to be true
78
- expect( related_objects.include? object2 ).to be true
79
- expect( related_objects.size ).to eq 2
74
+ expect(related_objects.include? object1).to be true
75
+ expect(related_objects.include? object2).to be true
76
+ expect(related_objects.size).to eq 2
80
77
  end
81
78
  end
82
79
  end
@@ -87,146 +84,151 @@ describe Hydra::Works::GenericFile::Base do
87
84
  let(:pcdm_file1) { Hydra::PCDM::File.new }
88
85
  let(:non_PCDM_object) { "I'm not a PCDM object" }
89
86
  let(:af_base_object) { ActiveFedora::Base.new }
90
-
87
+
91
88
  let(:error_message) { 'child_related_object must be a pcdm object' }
92
-
93
- it 'should NOT aggregate Hydra::Works::Collection in related objects aggregation' do
94
- expect{ subject.related_objects << collection1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /Hydra::Works::Collection:.*> is not a PCDM object./)
89
+
90
+ it 'does not aggregate Hydra::Works::Collection in related objects aggregation' do
91
+ expect { subject.related_objects << collection1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /Hydra::Works::Collection:.*> is not a PCDM object./)
95
92
  end
96
93
 
97
- it 'should NOT aggregate Hydra::PCDM::Collections in related objects aggregation' do
98
- expect{ subject.related_objects << pcdm_collection1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /Hydra::PCDM::Collection:.*> is not a PCDM object./)
94
+ it 'does not aggregate Hydra::PCDM::Collections in related objects aggregation' do
95
+ expect { subject.related_objects << pcdm_collection1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /Hydra::PCDM::Collection:.*> is not a PCDM object./)
99
96
  end
100
97
 
101
- it 'should NOT aggregate Hydra::PCDM::Files in related objects aggregation' do
102
- expect{ subject.related_objects << pcdm_file1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base.* expected, got Hydra::PCDM::File.*/)
98
+ it 'does not aggregate Hydra::PCDM::Files in related objects aggregation' do
99
+ expect { subject.related_objects << pcdm_file1 }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base.* expected, got Hydra::PCDM::File.*/)
103
100
  end
104
101
 
105
- it 'should NOT aggregate non-PCDM objects in related objects aggregation' do
106
- expect{ subject.related_objects << non_PCDM_object }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base.* expected, got String.*/)
107
- end
108
-
109
- it 'should NOT aggregate AF::Base objects in related objects aggregation' do
110
- expect{ subject.related_objects << af_base_object }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base.* is not a PCDM object./)
111
-
102
+ it 'does not aggregate non-PCDM objects in related objects aggregation' do
103
+ expect { subject.related_objects << non_PCDM_object }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base.* expected, got String.*/)
104
+ end
105
+
106
+ it 'does not aggregate AF::Base objects in related objects aggregation' do
107
+ expect { subject.related_objects << af_base_object }.to raise_error(ActiveFedora::AssociationTypeMismatch, /ActiveFedora::Base.* is not a PCDM object./)
112
108
  end
113
109
  end
114
-
110
+
115
111
  context 'with invalid behaviors' do
116
112
  let(:object1) { Hydra::PCDM::Object.new }
117
113
  let(:object2) { Hydra::PCDM::Object.new }
118
114
 
119
- it 'should NOT allow related objects to repeat' do
115
+ it 'does not allow related objects to repeat' do
120
116
  skip 'skipping this test because issue pcdm#92 needs to be addressed' do
121
- subject.related_objects << object1
117
+ subject.related_objects << object1
122
118
  subject.related_objects << object2
123
119
  subject.related_objects << object1
124
120
  subject.save
125
121
  subject.reload
126
122
  related_objects = subject.related_objects
127
- expect( related_objects.include? object1 ).to be true
128
- expect( related_objects.include? object2 ).to be true
129
- expect( related_objects.size ).to eq 2
123
+ expect(related_objects.include? object1).to be true
124
+ expect(related_objects.include? object2).to be true
125
+ expect(related_objects.size).to eq 2
130
126
  end
131
127
  end
132
128
  end
133
129
  end
134
130
  end
135
-
136
- describe 'get related objects from generic file' do
137
131
 
138
- subject { Hydra::Works::GenericFile::Base.new }
132
+ describe 'get related objects from generic file' do
133
+ subject { described_class.new }
139
134
 
140
135
  let(:object1) { Hydra::PCDM::Object.new }
141
136
  let(:object2) { Hydra::PCDM::Object.new }
142
137
 
143
138
  let(:generic_work1) { Hydra::Works::GenericWork::Base.new }
144
- let(:generic_file1) { Hydra::Works::GenericFile::Base.new }
139
+ let(:generic_file1) { described_class.new }
145
140
 
146
141
  context 'with generic files' do
147
- it 'should return empty array when only generic files are aggregated' do
148
- expect( related_objects = subject.related_objects ).to eq []
142
+ it 'returns empty array when only generic files are aggregated' do
143
+ expect(subject.related_objects).to eq []
149
144
  end
150
145
 
151
- it 'should return related objects' do
152
- subject.related_objects << object2
153
- expect( related_objects = subject.related_objects ).to eq [object2]
146
+ it 'returns related objects' do
147
+ subject.related_objects << object2
148
+ expect(subject.related_objects).to eq [object2]
154
149
  end
155
150
 
156
- it 'should return related objects of various types' do
157
- subject.related_objects << generic_work1
158
- subject.related_objects << generic_file1
151
+ it 'returns related objects of various types' do
152
+ subject.related_objects << generic_work1
153
+ subject.related_objects << generic_file1
159
154
  subject.related_objects << object1
160
155
  subject.save
161
156
  subject.reload
162
157
  related_objects = subject.related_objects
163
- expect( related_objects.include? object1 ).to be true
164
- expect( related_objects.include? generic_work1 ).to be true
165
- expect( related_objects.include? generic_file1 ).to be true
166
- expect( related_objects.size ).to eq 3
158
+ expect(related_objects.include? object1).to be true
159
+ expect(related_objects.include? generic_work1).to be true
160
+ expect(related_objects.include? generic_file1).to be true
161
+ expect(related_objects.size).to eq 3
167
162
  end
168
163
  end
169
164
  end
170
165
 
171
166
  describe 'remove related object from related object' do
172
-
173
- subject { Hydra::Works::GenericFile::Base.new }
167
+ subject { described_class.new }
174
168
 
175
169
  let(:related_object1) { Hydra::PCDM::Object.new }
176
170
  let(:related_work2) { Hydra::Works::GenericWork::Base.new }
177
- let(:related_file3) { Hydra::Works::GenericFile::Base.new }
171
+ let(:related_file3) { described_class.new }
178
172
  let(:related_object4) { Hydra::PCDM::Object.new }
179
173
  let(:related_work5) { Hydra::Works::GenericWork::Base.new }
180
174
 
181
- let(:generic_file1) { Hydra::Works::GenericFile::Base.new }
182
- let(:generic_file2) { Hydra::Works::GenericFile::Base.new }
175
+ let(:generic_file1) { described_class.new }
176
+ let(:generic_file2) { described_class.new }
183
177
 
184
178
  context 'when multiple related objects' do
185
179
  before do
186
- subject.related_objects << related_object1
180
+ subject.related_objects << related_object1
187
181
  subject.related_objects << related_work2
188
182
  subject.related_objects << related_file3
189
- subject.related_objects << related_object4
190
- subject.related_objects << related_work5
191
- expect( related_ojects = subject.related_objects ).to eq [related_object1,related_work2,related_file3,related_object4,related_work5]
192
-
183
+ subject.related_objects << related_object4
184
+ subject.related_objects << related_work5
185
+ expect(subject.related_objects).to eq [related_object1, related_work2, related_file3, related_object4, related_work5]
193
186
  end
194
187
 
195
- it 'should remove first related object' do
196
- expect( subject.related_objects.delete related_object1 ).to eq [related_object1]
197
- expect( related_objects = subject.related_objects).to eq [related_work2,related_file3,related_object4,related_work5]
188
+ it 'removes first related object' do
189
+ expect(subject.related_objects.delete related_object1).to eq [related_object1]
190
+ expect(subject.related_objects).to eq [related_work2, related_file3, related_object4, related_work5]
198
191
  end
199
192
 
200
- it 'should remove last related object' do
201
- expect( subject.related_objects.delete related_work5 ).to eq [related_work5]
202
- expect( related_objects = subject.related_objects ).to eq [related_object1,related_work2,related_file3,related_object4]
193
+ it 'removes last related object' do
194
+ expect(subject.related_objects.delete related_work5).to eq [related_work5]
195
+ expect(subject.related_objects).to eq [related_object1, related_work2, related_file3, related_object4]
203
196
  end
204
197
 
205
- it 'should remove middle related object' do
206
- expect( subject.related_objects.delete related_file3 ).to eq [related_file3]
207
- expect( related_objects = subject.related_objects ).to eq [related_object1,related_work2,related_object4,related_work5]
198
+ it 'removes middle related object' do
199
+ expect(subject.related_objects.delete related_file3).to eq [related_file3]
200
+ expect(subject.related_objects).to eq [related_object1, related_work2, related_object4, related_work5]
208
201
  end
209
202
  end
210
203
 
211
- #Assuming this context not needed because unacceptable related objects
212
- #can't be added.
213
- #context 'with unacceptable related object' do
214
-
204
+ # Assuming this context not needed because unacceptable related objects
205
+ # can't be added.
206
+ # context 'with unacceptable related object' do
215
207
  end
216
208
 
217
- describe "should have parent work accessors" do
209
+ describe 'should have parent work accessors' do
218
210
  let(:generic_work1) { Hydra::Works::GenericWork::Base.create }
219
211
  before do
220
212
  generic_work1.generic_files << generic_file1
221
213
  end
222
214
 
223
- it 'should have parents' do
224
- expect(generic_file1.parents).to eq [generic_work1]
215
+ it 'has parents' do
216
+ expect(generic_file1.member_of).to eq [generic_work1]
225
217
  end
226
- it 'should have a parent work' do
227
- expect(generic_file1.generic_works).to eq [generic_work1]
218
+ it 'has a parent work' do
219
+ expect(generic_file1.in_generic_works).to eq [generic_work1]
228
220
  end
229
221
  end
230
222
 
231
-
223
+ describe 'make sure deprecated methods still work' do
224
+ let(:generic_work1) { Hydra::Works::GenericWork::Base.create }
225
+ before do
226
+ generic_work1.generic_files << generic_file1
227
+ generic_work1.save # required until issue AF-Agg-75 is fixed
228
+ end
229
+ it 'deprecated methods should pass' do
230
+ expect(generic_file1.generic_works).to eq [generic_work1]
231
+ expect(generic_file1.parents).to eq [generic_work1]
232
+ end
233
+ end
232
234
  end