ddr-models 2.6.2 → 2.7.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (146) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +1 -1
  4. data/Gemfile +2 -3
  5. data/app/models/collection.rb +11 -3
  6. data/app/models/component.rb +54 -4
  7. data/app/models/item.rb +1 -2
  8. data/config/initializers/active_fedora_base.rb +8 -5
  9. data/config/initializers/rubydora_monkey_patch.rb +11 -0
  10. data/config/initializers/subscriptions.rb +16 -9
  11. data/config/locales/ddr-models.en.yml +3 -0
  12. data/ddr-models.gemspec +3 -2
  13. data/lib/ddr/actions/virus_check.rb +10 -16
  14. data/lib/ddr/auth.rb +0 -8
  15. data/lib/ddr/datastreams.rb +13 -2
  16. data/lib/ddr/datastreams/administrative_metadata_datastream.rb +9 -0
  17. data/lib/ddr/datastreams/content_datastream.rb +5 -0
  18. data/lib/ddr/datastreams/datastream_behavior.rb +60 -15
  19. data/lib/ddr/datastreams/delete_external_files.rb +29 -0
  20. data/lib/ddr/datastreams/descriptive_metadata_datastream.rb +33 -33
  21. data/lib/ddr/datastreams/external_file_datastream.rb +69 -0
  22. data/lib/ddr/datastreams/fits_datastream.rb +15 -5
  23. data/lib/ddr/datastreams/intermediate_file_datastream.rb +5 -0
  24. data/lib/ddr/datastreams/metadata_datastream.rb +15 -17
  25. data/lib/ddr/datastreams/multires_image_datastream.rb +5 -0
  26. data/lib/ddr/derivatives.rb +1 -0
  27. data/lib/ddr/derivatives/ptif_generator.rb +5 -1
  28. data/lib/ddr/derivatives/update_derivatives.rb +23 -0
  29. data/lib/ddr/events/deletion_event.rb +5 -9
  30. data/lib/ddr/events/event.rb +7 -9
  31. data/lib/ddr/events/ingestion_event.rb +5 -9
  32. data/lib/ddr/events/update_event.rb +12 -5
  33. data/lib/ddr/index.rb +0 -1
  34. data/lib/ddr/index/csv_query_result.rb +10 -2
  35. data/lib/ddr/index/fields.rb +10 -9
  36. data/lib/ddr/index/filter.rb +1 -0
  37. data/lib/ddr/managers/derivatives_manager.rb +84 -98
  38. data/lib/ddr/managers/technical_metadata_manager.rb +20 -5
  39. data/lib/ddr/models.rb +24 -24
  40. data/lib/ddr/models/base.rb +98 -74
  41. data/lib/ddr/models/cache.rb +20 -0
  42. data/lib/ddr/models/engine.rb +4 -6
  43. data/lib/ddr/models/file_management.rb +57 -152
  44. data/lib/ddr/models/fixity_checkable.rb +0 -5
  45. data/lib/ddr/models/has_admin_metadata.rb +4 -2
  46. data/lib/ddr/models/has_children.rb +35 -1
  47. data/lib/ddr/models/has_content.rb +3 -33
  48. data/lib/ddr/models/has_intermediate_file.rb +18 -0
  49. data/lib/ddr/models/has_multires_image.rb +12 -15
  50. data/lib/ddr/models/has_struct_metadata.rb +2 -38
  51. data/lib/ddr/models/indexing.rb +160 -163
  52. data/lib/ddr/models/permanent_id.rb +26 -49
  53. data/lib/ddr/models/solr_document.rb +21 -19
  54. data/lib/ddr/models/structure.rb +168 -41
  55. data/lib/ddr/models/structures/agent.rb +49 -0
  56. data/lib/ddr/models/structures/div.rb +64 -0
  57. data/lib/ddr/models/structures/f_locat.rb +54 -0
  58. data/lib/ddr/models/structures/file.rb +52 -0
  59. data/lib/ddr/models/structures/file_grp.rb +35 -0
  60. data/lib/ddr/models/structures/file_sec.rb +22 -0
  61. data/lib/ddr/models/structures/fptr.rb +31 -0
  62. data/lib/ddr/models/structures/mets_hdr.rb +37 -0
  63. data/lib/ddr/models/structures/mptr.rb +49 -0
  64. data/lib/ddr/models/structures/struct_map.rb +40 -0
  65. data/lib/ddr/models/version.rb +1 -1
  66. data/lib/ddr/notifications.rb +10 -12
  67. data/lib/ddr/utils.rb +29 -16
  68. data/lib/ddr/vocab.rb +15 -17
  69. data/lib/ddr/vocab/asset.rb +29 -19
  70. data/lib/ddr/vocab/contact.rb +5 -7
  71. data/lib/ddr/vocab/display.rb +6 -8
  72. data/lib/ddr/vocab/duke_terms.rb +8 -10
  73. data/lib/ddr/vocab/rdf_vocabulary_parser.rb +37 -39
  74. data/lib/ddr/vocab/roles.rb +17 -19
  75. data/lib/ddr/vocab/vocabulary.rb +26 -26
  76. data/spec/datastreams/external_file_datastream_spec.rb +37 -0
  77. data/spec/derivatives/png_generator_spec.rb +21 -25
  78. data/spec/derivatives/ptif_generator_spec.rb +22 -26
  79. data/spec/dummy/config/environments/test.rb +1 -1
  80. data/spec/dummy/db/schema.rb +23 -23
  81. data/spec/factories/structure_factories.rb +8 -2
  82. data/spec/fixtures/imageA.jpg +0 -0
  83. data/spec/fixtures/imageB.jpg +0 -0
  84. data/spec/index/csv_query_result_spec.rb +3 -3
  85. data/spec/index/fields_spec.rb +7 -6
  86. data/spec/managers/derivatives_manager_spec.rb +105 -112
  87. data/spec/managers/technical_metadata_manager_spec.rb +22 -18
  88. data/spec/models/active_fedora_base_spec.rb +0 -106
  89. data/spec/models/active_fedora_datastream_spec.rb +33 -2
  90. data/spec/models/attachment_spec.rb +0 -2
  91. data/spec/models/cache_spec.rb +32 -0
  92. data/spec/models/collection_spec.rb +43 -19
  93. data/spec/models/component_spec.rb +41 -51
  94. data/spec/models/descriptive_metadata_datastream_spec.rb +99 -87
  95. data/spec/models/events_spec.rb +50 -69
  96. data/spec/models/file_management_spec.rb +79 -187
  97. data/spec/models/has_children_spec.rb +54 -3
  98. data/spec/models/has_struct_metadata_spec.rb +32 -38
  99. data/spec/models/indexing_spec.rb +11 -6
  100. data/spec/models/item_spec.rb +21 -7
  101. data/spec/models/permanent_id_spec.rb +1 -5
  102. data/spec/models/solr_document_spec.rb +13 -41
  103. data/spec/models/structure_spec.rb +85 -16
  104. data/spec/models/structures/agent_spec.rb +30 -0
  105. data/spec/models/structures/div_spec.rb +26 -0
  106. data/spec/models/structures/f_locat_spec.rb +78 -0
  107. data/spec/models/structures/file_grp_spec.rb +23 -0
  108. data/spec/models/structures/file_sec_spec.rb +22 -0
  109. data/spec/models/structures/file_spec.rb +60 -0
  110. data/spec/models/structures/fptr_spec.rb +23 -0
  111. data/spec/models/structures/mets_hdr_spec.rb +26 -0
  112. data/spec/models/structures/mptr_spec.rb +25 -0
  113. data/spec/models/structures/struct_map_spec.rb +24 -0
  114. data/spec/models/target_spec.rb +0 -2
  115. data/spec/spec_helper.rb +4 -9
  116. data/spec/support/shared_examples_for_ddr_models.rb +96 -156
  117. data/spec/support/shared_examples_for_has_content.rb +56 -30
  118. data/spec/support/shared_examples_for_has_intermediate_spec.rb +28 -0
  119. data/spec/support/shared_examples_for_non_collection_models.rb +5 -0
  120. data/spec/support/structural_metadata_helper.rb +230 -59
  121. data/spec/utils_spec.rb +0 -2
  122. metadata +86 -44
  123. data/app/helpers/models_helper.rb +0 -10
  124. data/lib/ddr/auth/legacy/abstract_legacy_permissions.rb +0 -17
  125. data/lib/ddr/auth/legacy/legacy_authorization.rb +0 -44
  126. data/lib/ddr/auth/legacy/legacy_default_permissions.rb +0 -33
  127. data/lib/ddr/auth/legacy/legacy_permissions.rb +0 -33
  128. data/lib/ddr/auth/legacy/legacy_roles.rb +0 -25
  129. data/lib/ddr/index/legacy_license_fields.rb +0 -12
  130. data/lib/ddr/jobs.rb +0 -12
  131. data/lib/ddr/jobs/fits_file_characterization.rb +0 -13
  132. data/lib/ddr/jobs/fixity_check.rb +0 -13
  133. data/lib/ddr/jobs/job.rb +0 -36
  134. data/lib/ddr/jobs/queue.rb +0 -27
  135. data/lib/ddr/jobs/update_index.rb +0 -13
  136. data/lib/ddr/models/access_controllable.rb +0 -24
  137. data/lib/ddr/models/struct_div.rb +0 -63
  138. data/spec/auth/legacy_default_permissions_spec.rb +0 -37
  139. data/spec/auth/legacy_permissions_spec.rb +0 -37
  140. data/spec/helpers/models_helper_spec.rb +0 -11
  141. data/spec/jobs/fits_file_characterization_spec.rb +0 -16
  142. data/spec/jobs/fixity_check_spec.rb +0 -22
  143. data/spec/jobs/job_spec.rb +0 -40
  144. data/spec/jobs/update_index_spec.rb +0 -22
  145. data/spec/models/struct_div_spec.rb +0 -70
  146. data/spec/support/shared_examples_for_access_controllables.rb +0 -6
@@ -1,33 +1,29 @@
1
- require 'spec_helper'
1
+ module Ddr::Derivatives
2
+ RSpec.describe PtifGenerator do
2
3
 
3
- module Ddr
4
- module Derivatives
5
- RSpec.describe PtifGenerator do
6
-
7
- describe "generate" do
8
- let(:tempdir) { Dir.mktmpdir }
9
- let(:output_file) { File.new(File.join(tempdir, "output.ptif"), 'wb') }
10
- let(:options) { "jpeg:90,tile:256x256,pyramid" }
11
- let(:generator) { described_class.new(source, output_file.path, options) }
12
- after { FileUtils.rmdir(tempdir) }
13
- context "tiff source" do
14
- context "8-bit source" do
15
- let(:source) { File.join(Ddr::Models::Engine.root, "spec", "fixtures", "8bit.tif") }
16
- it "should generate a non-empty file" do
17
- generator.generate
18
- expect(File.size(output_file.path)).to be > 0
19
- end
4
+ describe "generate" do
5
+ let(:tempdir) { Dir.mktmpdir }
6
+ let(:output_file) { File.new(File.join(tempdir, "output.ptif"), 'wb') }
7
+ let(:options) { "jpeg:90,tile:256x256,pyramid" }
8
+ let(:generator) { described_class.new(source, output_file.path, options) }
9
+ after { FileUtils.rmdir(tempdir) }
10
+ context "tiff source" do
11
+ context "8-bit source" do
12
+ let(:source) { File.join(Ddr::Models::Engine.root, "spec", "fixtures", "8bit.tif") }
13
+ it "should generate a non-empty file" do
14
+ generator.generate
15
+ expect(File.size(output_file.path)).to be > 0
20
16
  end
21
- context "16-bit source" do
22
- let(:source) { File.join(Ddr::Models::Engine.root, "spec", "fixtures", "16bit.tif") }
23
- it "should generate a non-empty file" do
24
- generator.generate
25
- expect(File.size(output_file.path)).to be > 0
26
- end
17
+ end
18
+ context "16-bit source" do
19
+ let(:source) { File.join(Ddr::Models::Engine.root, "spec", "fixtures", "16bit.tif") }
20
+ it "should generate a non-empty file" do
21
+ generator.generate
22
+ expect(File.size(output_file.path)).to be > 0
27
23
  end
28
24
  end
29
25
  end
30
-
31
26
  end
27
+
32
28
  end
33
- end
29
+ end
@@ -13,7 +13,7 @@ Rails.application.configure do
13
13
  config.eager_load = false
14
14
 
15
15
  # Configure static asset server for tests with Cache-Control for performance.
16
- config.serve_static_assets = true
16
+ config.serve_static_files = true
17
17
  config.static_cache_control = 'public, max-age=3600'
18
18
 
19
19
  # Show full error reports and disable caching.
@@ -13,21 +13,21 @@
13
13
 
14
14
  ActiveRecord::Schema.define(version: 20161021201011) do
15
15
 
16
- create_table "events", force: true do |t|
16
+ create_table "events", force: :cascade do |t|
17
17
  t.datetime "event_date_time"
18
18
  t.integer "user_id"
19
- t.string "type"
20
- t.string "pid"
21
- t.string "software"
19
+ t.string "type", limit: 255
20
+ t.string "pid", limit: 255
21
+ t.string "software", limit: 255
22
22
  t.text "comment"
23
23
  t.datetime "created_at"
24
24
  t.datetime "updated_at"
25
- t.string "summary"
26
- t.string "outcome"
25
+ t.string "summary", limit: 255
26
+ t.string "outcome", limit: 255
27
27
  t.text "detail"
28
28
  t.text "exception", limit: 65535
29
- t.string "user_key"
30
- t.string "permanent_id"
29
+ t.string "user_key", limit: 255
30
+ t.string "permanent_id", limit: 255
31
31
  end
32
32
 
33
33
  add_index "events", ["event_date_time"], name: "index_events_on_event_date_time"
@@ -36,25 +36,25 @@ ActiveRecord::Schema.define(version: 20161021201011) do
36
36
  add_index "events", ["pid"], name: "index_events_on_pid"
37
37
  add_index "events", ["type"], name: "index_events_on_type"
38
38
 
39
- create_table "users", force: true do |t|
40
- t.string "email", default: "", null: false
41
- t.string "encrypted_password", default: "", null: false
42
- t.string "reset_password_token"
39
+ create_table "users", force: :cascade do |t|
40
+ t.string "email", limit: 255, default: "", null: false
41
+ t.string "encrypted_password", limit: 255, default: "", null: false
42
+ t.string "reset_password_token", limit: 255
43
43
  t.datetime "reset_password_sent_at"
44
44
  t.datetime "remember_created_at"
45
- t.integer "sign_in_count", default: 0
45
+ t.integer "sign_in_count", default: 0
46
46
  t.datetime "current_sign_in_at"
47
47
  t.datetime "last_sign_in_at"
48
- t.string "current_sign_in_ip"
49
- t.string "last_sign_in_ip"
50
- t.datetime "created_at", null: false
51
- t.datetime "updated_at", null: false
52
- t.string "username", default: "", null: false
53
- t.string "first_name"
54
- t.string "middle_name"
55
- t.string "nickname"
56
- t.string "last_name"
57
- t.string "display_name"
48
+ t.string "current_sign_in_ip", limit: 255
49
+ t.string "last_sign_in_ip", limit: 255
50
+ t.datetime "created_at", null: false
51
+ t.datetime "updated_at", null: false
52
+ t.string "username", limit: 255, default: "", null: false
53
+ t.string "first_name", limit: 255
54
+ t.string "middle_name", limit: 255
55
+ t.string "nickname", limit: 255
56
+ t.string "last_name", limit: 255
57
+ t.string "display_name", limit: 255
58
58
  end
59
59
 
60
60
  add_index "users", ["email"], name: "index_users_on_email"
@@ -2,7 +2,7 @@ require 'support/structural_metadata_helper'
2
2
 
3
3
  FactoryGirl.define do
4
4
 
5
- factory :structure, class: Ddr::Models::Structure do
5
+ factory :structures, class: Ddr::Models::Structure do
6
6
 
7
7
  factory :simple_structure do
8
8
  initialize_with do
@@ -16,6 +16,12 @@ FactoryGirl.define do
16
16
  end
17
17
  end
18
18
 
19
+ factory :nested_structure_mptr do
20
+ initialize_with do
21
+ new(nested_structure_mptr_document)
22
+ end
23
+ end
24
+
19
25
  factory :multiple_struct_maps_structure do
20
26
  initialize_with do
21
27
  new(multiple_struct_maps_structure_document)
@@ -24,4 +30,4 @@ FactoryGirl.define do
24
30
 
25
31
  end
26
32
 
27
- end
33
+ end
Binary file
Binary file
@@ -6,7 +6,7 @@ module Ddr::Index
6
6
  before do
7
7
  Item.create(title: ["Testing 1"],
8
8
  identifier: ["test1"],
9
- description: ["The process of eliminating errors."])
9
+ description: ["The process of\r\neliminating errors\nmust include checking newlines."])
10
10
  Item.create(title: ["Testing 2"],
11
11
  identifier: ["test2"])
12
12
  Item.create(title: ["Testing 3"])
@@ -22,7 +22,7 @@ module Ddr::Index
22
22
  specify {
23
23
  expect(subject["title"]).to contain_exactly("Testing 1", "Testing 2", "Testing 3")
24
24
  expect(subject["identifier"]).to contain_exactly("test1", "test2", nil)
25
- expect(subject["description"]).to contain_exactly("The process of eliminating errors.", nil, nil)
25
+ expect(subject["description"]).to contain_exactly("The process of\r\neliminating errors\nmust include checking newlines.", nil, nil)
26
26
  expect(subject["creator"]).to contain_exactly(nil, nil, nil)
27
27
  expect(subject.headers).to include("creator")
28
28
  expect(subject.to_s).to match(/creator/)
@@ -33,7 +33,7 @@ module Ddr::Index
33
33
  subject.delete_empty_columns!
34
34
  expect(subject["title"]).to contain_exactly("Testing 1", "Testing 2", "Testing 3")
35
35
  expect(subject["identifier"]).to contain_exactly("test1", "test2", nil)
36
- expect(subject["description"]).to contain_exactly("The process of eliminating errors.", nil, nil)
36
+ expect(subject["description"]).to contain_exactly("The process of\r\neliminating errors\nmust include checking newlines.", nil, nil)
37
37
  expect(subject["creator"]).to contain_exactly(nil, nil, nil)
38
38
  expect(subject.headers).to contain_exactly("pid", "title", "identifier", "description")
39
39
  expect(subject.to_s).not_to match(/creator/)
@@ -16,6 +16,7 @@ module Ddr::Index
16
16
  Fields::TECHMD_ICC_PROFILE_VERSION,
17
17
  Fields::TECHMD_IMAGE_HEIGHT,
18
18
  Fields::TECHMD_IMAGE_WIDTH,
19
+ Fields::TECHMD_MD5,
19
20
  Fields::TECHMD_MEDIA_TYPE,
20
21
  Fields::TECHMD_MODIFICATION_TIME,
21
22
  Fields::TECHMD_PRONOM_IDENTIFIER,
@@ -32,12 +33,6 @@ module Ddr::Index
32
33
  its(:heading) { is_expected.to eq "pid" }
33
34
  end
34
35
 
35
- describe "PID" do
36
- subject { Fields::PID }
37
- its(:label) { is_expected.to eq "Fedora PID" }
38
- its(:heading) { is_expected.to eq "pid" }
39
- end
40
-
41
36
  describe "ACCESS_ROLE" do
42
37
  subject { Fields::ACCESS_ROLE }
43
38
  its(:label) { is_expected.to eq "Access Role" }
@@ -296,6 +291,12 @@ module Ddr::Index
296
291
  its(:heading) { is_expected.to eq "image_width" }
297
292
  end
298
293
 
294
+ describe "TECHMD_MD5" do
295
+ subject { Fields::TECHMD_MD5 }
296
+ its(:label) { is_expected.to eq "MD5" }
297
+ its(:heading) { is_expected.to eq "md5" }
298
+ end
299
+
299
300
  describe "TECHMD_MEDIA_TYPE" do
300
301
  subject { Fields::TECHMD_MEDIA_TYPE }
301
302
  its(:label) { is_expected.to eq "Media Type" }
@@ -1,137 +1,130 @@
1
- require 'spec_helper'
1
+ module Ddr::Managers
2
+ RSpec.describe DerivativesManager do
2
3
 
3
- module Ddr
4
- module Managers
5
- RSpec.describe DerivativesManager do
6
-
7
- before(:all) do
8
- class ContentBearing < ActiveFedora::Base
9
- include Ddr::Models::HasAdminMetadata
10
- include Ddr::Models::HasContent
11
- include Ddr::Models::HasThumbnail
12
- include Ddr::Models::EventLoggable
13
- _save_callbacks.clear
14
- end
15
- class MultiresImageable < ContentBearing
16
- include Ddr::Models::HasMultiresImage
17
- _save_callbacks.clear
18
- end
19
- end
20
-
21
- after(:all) do
22
- Ddr::Managers.send(:remove_const, :MultiresImageable)
23
- Ddr::Managers.send(:remove_const, :ContentBearing)
24
- end
25
-
26
- describe "generators called" do
27
- before { object.add_file file, Ddr::Datastreams::CONTENT }
28
- context "all derivatives" do
29
- context "not multires_image_able" do
30
- let(:object) { ContentBearing.new }
31
- context "content is an image" do
32
- let(:file) { fixture_file_upload("imageA.tif", "image/tiff") }
33
- it "should generate a thumbnail and not a ptif" do
34
- expect(object.derivatives).to receive(:generate_derivative!).with(Ddr::Derivatives::DERIVATIVES[:thumbnail])
35
- expect(object.derivatives).to_not receive(:generate_derivative!).with(Ddr::Derivatives::DERIVATIVES[:multires_image])
36
- object.derivatives.update_derivatives(:now)
37
- end
38
- end
39
- context "content is not an image" do
40
- let(:file) { fixture_file_upload("sample.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document") }
41
- it "should generate neither a thumbnail nor a ptif" do
42
- expect(object.derivatives).to_not receive(:generate_derivative!).with(Ddr::Derivatives::DERIVATIVES[:thumbnail])
43
- expect(object.derivatives).to_not receive(:generate_derivative!).with(Ddr::Derivatives::DERIVATIVES[:multires_image])
44
- object.derivatives.update_derivatives(:now)
45
- end
4
+ describe "generators called" do
5
+ before { object.add_file file, Ddr::Datastreams::CONTENT }
6
+ context "all derivatives" do
7
+ context "not multires_image_able" do
8
+ let(:object) { Target.new }
9
+ context "content is an image" do
10
+ let(:file) { fixture_file_upload("imageA.tif", "image/tiff") }
11
+ it "calls the thumbnail generator and not the ptif generator" do
12
+ expect(object.derivatives).to receive(:generate_derivative).with(Ddr::Derivatives::DERIVATIVES[:thumbnail])
13
+ expect(object.derivatives).to_not receive(:generate_derivative).with(Ddr::Derivatives::DERIVATIVES[:multires_image])
14
+ object.derivatives.update_derivatives(:now)
46
15
  end
47
16
  end
48
- context "multires_image_able" do
49
- let(:object) { MultiresImageable.new }
50
- context "content is tiff image" do
51
- let(:file) { fixture_file_upload("imageA.tif", "image/tiff") }
52
- it "should generate a thumbnail and a ptif" do
53
- expect(object.derivatives).to receive(:generate_derivative!).with(Ddr::Derivatives::DERIVATIVES[:thumbnail])
54
- expect(object.derivatives).to receive(:generate_derivative!).with(Ddr::Derivatives::DERIVATIVES[:multires_image])
55
- object.derivatives.update_derivatives(:now)
56
- end
17
+ context "content is not an image" do
18
+ let(:file) { fixture_file_upload("sample.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document") }
19
+ it "should generate neither a thumbnail nor a ptif" do
20
+ expect(object.derivatives).to_not receive(:generate_derivative).with(Ddr::Derivatives::DERIVATIVES[:thumbnail])
21
+ expect(object.derivatives).to_not receive(:generate_derivative).with(Ddr::Derivatives::DERIVATIVES[:multires_image])
22
+ object.derivatives.update_derivatives(:now)
57
23
  end
58
- context "content is not tiff image" do
59
- let(:file) { fixture_file_upload("bird.jpg", "image/jpeg") }
60
- it "should generate a thumbnail and a ptif" do
61
- expect(object.derivatives).to receive(:generate_derivative!).with(Ddr::Derivatives::DERIVATIVES[:thumbnail])
62
- expect(object.derivatives).to receive(:generate_derivative!).with(Ddr::Derivatives::DERIVATIVES[:multires_image])
63
- object.derivatives.update_derivatives(:now)
64
- end
24
+ end
25
+ end
26
+ context "multires_image_able" do
27
+ let(:object) { Component.new }
28
+ context "content is tiff image" do
29
+ let(:file) { fixture_file_upload("imageA.tif", "image/tiff") }
30
+ it "should generate a thumbnail and a ptif" do
31
+ expect(object.derivatives).to receive(:generate_derivative).with(Ddr::Derivatives::DERIVATIVES[:thumbnail])
32
+ expect(object.derivatives).to receive(:generate_derivative).with(Ddr::Derivatives::DERIVATIVES[:multires_image])
33
+ object.derivatives.update_derivatives(:now)
65
34
  end
66
- context "content is not tiff or jpeg image" do
67
- let(:file) { fixture_file_upload("arrow1rightred_e0.gif", "image/gif") }
68
- it "should generate a thumbnail but not a ptif" do
69
- expect(object.derivatives).to receive(:generate_derivative!).with(Ddr::Derivatives::DERIVATIVES[:thumbnail])
70
- expect(object.derivatives).to_not receive(:generate_derivative!).with(Ddr::Derivatives::DERIVATIVES[:multires_image])
71
- object.derivatives.update_derivatives(:now)
72
- end
35
+ end
36
+ context "content is not tiff image" do
37
+ let(:file) { fixture_file_upload("bird.jpg", "image/jpeg") }
38
+ it "should generate a thumbnail and a ptif" do
39
+ expect(object.derivatives).to receive(:generate_derivative).with(Ddr::Derivatives::DERIVATIVES[:thumbnail])
40
+ expect(object.derivatives).to receive(:generate_derivative).with(Ddr::Derivatives::DERIVATIVES[:multires_image])
41
+ object.derivatives.update_derivatives(:now)
73
42
  end
74
43
  end
75
- end
76
- context "not all derivatives" do
77
- let!(:derivs) { Ddr::Derivatives.update_derivatives }
78
- before { Ddr::Derivatives.update_derivatives = [ :thumbnail ] }
79
- after { Ddr::Derivatives.update_derivatives = derivs }
80
- let(:object) { MultiresImageable.new }
81
- let(:file) { fixture_file_upload("imageA.tif", "image/tiff") }
82
- it "should only generate the thumbnail derivative" do
83
- expect(object.derivatives).to receive(:generate_derivative!).with(Ddr::Derivatives::DERIVATIVES[:thumbnail])
84
- expect(object.derivatives).to_not receive(:generate_derivative!).with(Ddr::Derivatives::DERIVATIVES[:multires_image])
85
- object.derivatives.update_derivatives(:now)
44
+ context "content is not tiff or jpeg image" do
45
+ let(:file) { fixture_file_upload("arrow1rightred_e0.gif", "image/gif") }
46
+ it "should generate a thumbnail but not a ptif" do
47
+ expect(object.derivatives).to receive(:generate_derivative).with(Ddr::Derivatives::DERIVATIVES[:thumbnail])
48
+ expect(object.derivatives).to_not receive(:generate_derivative).with(Ddr::Derivatives::DERIVATIVES[:multires_image])
49
+ object.derivatives.update_derivatives(:now)
50
+ end
86
51
  end
87
52
  end
88
53
  end
89
-
90
- describe "derivative generation" do
54
+ context "not all derivatives" do
55
+ let!(:derivs) { Ddr::Derivatives.update_derivatives }
56
+ before { Ddr::Derivatives.update_derivatives = [ :thumbnail ] }
57
+ after { Ddr::Derivatives.update_derivatives = derivs }
58
+ let(:object) { Component.new }
91
59
  let(:file) { fixture_file_upload("imageA.tif", "image/tiff") }
92
- before { object.upload! file }
93
- describe "thumbnail" do
94
- let(:object) { ContentBearing.create }
95
- it "should create content in the thumbnail datastream" do
96
- expect(object.datastreams[Ddr::Datastreams::THUMBNAIL]).to_not be_present
97
- object.derivatives.generate_derivative! Ddr::Derivatives::DERIVATIVES[:thumbnail]
98
- expect(object.datastreams[Ddr::Datastreams::THUMBNAIL]).to be_present
99
- expect(object.datastreams[Ddr::Datastreams::THUMBNAIL].size).to be > 0
100
- end
101
- end
102
- describe "ptif" do
103
- let(:object) { MultiresImageable.create }
104
- it "should create content in the multires image datastream" do
105
- expect(object.datastreams[Ddr::Datastreams::MULTIRES_IMAGE]).to_not be_present
106
- object.derivatives.generate_derivative! Ddr::Derivatives::DERIVATIVES[:multires_image]
107
- expect(object.datastreams[Ddr::Datastreams::MULTIRES_IMAGE]).to be_present
108
- file_uri = object.datastreams[Ddr::Datastreams::MULTIRES_IMAGE].dsLocation
109
- expect(File.size(Ddr::Utils.path_from_uri(file_uri))).to be > 0
110
- end
60
+ it "should only generate the thumbnail derivative" do
61
+ expect(object.derivatives).to receive(:generate_derivative).with(Ddr::Derivatives::DERIVATIVES[:thumbnail])
62
+ expect(object.derivatives).to_not receive(:generate_derivative).with(Ddr::Derivatives::DERIVATIVES[:multires_image])
63
+ object.derivatives.update_derivatives(:now)
111
64
  end
112
65
  end
66
+ end
113
67
 
114
- describe "event creation" do
115
- let(:file) { fixture_file_upload("imageA.tif", "image/tiff") }
116
- before { object.upload! file }
117
- let(:object) { MultiresImageable.create }
118
- it "should create an update event for each derivative updated" do
119
- expect {object.derivatives.update_derivatives(:now) }.to change { object.update_events.count }.by(2)
68
+ describe "derivative generation" do
69
+ let(:file) { fixture_file_upload("imageA.tif", "image/tiff") }
70
+ before { object.upload! file }
71
+ describe "thumbnail" do
72
+ let(:object) { Component.create }
73
+ it "should create content in the thumbnail datastream" do
74
+ expect(object.datastreams[Ddr::Datastreams::THUMBNAIL]).to_not be_present
75
+ object.derivatives.generate_derivative! Ddr::Derivatives::DERIVATIVES[:thumbnail]
76
+ expect(object.datastreams[Ddr::Datastreams::THUMBNAIL]).to be_present
77
+ expect(object.datastreams[Ddr::Datastreams::THUMBNAIL].size).to be > 0
78
+ end
79
+ end
80
+ describe "ptif" do
81
+ let(:object) { Component.create }
82
+ it "should create content in the multires image datastream" do
83
+ expect(object.datastreams[Ddr::Datastreams::MULTIRES_IMAGE]).to_not be_present
84
+ object.derivatives.generate_derivative! Ddr::Derivatives::DERIVATIVES[:multires_image]
85
+ expect(object.datastreams[Ddr::Datastreams::MULTIRES_IMAGE]).to be_present
86
+ file_uri = object.datastreams[Ddr::Datastreams::MULTIRES_IMAGE].dsLocation
87
+ expect(File.size(Ddr::Utils.path_from_uri(file_uri))).to be > 0
120
88
  end
121
89
  end
90
+ end
122
91
 
123
- describe "exception during derivative generation" do
124
- let(:object) { ContentBearing.create }
92
+ describe "intermediate file handling" do
93
+ let(:object) { Component.create }
94
+ let(:file) { fixture_file_upload("imageA.tif", "image/tiff") }
95
+ before { object.upload! file }
96
+ describe "object has intermediate file" do
97
+ let(:intermediate_file) { fixture_file_upload("bird.jpg", "image/jpeg") }
125
98
  before do
126
- allow(Dir::Tmpname).to receive(:make_tmpname).with('', nil) { 'test-temp-dir' }
127
- # simulate raising of exception during derivative generation
128
- allow_any_instance_of(Ddr::Managers::DerivativesManager).to receive(:generate_derivative!).and_raise(StandardError)
99
+ object.add_file intermediate_file, Ddr::Datastreams::INTERMEDIATE_FILE
100
+ object.save!
101
+ object.reload
102
+ end
103
+ it "uses the intermediate file as the derivative source" do
104
+ expect(object.intermediateFile).to receive(:content).and_call_original
105
+ expect(object.content).to_not receive(:content)
106
+ object.derivatives.generate_derivative! Ddr::Derivatives::DERIVATIVES[:multires_image]
129
107
  end
130
- it "should delete the temporary work directory" do
131
- expect(File.exist?(File.join(Dir.tmpdir, 'test-temp-dir'))).to be false
108
+ end
109
+ describe "object does not have intermediate file" do
110
+ it "uses the content file as the derivative source" do
111
+ expect(object.content).to receive(:content).and_call_original
112
+ object.derivatives.generate_derivative! Ddr::Derivatives::DERIVATIVES[:multires_image]
132
113
  end
133
114
  end
115
+ end
134
116
 
117
+ describe "exception during derivative generation" do
118
+ let(:object) { Component.create }
119
+ before do
120
+ allow(Dir::Tmpname).to receive(:make_tmpname).with('', nil) { 'test-temp-dir' }
121
+ # simulate raising of exception during derivative generation
122
+ allow_any_instance_of(Ddr::Managers::DerivativesManager).to receive(:generate_derivative!).and_raise(StandardError)
123
+ end
124
+ it "should delete the temporary work directory" do
125
+ expect(File.exist?(File.join(Dir.tmpdir, 'test-temp-dir'))).to be false
126
+ end
135
127
  end
128
+
136
129
  end
137
130
  end