kithe 2.0.0.pre.alpha2 → 2.0.2
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/README.md +4 -4
- data/app/indexing/kithe/indexable/record_index_updater.rb +1 -1
- data/app/jobs/kithe/create_derivatives_job.rb +2 -2
- data/app/models/kithe/asset.rb +82 -154
- data/app/models/kithe/asset/derivative_creator.rb +32 -62
- data/app/models/kithe/asset/derivative_definition.rb +12 -13
- data/app/models/kithe/asset/set_shrine_uploader.rb +64 -0
- data/app/models/kithe/collection.rb +0 -6
- data/app/models/kithe/model.rb +0 -21
- data/app/models/kithe/work.rb +0 -5
- data/app/uploaders/kithe/asset_uploader.rb +15 -78
- data/lib/kithe.rb +22 -20
- data/{app/models → lib}/kithe/config_base.rb +6 -1
- data/lib/kithe/engine.rb +14 -3
- data/lib/kithe/indexable_settings.rb +1 -1
- data/lib/kithe/patch_fx.rb +39 -0
- data/lib/kithe/version.rb +4 -1
- data/lib/shrine/plugins/kithe_checksum_signatures.rb +41 -0
- data/lib/shrine/plugins/kithe_controllable_backgrounding.rb +53 -0
- data/lib/shrine/plugins/kithe_derivative_definitions.rb +101 -0
- data/lib/shrine/plugins/kithe_derivatives.rb +54 -0
- data/lib/shrine/plugins/kithe_determine_mime_type.rb +39 -0
- data/lib/shrine/plugins/kithe_persisted_derivatives.rb +161 -0
- data/lib/shrine/plugins/kithe_promotion_callbacks.rb +4 -0
- data/lib/shrine/plugins/kithe_promotion_directives.rb +33 -3
- data/lib/shrine/plugins/kithe_storage_location.rb +53 -4
- data/lib/tasks/kithe_tasks.rake +22 -15
- data/spec/dummy/app/models/plain_active_record.rb +3 -0
- data/spec/dummy/config/database.yml +6 -0
- data/spec/dummy/db/schema.rb +102 -0
- data/spec/dummy/log/development.log +3616 -0
- data/spec/dummy/log/test.log +86464 -0
- data/spec/dummy/tmp/development_secret.txt +1 -1
- data/spec/indexing/indexable_spec.rb +1 -1
- data/spec/models/kithe/asset/asset_derivatives_spec.rb +137 -0
- data/spec/models/kithe/asset/asset_promotion_hooks_spec.rb +26 -5
- data/spec/models/kithe/asset/set_shrine_uploader_spec.rb +39 -0
- data/spec/models/kithe/asset_spec.rb +9 -59
- data/spec/models/kithe/model_spec.rb +0 -32
- data/spec/models/kithe_spec.rb +10 -0
- data/spec/shrine/kithe_accept_remote_url_spec.rb +49 -0
- data/spec/shrine/kithe_checksum_signatures_spec.rb +63 -0
- data/spec/shrine/kithe_derivative_definitions_spec.rb +303 -0
- data/spec/shrine/kithe_persisted_derivatives_spec.rb +424 -0
- data/spec/shrine/kithe_storage_location_spec.rb +43 -15
- data/spec/spec_helper.rb +0 -19
- data/spec/test_support/images/3x3_pixel.jpg +0 -0
- data/spec/test_support/shrine_spec_support.rb +2 -1
- metadata +60 -36
- data/app/models/kithe/asset/derivative_updater.rb +0 -119
- data/app/models/kithe/derivative.rb +0 -15
- data/app/uploaders/kithe/derivative_uploader.rb +0 -48
- data/spec/dummy/db/structure.sql +0 -309
- data/spec/models/kithe/asset/asset_create_derivatives_spec.rb +0 -320
- data/spec/models/kithe/derivative_spec.rb +0 -168
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
b2743b52b0dfb8e114644e6f301048cf7ca92e755552082072037e7d979a7de0d81017bc8645a42adec5590abd8c18bb87321aea57ff90f33bd5129f003a9eb1
|
@@ -46,7 +46,7 @@ describe Kithe::Indexable, type: :model do
|
|
46
46
|
|
47
47
|
expect(WebMock).to have_requested(:post, @solr_update_url).
|
48
48
|
with { |req|
|
49
|
-
JSON.parse(req.body) == { "delete" => work.
|
49
|
+
JSON.parse(req.body) == { "delete" => work.send(Kithe.indexable_settings.solr_id_value_attribute) }
|
50
50
|
}
|
51
51
|
end
|
52
52
|
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
# our configuration, customization, and added value on top of shrine derivatives.
|
4
|
+
# https://shrinerb.com/docs/plugins/derivatives
|
5
|
+
describe "customized shrine derivatives", queue_adapter: :inline do
|
6
|
+
let(:derivative_file_path) { Kithe::Engine.root.join("spec/test_support/images/2x2_pixel.jpg") }
|
7
|
+
let(:original_file_path) { Kithe::Engine.root.join("spec/test_support/images/1x1_pixel.jpg") }
|
8
|
+
|
9
|
+
describe "kithe derivative definitions" do
|
10
|
+
temporary_class("CustomUploader") do
|
11
|
+
call_fakeio = method(:fakeio) # weird closure issue
|
12
|
+
deriv_path = derivative_file_path
|
13
|
+
Class.new(Kithe::AssetUploader) do
|
14
|
+
self::Attacher.define_derivative(:fixed) do |io|
|
15
|
+
call_fakeio.(File.binread(deriv_path))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
temporary_class("CustomAsset") do
|
21
|
+
Class.new(Kithe::Asset) do
|
22
|
+
set_shrine_uploader(CustomUploader)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it "automatically sets up derivative properly" do
|
27
|
+
asset = CustomAsset.create!(title: "test", file: File.open(original_file_path))
|
28
|
+
# happened in BG job, so have to reload to see it.
|
29
|
+
asset.reload
|
30
|
+
|
31
|
+
derivative = asset.file_derivatives[:fixed]
|
32
|
+
expect(derivative).to be_present
|
33
|
+
|
34
|
+
expect(derivative.exists?).to be(true)
|
35
|
+
expect(derivative.read).to eq(File.binread(derivative_file_path))
|
36
|
+
derivative.rewind
|
37
|
+
|
38
|
+
expect(derivative.storage_key).to eq(:kithe_derivatives)
|
39
|
+
|
40
|
+
# have some expected metadata, including good constructed 'filename'
|
41
|
+
expect(derivative.metadata["size"]).to eq(File.binread(derivative_file_path).length)
|
42
|
+
expect(derivative.metadata["mime_type"]).to eq("image/jpeg")
|
43
|
+
expect(derivative.metadata["height"]).to eq(2)
|
44
|
+
expect(derivative.metadata["width"]).to eq(2)
|
45
|
+
expect(derivative.metadata["filename"]).to eq("#{asset.friendlier_id}_fixed.jpeg")
|
46
|
+
|
47
|
+
# path on storage is nice and pretty
|
48
|
+
expect(derivative.id).to match %r{\A#{asset.id}/fixed/[a-f0-9]+\.jpeg\Z}
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
it "can manually #create_derivatives" do
|
53
|
+
asset = CustomAsset.create!(title: "test", file: File.open(original_file_path))
|
54
|
+
asset.reload
|
55
|
+
|
56
|
+
asset.file_attacher.set_derivatives({})
|
57
|
+
asset.save!
|
58
|
+
asset.reload
|
59
|
+
expect(asset.file_derivatives).to be_empty
|
60
|
+
|
61
|
+
asset.create_derivatives
|
62
|
+
asset.reload
|
63
|
+
derivative = asset.file_derivatives[:fixed]
|
64
|
+
expect(derivative).to be_present
|
65
|
+
|
66
|
+
expect(derivative.exists?).to be(true)
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
it "can remove derivatives" do
|
71
|
+
asset = CustomAsset.create!(title: "test", file: File.open(original_file_path))
|
72
|
+
asset.reload
|
73
|
+
|
74
|
+
asset.remove_derivatives(:fixed)
|
75
|
+
expect(asset.file_derivatives.keys).to be_empty
|
76
|
+
asset.reload
|
77
|
+
expect(asset.file_derivatives.keys).to be_empty
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "with existing derivative", queue_adapter: :inline do
|
81
|
+
let(:asset) do
|
82
|
+
asset = CustomAsset.create!(title: "test", file: File.open(original_file_path))
|
83
|
+
asset.reload
|
84
|
+
asset.create_derivatives
|
85
|
+
asset.reload
|
86
|
+
end
|
87
|
+
|
88
|
+
it "deletes stored derivative file when model is deleted" do
|
89
|
+
derivatives = asset.file_derivatives.values
|
90
|
+
expect(derivatives).to be_present
|
91
|
+
|
92
|
+
asset.destroy!
|
93
|
+
expect(derivatives.none? {|d| d.exists? }).to be(true)
|
94
|
+
end
|
95
|
+
|
96
|
+
it "deletes stored derivatives on new file assignment" do
|
97
|
+
derivatives = asset.file_derivatives.values
|
98
|
+
expect(derivatives).to be_present
|
99
|
+
|
100
|
+
asset.file = File.open(original_file_path)
|
101
|
+
asset.save!
|
102
|
+
asset.reload
|
103
|
+
|
104
|
+
expect(derivatives.none? {|d| d.exists? }).to be(true)
|
105
|
+
end
|
106
|
+
|
107
|
+
it "lazy create does not even read original" do
|
108
|
+
pre_existing = asset.file_derivatives[:fixed]
|
109
|
+
|
110
|
+
expect(asset.file).not_to receive(:read)
|
111
|
+
expect(asset.file).not_to receive(:download)
|
112
|
+
|
113
|
+
asset.create_derivatives(lazy: true)
|
114
|
+
|
115
|
+
expect(asset.file_derivatives[:fixed]).to eq(pre_existing)
|
116
|
+
end
|
117
|
+
|
118
|
+
describe "#update_derivative" do
|
119
|
+
it "can add a derivative" do
|
120
|
+
result = asset.update_derivative(:fixed, StringIO.new("test updated"))
|
121
|
+
|
122
|
+
expect(result).to be_kind_of(Shrine::UploadedFile)
|
123
|
+
expect(asset.file_derivatives[:fixed].read).to eq("test updated")
|
124
|
+
expect(asset.file_derivatives[:fixed].storage_key).to eq(:kithe_derivatives)
|
125
|
+
end
|
126
|
+
|
127
|
+
it "can add a derivative with meadata" do
|
128
|
+
result = asset.update_derivative("test", StringIO.new("test"), metadata: { "manual" => "value"} )
|
129
|
+
|
130
|
+
expect(result).to be_kind_of(Shrine::UploadedFile)
|
131
|
+
expect(asset.file_derivatives[:test].metadata["manual"]).to eq("value")
|
132
|
+
expect(asset.file_derivatives[:test].metadata["size"]).to be_present
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
@@ -3,9 +3,6 @@ require 'rails_helper'
|
|
3
3
|
describe "Kithe::Asset promotion hooks", queue_adapter: :inline do
|
4
4
|
temporary_class("TestAsset") do
|
5
5
|
Class.new(Kithe::Asset) do
|
6
|
-
define_derivative :test do
|
7
|
-
# no-op, but we need a definition so will be scheduled
|
8
|
-
end
|
9
6
|
end
|
10
7
|
end
|
11
8
|
|
@@ -33,7 +30,6 @@ describe "Kithe::Asset promotion hooks", queue_adapter: :inline do
|
|
33
30
|
it "has access to automatic metadata extraction" do
|
34
31
|
unsaved_asset.save!
|
35
32
|
expect($metadata_in_before_promotion).to be_present
|
36
|
-
expect($metadata_in_before_promotion['sha512']).to be_present
|
37
33
|
end
|
38
34
|
end
|
39
35
|
|
@@ -216,7 +212,6 @@ describe "Kithe::Asset promotion hooks", queue_adapter: :inline do
|
|
216
212
|
asset.reload
|
217
213
|
|
218
214
|
expect(asset.stored?).to be(true)
|
219
|
-
expect(asset.sha512).to be_present
|
220
215
|
end
|
221
216
|
end
|
222
217
|
|
@@ -259,6 +254,20 @@ describe "Kithe::Asset promotion hooks", queue_adapter: :inline do
|
|
259
254
|
end
|
260
255
|
|
261
256
|
describe "promotion_directive :promote", queue_adapter: :test do
|
257
|
+
temporary_class("TestUploader") do
|
258
|
+
Class.new(Kithe::AssetUploader) do
|
259
|
+
self::Attacher.define_derivative :test do
|
260
|
+
# no-op, but we need a definition so will be scheduled
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
temporary_class("TestAsset") do
|
266
|
+
Class.new(Kithe::Asset) do
|
267
|
+
set_shrine_uploader(TestUploader)
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
262
271
|
it "can cancel promotion" do
|
263
272
|
expect_any_instance_of(Kithe::AssetUploader::Attacher).not_to receive(:promote)
|
264
273
|
|
@@ -383,6 +392,7 @@ describe "Kithe::Asset promotion hooks", queue_adapter: :inline do
|
|
383
392
|
asset = Kithe::Asset.new
|
384
393
|
asset.set_promotion_directives(promote: :inline)
|
385
394
|
expect(asset.file_attacher.promotion_directives).to eq("promote" => "inline")
|
395
|
+
expect(asset.promotion_directives).to eq("promote" => "inline")
|
386
396
|
end
|
387
397
|
|
388
398
|
it "setting from instance writer is aggregative" do
|
@@ -391,5 +401,16 @@ describe "Kithe::Asset promotion hooks", queue_adapter: :inline do
|
|
391
401
|
asset.set_promotion_directives(create_derivatives: false)
|
392
402
|
expect(asset.file_attacher.promotion_directives).to eq("promote" => "inline", "create_derivatives" => "false")
|
393
403
|
end
|
404
|
+
|
405
|
+
it "setting from instance writer survives reload" do
|
406
|
+
asset = Kithe::Asset.create(title: "test")
|
407
|
+
asset.set_promotion_directives(create_derivatives: false)
|
408
|
+
expect(asset.file_attacher.promotion_directives).to eq("create_derivatives" => "false")
|
409
|
+
|
410
|
+
asset.reload
|
411
|
+
|
412
|
+
expect(asset.file_attacher.promotion_directives).to eq("create_derivatives" => "false")
|
413
|
+
end
|
414
|
+
|
394
415
|
end
|
395
416
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
describe Kithe::Asset::SetShrineUploader do
|
4
|
+
temporary_class("MyUploaderSubclass") do
|
5
|
+
Class.new(Kithe::AssetUploader) do
|
6
|
+
add_metadata :uploader_class_name do |io|
|
7
|
+
self.class.name
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
temporary_class("AssetSubclass") do
|
13
|
+
Class.new(Kithe::Asset) do
|
14
|
+
set_shrine_uploader(MyUploaderSubclass)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
let(:asset) { AssetSubclass.create!(title: "test") }
|
19
|
+
let(:image_path) { Kithe::Engine.root.join("spec/test_support/images/1x1_pixel.jpg") }
|
20
|
+
|
21
|
+
it "has proper class attacher" do
|
22
|
+
expect(AssetSubclass.file_attacher.class).to eq(MyUploaderSubclass::Attacher)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "has proper instance attacher" do
|
26
|
+
expect(asset.file_attacher.class).to eq(MyUploaderSubclass::Attacher)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "can attach file using custom subclass" do
|
30
|
+
asset.set_promotion_directives(promote: :inline)
|
31
|
+
asset.file = File.open(image_path)
|
32
|
+
asset.save!
|
33
|
+
asset.reload
|
34
|
+
|
35
|
+
expect(asset.stored?).to eq(true)
|
36
|
+
expect(asset.file).to be_present
|
37
|
+
expect(asset.file.metadata["uploader_class_name"]).to eq("MyUploaderSubclass")
|
38
|
+
end
|
39
|
+
end
|
@@ -51,11 +51,6 @@ RSpec.describe Kithe::Asset, type: :model do
|
|
51
51
|
|
52
52
|
# This is the file location/storage path, currently under UUID pk.
|
53
53
|
expect(asset.file.id).to match %r{\Aasset/#{asset.id}/.*\.jpg}
|
54
|
-
|
55
|
-
# checksums
|
56
|
-
expect(asset.sha1).to eq(Digest::SHA1.hexdigest(File.open(source_path).read))
|
57
|
-
expect(asset.md5).to eq(Digest::MD5.hexdigest(File.open(source_path).read))
|
58
|
-
expect(asset.sha512).to eq(Digest::SHA512.hexdigest(File.open(source_path).read))
|
59
54
|
end
|
60
55
|
|
61
56
|
describe "pdf file" do
|
@@ -90,46 +85,9 @@ RSpec.describe Kithe::Asset, type: :model do
|
|
90
85
|
|
91
86
|
# This is the file location/storage path, currently under UUID pk.
|
92
87
|
expect(asset.file.id).to match %r{\Aasset/#{asset.id}/.*\.jpg}
|
93
|
-
|
94
|
-
# checksums
|
95
|
-
expect(asset.sha1).to eq(Digest::SHA1.hexdigest(File.open(sample_file_path).read))
|
96
|
-
expect(asset.md5).to eq(Digest::MD5.hexdigest(File.open(sample_file_path).read))
|
97
|
-
expect(asset.sha512).to eq(Digest::SHA512.hexdigest(File.open(sample_file_path).read))
|
98
88
|
end
|
99
89
|
end
|
100
90
|
|
101
|
-
describe "remote urls", queue_adapter: :inline do
|
102
|
-
it "can assign and promote" do
|
103
|
-
stub_request(:any, "www.example.com/bar.html?foo=bar").
|
104
|
-
to_return(body: "Example Response" )
|
105
|
-
|
106
|
-
asset.file = {"id" => "http://www.example.com/bar.html?foo=bar", "storage" => "remote_url"}
|
107
|
-
asset.save!
|
108
|
-
asset.reload
|
109
|
-
|
110
|
-
expect(asset.file.storage_key).to eq(asset.file_attacher.store.storage_key.to_sym)
|
111
|
-
expect(asset.stored?).to be true
|
112
|
-
expect(asset.file.read).to include("Example Response")
|
113
|
-
expect(asset.file.id).to end_with(".html") # no query params
|
114
|
-
end
|
115
|
-
|
116
|
-
it "will fetch headers" do
|
117
|
-
stubbed = stub_request(:any, "www.example.com/bar.html?foo=bar").
|
118
|
-
to_return(body: "Example Response" )
|
119
|
-
|
120
|
-
asset.file = {"id" => "http://www.example.com/bar.html?foo=bar",
|
121
|
-
"storage" => "remote_url",
|
122
|
-
"headers" => {"Authorization" => "Bearer TestToken"}}
|
123
|
-
|
124
|
-
asset.save!
|
125
|
-
|
126
|
-
expect(
|
127
|
-
a_request(:get, "www.example.com/bar.html?foo=bar").with(
|
128
|
-
headers: {'Authorization'=>'Bearer TestToken', 'User-Agent' => /.+/}
|
129
|
-
)
|
130
|
-
).to have_been_made.times(1)
|
131
|
-
end
|
132
|
-
end
|
133
91
|
|
134
92
|
describe "#promote", queue_adapter: :test do
|
135
93
|
let(:asset) { FactoryBot.create(:kithe_asset, :with_file) }
|
@@ -144,7 +102,7 @@ RSpec.describe Kithe::Asset, type: :model do
|
|
144
102
|
expect(asset.stored?).to be(true)
|
145
103
|
expect(asset.file_attacher.stored?).to be(true)
|
146
104
|
expect(asset.file.exists?).to be(true)
|
147
|
-
expect(asset.file.metadata.keys).to include("filename", "size", "mime_type", "width", "height"
|
105
|
+
expect(asset.file.metadata.keys).to include("filename", "size", "mime_type", "width", "height")
|
148
106
|
end
|
149
107
|
|
150
108
|
it "does not do anything for already promoted file", queue_adapter: :inline do
|
@@ -158,15 +116,6 @@ RSpec.describe Kithe::Asset, type: :model do
|
|
158
116
|
end
|
159
117
|
end
|
160
118
|
|
161
|
-
describe "#derivative_for" do
|
162
|
-
let!(:derivative) do
|
163
|
-
asset.derivatives.create!(key: "foo", file: StringIO.new("whatever"))
|
164
|
-
end
|
165
|
-
it "returns thing" do
|
166
|
-
expect(asset.derivative_for(:foo)).to eq(derivative)
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
119
|
describe "removes derivatives", queue_adapter: :inline do
|
171
120
|
let(:asset_with_derivatives) do
|
172
121
|
Kithe::Asset.create(title: "test",
|
@@ -178,19 +127,17 @@ RSpec.describe Kithe::Asset, type: :model do
|
|
178
127
|
a.update_derivative(:existing, StringIO.new("content"))
|
179
128
|
end
|
180
129
|
end
|
181
|
-
|
182
|
-
let!(:existing_stored_file) {
|
130
|
+
|
131
|
+
let!(:existing_stored_file) { asset_with_derivatives.file_derivatives.values.first }
|
183
132
|
|
184
133
|
it "deletes derivatives on delete" do
|
185
134
|
asset_with_derivatives.destroy
|
186
|
-
expect{ existing_derivative.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
187
135
|
expect(existing_stored_file.exists?).to be(false)
|
188
136
|
end
|
189
137
|
|
190
138
|
it "deletes derivatives on new asset assigned" do
|
191
139
|
asset_with_derivatives.file = StringIO.new("some new thing")
|
192
140
|
asset_with_derivatives.save!
|
193
|
-
expect{ existing_derivative.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
194
141
|
expect(existing_stored_file.exists?).to be(false)
|
195
142
|
end
|
196
143
|
|
@@ -198,12 +145,15 @@ RSpec.describe Kithe::Asset, type: :model do
|
|
198
145
|
# mostly needed for testing scenarios, not otherwise expected.
|
199
146
|
filepath = Kithe::Engine.root.join("spec/test_support/images/1x1_pixel.jpg")
|
200
147
|
asset = Kithe::Asset.new(file: File.open(filepath), title: "test").tap do |a|
|
201
|
-
a.file_attacher.set_promotion_directives(skip_callbacks: true)
|
148
|
+
a.file_attacher.set_promotion_directives(promote: false, skip_callbacks: true)
|
202
149
|
end
|
203
|
-
asset.derivatives << Kithe::Derivative.new(file: File.open(filepath), key: "test")
|
204
150
|
asset.save!
|
205
151
|
asset.reload
|
206
|
-
|
152
|
+
|
153
|
+
expect(asset.stored?).to eq(false)
|
154
|
+
asset.update_derivative("test", File.open(filepath), delete: false)
|
155
|
+
|
156
|
+
expect(asset.file_derivatives.count).to eq 1
|
207
157
|
end
|
208
158
|
end
|
209
159
|
end
|
@@ -32,18 +32,6 @@ module Kithe
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
describe "eager-loading derivatives" do
|
36
|
-
let!(:work) { FactoryBot.create(:kithe_work) }
|
37
|
-
let!(:collection) { FactoryBot.create(:kithe_collection) }
|
38
|
-
let!(:asset) { FactoryBot.create(:kithe_asset) }
|
39
|
-
|
40
|
-
it "work from hetereogeous collections" do
|
41
|
-
results = Kithe::Model.all.includes(:derivatives)
|
42
|
-
asset = results.to_a.find { |a| a.kind_of? Kithe::Asset }
|
43
|
-
expect(asset.derivatives.loaded?).to be(true)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
35
|
describe "contains association" do
|
48
36
|
let(:collection1) { FactoryBot.create(:kithe_collection)}
|
49
37
|
let(:collection2) { FactoryBot.create(:kithe_collection)}
|
@@ -72,25 +60,5 @@ module Kithe
|
|
72
60
|
expect(work2.contained_by.count).to eq(0)
|
73
61
|
end
|
74
62
|
end
|
75
|
-
|
76
|
-
describe "with_representative_derivatives scope" do
|
77
|
-
let(:work) {
|
78
|
-
FactoryBot.create(:kithe_work, title: "test for preload",
|
79
|
-
members: [
|
80
|
-
FactoryBot.create(:kithe_work, representative: FactoryBot.create(:kithe_asset, :faked_derivatives)),
|
81
|
-
FactoryBot.create(:kithe_asset, :faked_derivatives),
|
82
|
-
FactoryBot.create(:kithe_asset, :faked_derivatives)
|
83
|
-
])
|
84
|
-
}
|
85
|
-
it "pre-loads all representatives and derivatives" do
|
86
|
-
members = work.members.with_representative_derivatives.to_a
|
87
|
-
|
88
|
-
members.each do |member|
|
89
|
-
expect(member.association(:leaf_representative)).to be_loaded
|
90
|
-
expect(member.leaf_representative.association(:derivatives)).to be_loaded
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
63
|
end
|
96
64
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
describe "Kithe module" do
|
4
|
+
describe "indexable_settings" do
|
5
|
+
it "gets writer_settings.logger set to Rails.logger" do
|
6
|
+
expect(Rails.logger).not_to be_nil
|
7
|
+
expect(Kithe.indexable_settings.writer_settings["logger"]).to be(Rails.logger)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
require 'shrine/plugins/kithe_accept_remote_url'
|
3
|
+
|
4
|
+
describe Shrine::Plugins::KitheAcceptRemoteUrl, queue_adapter: :inline do
|
5
|
+
temporary_class("RemoteUrlUploader") do
|
6
|
+
Class.new(Kithe::AssetUploader) do
|
7
|
+
plugin :kithe_accept_remote_url
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
temporary_class("MyAsset") do
|
12
|
+
Class.new(Kithe::Asset) do
|
13
|
+
set_shrine_uploader(RemoteUrlUploader)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
let(:asset) { MyAsset.create!(title: "test") }
|
18
|
+
|
19
|
+
it "can assign and promote" do
|
20
|
+
stub_request(:any, "www.example.com/bar.html?foo=bar").
|
21
|
+
to_return(body: "Example Response" )
|
22
|
+
|
23
|
+
asset.file = {"id" => "http://www.example.com/bar.html?foo=bar", "storage" => "remote_url"}
|
24
|
+
asset.save!
|
25
|
+
asset.reload
|
26
|
+
|
27
|
+
expect(asset.file.storage_key).to eq(asset.file_attacher.store.storage_key.to_sym)
|
28
|
+
expect(asset.stored?).to be true
|
29
|
+
expect(asset.file.read).to include("Example Response")
|
30
|
+
expect(asset.file.id).to end_with(".html") # no query params
|
31
|
+
end
|
32
|
+
|
33
|
+
it "will fetch headers" do
|
34
|
+
stubbed = stub_request(:any, "www.example.com/bar.html?foo=bar").
|
35
|
+
to_return(body: "Example Response" )
|
36
|
+
|
37
|
+
asset.file = {"id" => "http://www.example.com/bar.html?foo=bar",
|
38
|
+
"storage" => "remote_url",
|
39
|
+
"headers" => {"Authorization" => "Bearer TestToken"}}
|
40
|
+
|
41
|
+
asset.save!
|
42
|
+
|
43
|
+
expect(
|
44
|
+
a_request(:get, "www.example.com/bar.html?foo=bar").with(
|
45
|
+
headers: {'Authorization'=>'Bearer TestToken', 'User-Agent' => /.+/}
|
46
|
+
)
|
47
|
+
).to have_been_made.times(1)
|
48
|
+
end
|
49
|
+
end
|