carrierwave_direct 0.0.13 → 0.0.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +15 -1
- data/Changelog.md +130 -0
- data/Gemfile +1 -1
- data/README.md +82 -45
- data/carrierwave_direct.gemspec +3 -4
- data/gemfiles/3.2.gemfile +13 -0
- data/gemfiles/4.0.gemfile +13 -0
- data/gemfiles/4.1.gemfile +13 -0
- data/lib/carrierwave_direct/form_builder.rb +48 -11
- data/lib/carrierwave_direct/locale/nl.yml +9 -0
- data/lib/carrierwave_direct/mount.rb +16 -4
- data/lib/carrierwave_direct/orm/activerecord.rb +4 -4
- data/lib/carrierwave_direct/test/capybara_helpers.rb +7 -5
- data/lib/carrierwave_direct/uploader/configuration.rb +4 -2
- data/lib/carrierwave_direct/uploader/content_type.rb +28 -0
- data/lib/carrierwave_direct/uploader/direct_url.rb +15 -0
- data/lib/carrierwave_direct/uploader.rb +79 -68
- data/lib/carrierwave_direct/validations/active_model.rb +5 -4
- data/lib/carrierwave_direct/version.rb +1 -1
- data/lib/carrierwave_direct.rb +6 -8
- data/spec/action_view_extensions/form_helper_spec.rb +4 -5
- data/spec/data/sample_data.rb +41 -0
- data/spec/form_builder_spec.rb +139 -6
- data/spec/mount_spec.rb +13 -26
- data/spec/orm/activerecord_spec.rb +69 -19
- data/spec/spec_helper.rb +16 -2
- data/spec/support/form_builder_helpers.rb +1 -0
- data/spec/support/model_helpers.rb +7 -7
- data/spec/support/view_helpers.rb +12 -2
- data/spec/test/capybara_helpers_spec.rb +28 -26
- data/spec/test/helpers_spec.rb +9 -11
- data/spec/uploader/configuration_spec.rb +46 -0
- data/spec/uploader/content_type_spec.rb +40 -0
- data/spec/uploader/direct_url_spec.rb +26 -0
- data/spec/uploader_spec.rb +145 -184
- metadata +40 -39
@@ -15,10 +15,18 @@ describe CarrierWaveDirect::ActiveRecord do
|
|
15
15
|
create_table :parties, :force => true do |t|
|
16
16
|
t.column :video, :string
|
17
17
|
end
|
18
|
+
|
19
|
+
create_table :dances, :force => true do |t|
|
20
|
+
t.column :location, :string
|
21
|
+
end
|
22
|
+
create_table :resources, :force => true do |t|
|
23
|
+
t.column :file, :string
|
24
|
+
end
|
18
25
|
end
|
19
26
|
|
20
27
|
def self.down
|
21
28
|
drop_table :parties
|
29
|
+
drop_table :dances
|
22
30
|
end
|
23
31
|
end
|
24
32
|
|
@@ -26,6 +34,13 @@ describe CarrierWaveDirect::ActiveRecord do
|
|
26
34
|
mount_uploader :video, DirectUploader
|
27
35
|
end
|
28
36
|
|
37
|
+
class Dance < ActiveRecord::Base
|
38
|
+
end
|
39
|
+
|
40
|
+
class Resource < ActiveRecord::Base
|
41
|
+
mount_uploader :file, DirectUploader
|
42
|
+
end
|
43
|
+
|
29
44
|
ActiveRecord::Base.establish_connection(dbconfig)
|
30
45
|
|
31
46
|
# turn off migration output
|
@@ -61,17 +76,17 @@ describe CarrierWaveDirect::ActiveRecord do
|
|
61
76
|
|
62
77
|
shared_examples_for "an invalid filename" do
|
63
78
|
it "should not be valid on create" do
|
64
|
-
subject.
|
79
|
+
expect(subject).to_not be_valid
|
65
80
|
end
|
66
81
|
|
67
82
|
it "should be valid on update" do
|
68
83
|
subject.save(:validate => false)
|
69
|
-
subject.
|
84
|
+
expect(subject).to be_valid
|
70
85
|
end
|
71
86
|
|
72
87
|
it "should use i18n for the error messages" do
|
73
88
|
subject.valid?
|
74
|
-
subject.errors[:video].
|
89
|
+
expect(subject.errors[:video]).to eq [
|
75
90
|
I18n.t("errors.messages.carrierwave_direct_filename_invalid") +
|
76
91
|
I18n.t("errors.messages.carrierwave_direct_allowed_extensions", :extensions => %w{avi mp4}.to_sentence)
|
77
92
|
]
|
@@ -96,14 +111,14 @@ describe CarrierWaveDirect::ActiveRecord do
|
|
96
111
|
end
|
97
112
|
end
|
98
113
|
|
99
|
-
subject.errors[:remote_video_net_url].
|
114
|
+
expect(subject.errors[:remote_video_net_url]).to eq [ messages ]
|
100
115
|
end
|
101
116
|
end
|
102
117
|
|
103
118
|
shared_examples_for "without an upload" do
|
104
119
|
before do
|
105
120
|
subject.remote_video_net_url = remote_video_net_url
|
106
|
-
subject.
|
121
|
+
subject.video_key = upload_path
|
107
122
|
end
|
108
123
|
|
109
124
|
it "should not be valid on create" do
|
@@ -146,10 +161,21 @@ describe CarrierWaveDirect::ActiveRecord do
|
|
146
161
|
|
147
162
|
describe ".validates_filename_uniqueness_of" do
|
148
163
|
it "should be turned on by default" do
|
149
|
-
party_class.should_receive(:validates_filename_uniqueness_of).with(:video)
|
164
|
+
party_class.should_receive(:validates_filename_uniqueness_of).with(:video, on: :create)
|
150
165
|
mount_uploader
|
151
166
|
end
|
152
167
|
|
168
|
+
context "mount_on: option is used" do
|
169
|
+
let(:dance) { Dance.new }
|
170
|
+
|
171
|
+
before { Dance.mount_uploader(:non_existing_column, DirectUploader, mount_on: :location) }
|
172
|
+
before { dance.non_existing_column_key = sample_key}
|
173
|
+
|
174
|
+
it "uses the column it's mounted on for checking uniqueness" do
|
175
|
+
expect { dance.valid? }.to_not raise_error
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
153
179
|
context "another Party with a duplicate video filename" do
|
154
180
|
before do
|
155
181
|
subject.video.key = sample_key
|
@@ -186,14 +212,14 @@ describe CarrierWaveDirect::ActiveRecord do
|
|
186
212
|
|
187
213
|
describe ".validates_filename_format_of" do
|
188
214
|
it "should be turned on by default" do
|
189
|
-
party_class.should_receive(:validates_filename_format_of).with(:video)
|
215
|
+
party_class.should_receive(:validates_filename_format_of).with(:video, on: :create)
|
190
216
|
mount_uploader
|
191
217
|
end
|
192
218
|
|
193
219
|
context "where the file upload is" do
|
194
220
|
context "nil" do
|
195
221
|
before do
|
196
|
-
subject.
|
222
|
+
subject.video_key = nil
|
197
223
|
end
|
198
224
|
|
199
225
|
it "should be valid" do
|
@@ -203,7 +229,7 @@ describe CarrierWaveDirect::ActiveRecord do
|
|
203
229
|
|
204
230
|
context "blank" do
|
205
231
|
before do
|
206
|
-
subject.
|
232
|
+
subject.video_key = ""
|
207
233
|
end
|
208
234
|
|
209
235
|
it "should be valid" do
|
@@ -219,7 +245,7 @@ describe CarrierWaveDirect::ActiveRecord do
|
|
219
245
|
|
220
246
|
context "and the uploaded file's extension is included in the list" do
|
221
247
|
before do
|
222
|
-
subject.
|
248
|
+
subject.video_key = sample_key(:extension => "avi")
|
223
249
|
end
|
224
250
|
|
225
251
|
it "should be valid" do
|
@@ -229,7 +255,7 @@ describe CarrierWaveDirect::ActiveRecord do
|
|
229
255
|
|
230
256
|
context "but uploaded file's extension is not included in the list" do
|
231
257
|
before do
|
232
|
-
subject.
|
258
|
+
subject.video_key = sample_key(:extension => "mp3")
|
233
259
|
end
|
234
260
|
|
235
261
|
it_should_behave_like "an invalid filename"
|
@@ -263,7 +289,7 @@ describe CarrierWaveDirect::ActiveRecord do
|
|
263
289
|
|
264
290
|
describe ".validates_remote_net_url_format_of" do
|
265
291
|
it "should be turned on by default" do
|
266
|
-
party_class.should_receive(:validates_remote_net_url_format_of).with(:video)
|
292
|
+
party_class.should_receive(:validates_remote_net_url_format_of).with(:video, on: :create)
|
267
293
|
mount_uploader
|
268
294
|
end
|
269
295
|
|
@@ -449,7 +475,7 @@ describe CarrierWaveDirect::ActiveRecord do
|
|
449
475
|
|
450
476
|
context "with an upload by file" do
|
451
477
|
before do
|
452
|
-
subject.
|
478
|
+
subject.video_key = sample_key
|
453
479
|
end
|
454
480
|
|
455
481
|
it "should be valid" do
|
@@ -501,7 +527,7 @@ describe CarrierWaveDirect::ActiveRecord do
|
|
501
527
|
|
502
528
|
describe "#key" do
|
503
529
|
it "should be accessible" do
|
504
|
-
party_class.new(:
|
530
|
+
party_class.new(:video_key => "some key").video_key.should == "some key"
|
505
531
|
end
|
506
532
|
end
|
507
533
|
|
@@ -526,7 +552,7 @@ describe CarrierWaveDirect::ActiveRecord do
|
|
526
552
|
|
527
553
|
context "does not have an upload" do
|
528
554
|
it "should be true" do
|
529
|
-
subject.filename_valid?.should
|
555
|
+
subject.filename_valid?.should be true
|
530
556
|
end
|
531
557
|
|
532
558
|
it_should_behave_like "having empty errors"
|
@@ -535,21 +561,21 @@ describe CarrierWaveDirect::ActiveRecord do
|
|
535
561
|
context "has an upload" do
|
536
562
|
context "with a valid filename" do
|
537
563
|
before do
|
538
|
-
subject.
|
564
|
+
subject.video_key = sample_key(:model_class => subject.class)
|
539
565
|
end
|
540
566
|
|
541
567
|
it "should be true" do
|
542
|
-
subject.filename_valid?.should
|
568
|
+
subject.filename_valid?.should be true
|
543
569
|
end
|
544
570
|
|
545
571
|
it_should_behave_like "having empty errors"
|
546
572
|
end
|
547
573
|
|
548
574
|
context "with an invalid filename" do
|
549
|
-
before { subject.
|
575
|
+
before { subject.video_key = sample_key(:model_class => subject.class, :valid => false) }
|
550
576
|
|
551
577
|
it "should be false" do
|
552
|
-
subject.filename_valid?.should
|
578
|
+
subject.filename_valid?.should be false
|
553
579
|
end
|
554
580
|
|
555
581
|
context "after the call, #errors" do
|
@@ -563,4 +589,28 @@ describe CarrierWaveDirect::ActiveRecord do
|
|
563
589
|
end
|
564
590
|
end
|
565
591
|
end
|
592
|
+
|
593
|
+
describe "class Resource < ActiveRecord::Base; mount_uploader :file, DirectUploader; end" do
|
594
|
+
include UploaderHelpers
|
595
|
+
include ModelHelpers
|
596
|
+
|
597
|
+
let(:resource_class) do
|
598
|
+
Class.new(Resource)
|
599
|
+
end
|
600
|
+
|
601
|
+
let(:subject) do
|
602
|
+
resource = resource_class.new
|
603
|
+
end
|
604
|
+
|
605
|
+
def mount_uploader
|
606
|
+
resource_class.mount_uploader :file, DirectUploader
|
607
|
+
end
|
608
|
+
|
609
|
+
#See resource table migration
|
610
|
+
it "should be valid still when a file column exists in table" do
|
611
|
+
expect(subject).to be_valid
|
612
|
+
end
|
613
|
+
|
614
|
+
|
615
|
+
end
|
566
616
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -8,6 +8,20 @@ require File.dirname(__FILE__) << '/support/view_helpers' # Catch dependency ord
|
|
8
8
|
|
9
9
|
Dir[ File.dirname(__FILE__) << "/support/**/*.rb"].each {|file| require file }
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
module Rails
|
12
|
+
def self.env
|
13
|
+
ActiveSupport::StringInquirer.new("test")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
RSpec.configure do |config|
|
18
|
+
config.expect_with :rspec do |c|
|
19
|
+
c.syntax = [:expect, :should]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
RSpec.configure do |config|
|
24
|
+
config.mock_with :rspec do |mocks|
|
25
|
+
mocks.syntax = [:expect, :should]
|
26
|
+
end
|
13
27
|
end
|
@@ -12,6 +12,7 @@ require 'carrierwave_direct/action_view_extensions/form_helper'
|
|
12
12
|
|
13
13
|
module FormBuilderHelpers
|
14
14
|
include ActionView::Helpers::FormHelper
|
15
|
+
include ActionView::Helpers::FormOptionsHelper
|
15
16
|
include CarrierWaveDirect::ActionViewExtensions::FormHelper
|
16
17
|
include ActionView::Context
|
17
18
|
|
@@ -16,16 +16,16 @@ module ModelHelpers
|
|
16
16
|
if options[:accessible]
|
17
17
|
if options[:accessible] == true
|
18
18
|
it "should == '#{sample_data}'" do
|
19
|
-
accessor_value.
|
19
|
+
expect(accessor_value).to eq sample_data
|
20
20
|
end
|
21
21
|
else
|
22
22
|
it "##{options[:accessible].keys.first} should be #{options[:accessible].values.first}" do
|
23
|
-
subject.send(options[:accessible].keys.first).
|
23
|
+
expect(subject.send(options[:accessible].keys.first)).to eq options[:accessible].values.first
|
24
24
|
end
|
25
25
|
end
|
26
26
|
else
|
27
27
|
it "should be nil" do
|
28
|
-
accessor_value.
|
28
|
+
expect(accessor_value).to be_nil
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
@@ -38,14 +38,14 @@ module ModelHelpers
|
|
38
38
|
describe "##{name} = '#{sample_data}'" do
|
39
39
|
it "should set the #{delegation_object}'s #{delegation_method}" do
|
40
40
|
subject.send("#{name}=", sample_data)
|
41
|
-
subject.send(delegation_object).send(delegation_method).
|
41
|
+
expect(subject.send(delegation_object).send(delegation_method)).to eq sample_data
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
45
|
describe "##{name}" do
|
46
46
|
it "should return the #{delegation_method} from the #{delegation_object}" do
|
47
47
|
subject.send(delegation_object).send("#{delegation_method}=", sample_data)
|
48
|
-
subject.send(name).
|
48
|
+
expect(subject.send(name)).to eq sample_data
|
49
49
|
end
|
50
50
|
|
51
51
|
it_should_be_accessible(name, sample_data, options)
|
@@ -62,7 +62,7 @@ module ModelHelpers
|
|
62
62
|
end
|
63
63
|
|
64
64
|
it "should respond to ##{name}=" do
|
65
|
-
subject.
|
65
|
+
expect(subject).to respond_to("#{name}=")
|
66
66
|
end
|
67
67
|
|
68
68
|
describe "##{name}" do
|
@@ -70,7 +70,7 @@ module ModelHelpers
|
|
70
70
|
before { subject.send("#{name}=", sample_data) }
|
71
71
|
|
72
72
|
it "should == '#{sample_data}'" do
|
73
|
-
subject.send(name).
|
73
|
+
expect(subject.send(name)).to eq sample_data
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
@@ -10,7 +10,7 @@ module ViewHelpers
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def have_parent_selector(options = {})
|
13
|
-
have_selector(:xpath, parent_selector_xpath, options)
|
13
|
+
have_selector(:xpath, parent_selector_xpath, options.merge(visible: false))
|
14
14
|
end
|
15
15
|
|
16
16
|
def parent_selector_xpath
|
@@ -36,12 +36,22 @@ module ViewHelpers
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def have_input(resource_name, input, options = {})
|
39
|
+
count = (options.delete :count).to_i
|
40
|
+
selector_options = count > 0 ? {:count => count} : {}
|
41
|
+
|
39
42
|
options[:type] ||= input
|
40
43
|
options[:id] ||= "#{resource_name}_#{input}"
|
41
44
|
options[:name] ||= "#{resource_name}[#{input}]"
|
42
45
|
options[:required] ||= "required" unless options[:required] == false
|
43
46
|
parent_selector << "input[#{to_xpath_attributes(options)}]"
|
44
|
-
have_parent_selector
|
47
|
+
have_parent_selector selector_options
|
48
|
+
end
|
49
|
+
|
50
|
+
def have_content_type(content_type,selected=nil)
|
51
|
+
options = {:value => content_type}
|
52
|
+
options[:selected] = 'selected' if selected
|
53
|
+
|
54
|
+
have_selector :xpath, ".//select[@name=\"Content-Type\"]/option[#{to_xpath_attributes(options)}]"
|
45
55
|
end
|
46
56
|
end
|
47
57
|
|
@@ -8,22 +8,26 @@ describe CarrierWaveDirect::Test::CapybaraHelpers do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
let(:subject) { ExampleSpec.new }
|
11
|
-
let(:page) {
|
12
|
-
let(:selector) {
|
11
|
+
let(:page) { double("Page").as_null_object }
|
12
|
+
let(:selector) { double("Selector") }
|
13
13
|
|
14
14
|
def stub_page
|
15
|
-
subject.
|
15
|
+
allow(subject).to receive(:page).and_return(page)
|
16
16
|
end
|
17
17
|
|
18
|
-
def find_element_value(css, value)
|
19
|
-
|
20
|
-
|
18
|
+
def find_element_value(css, value, options = nil)
|
19
|
+
if options
|
20
|
+
allow(page).to receive(:find).with(css, options).and_return(selector)
|
21
|
+
else
|
22
|
+
allow(page).to receive(:find).with(css).and_return(selector)
|
23
|
+
end
|
24
|
+
allow(selector).to receive(:value).and_return(value)
|
21
25
|
end
|
22
26
|
|
23
27
|
describe "#attach_file_for_direct_upload" do
|
24
28
|
context "'path/to/file.ext'" do
|
25
29
|
it "should attach a file with the locator => 'file'" do
|
26
|
-
subject.
|
30
|
+
expect(subject).to receive(:attach_file).with("file", "path/to/file.ext")
|
27
31
|
subject.attach_file_for_direct_upload "path/to/file.ext"
|
28
32
|
end
|
29
33
|
end
|
@@ -40,19 +44,19 @@ describe CarrierWaveDirect::Test::CapybaraHelpers do
|
|
40
44
|
|
41
45
|
def stub_common
|
42
46
|
stub_page
|
43
|
-
find_element_value("input[
|
44
|
-
subject.
|
47
|
+
find_element_value("input[name='success_action_redirect']", "http://example.com?custom_param=value", visible: false)
|
48
|
+
allow(subject).to receive(:visit)
|
45
49
|
end
|
46
50
|
|
47
51
|
before do
|
48
|
-
subject.
|
52
|
+
allow(subject).to receive(:click_button)
|
49
53
|
end
|
50
54
|
|
51
55
|
shared_examples_for "submitting the form" do
|
52
56
|
let(:options) { {} }
|
53
57
|
|
54
58
|
it "should submit the form" do
|
55
|
-
subject.
|
59
|
+
expect(subject).to receive(:click_button).with("Upload!")
|
56
60
|
upload_directly(options.merge(:button_locator => "Upload!"))
|
57
61
|
end
|
58
62
|
end
|
@@ -61,7 +65,7 @@ describe CarrierWaveDirect::Test::CapybaraHelpers do
|
|
61
65
|
let(:options) { { :success => false } }
|
62
66
|
|
63
67
|
it "should not redirect" do
|
64
|
-
subject.
|
68
|
+
expect(subject).to_not receive(:visit)
|
65
69
|
upload_directly(options)
|
66
70
|
end
|
67
71
|
end
|
@@ -69,30 +73,30 @@ describe CarrierWaveDirect::Test::CapybaraHelpers do
|
|
69
73
|
context "passing no options" do
|
70
74
|
before do
|
71
75
|
stub_common
|
72
|
-
subject.
|
73
|
-
subject.
|
76
|
+
allow(subject).to receive(:find_key).and_return("upload_dir/guid/$filename")
|
77
|
+
allow(subject).to receive(:find_upload_path).and_return("path/to/file.ext")
|
74
78
|
end
|
75
79
|
|
76
80
|
it_should_behave_like "submitting the form"
|
77
81
|
|
78
|
-
it "should redirect to the page's success_action_redirect url" do
|
79
|
-
subject.
|
82
|
+
it "should redirect to the page's success_action_redirect url and preserve custom parameters" do
|
83
|
+
expect(subject).to receive(:visit).with(/^http:\/\/example.com\?.*custom_param=value/)
|
80
84
|
upload_directly
|
81
85
|
end
|
82
86
|
|
83
87
|
context "the redirect url's params" do
|
84
88
|
it "should include the bucket name" do
|
85
|
-
subject.
|
89
|
+
expect(subject).to receive(:visit).with(/bucket=/)
|
86
90
|
upload_directly
|
87
91
|
end
|
88
92
|
|
89
93
|
it "should include an etag" do
|
90
|
-
subject.
|
94
|
+
expect(subject).to receive(:visit).with(/etag=/)
|
91
95
|
upload_directly
|
92
96
|
end
|
93
97
|
|
94
98
|
it "should include the key derived from the form" do
|
95
|
-
subject.
|
99
|
+
expect(subject).to receive(:visit).with(/key=upload_dir%2Fguid%2Ffile.ext/)
|
96
100
|
upload_directly
|
97
101
|
end
|
98
102
|
end
|
@@ -106,7 +110,7 @@ describe CarrierWaveDirect::Test::CapybaraHelpers do
|
|
106
110
|
|
107
111
|
context "the redirect url's params" do
|
108
112
|
it "should include the key from the :redirect_key option" do
|
109
|
-
subject.
|
113
|
+
expect(subject).to receive(:visit).with(/key=some\+redirect\+key/)
|
110
114
|
upload_directly(:redirect_key => "some redirect key")
|
111
115
|
end
|
112
116
|
end
|
@@ -137,24 +141,22 @@ describe CarrierWaveDirect::Test::CapybaraHelpers do
|
|
137
141
|
describe "#find_key" do
|
138
142
|
before do
|
139
143
|
stub_page
|
140
|
-
find_element_value("input[
|
144
|
+
find_element_value("input[name='key']", "key", visible: false)
|
141
145
|
end
|
142
146
|
|
143
147
|
it "should try to find the key on the page" do
|
144
|
-
subject.find_key.
|
148
|
+
expect(subject.find_key).to eq "key"
|
145
149
|
end
|
146
150
|
end
|
147
151
|
|
148
152
|
describe "#find_upload_path" do
|
149
153
|
before do
|
150
154
|
stub_page
|
151
|
-
find_element_value("input[
|
155
|
+
find_element_value("input[name='file']", "upload path", visible: false)
|
152
156
|
end
|
153
157
|
|
154
158
|
it "should try to find the upload path on the page" do
|
155
|
-
subject.find_upload_path.
|
159
|
+
expect(subject.find_upload_path).to eq "upload path"
|
156
160
|
end
|
157
161
|
end
|
158
|
-
|
159
162
|
end
|
160
|
-
|
data/spec/test/helpers_spec.rb
CHANGED
@@ -13,23 +13,23 @@ describe CarrierWaveDirect::Test::Helpers do
|
|
13
13
|
|
14
14
|
shared_examples_for "returning the default extension" do
|
15
15
|
it "should return '*/guid/filename.extension'" do
|
16
|
-
sample_key(direct_uploader).
|
16
|
+
expect(sample_key(direct_uploader)).to match /#{GUID_REGEXP}\/filename\.extension$/
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
context "['exe', 'bmp']" do
|
21
21
|
before do
|
22
|
-
direct_uploader.
|
22
|
+
allow(direct_uploader).to receive(:extension_white_list).and_return(%w{exe bmp})
|
23
23
|
end
|
24
24
|
|
25
25
|
it "should return '*/guid/filename.exe'" do
|
26
|
-
sample_key(direct_uploader).
|
26
|
+
expect(sample_key(direct_uploader)).to match /#{GUID_REGEXP}\/filename\.exe$/
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
context "[]" do
|
31
31
|
before do
|
32
|
-
direct_uploader.
|
32
|
+
allow(direct_uploader).to receive(:extension_white_list).and_return([])
|
33
33
|
end
|
34
34
|
|
35
35
|
it_should_behave_like "returning the default extension"
|
@@ -37,7 +37,7 @@ describe CarrierWaveDirect::Test::Helpers do
|
|
37
37
|
|
38
38
|
context "nil" do
|
39
39
|
before do
|
40
|
-
direct_uploader.
|
40
|
+
allow(direct_uploader).to receive(:extension_white_list).and_return(nil)
|
41
41
|
end
|
42
42
|
|
43
43
|
it_should_behave_like "returning the default extension"
|
@@ -47,9 +47,7 @@ describe CarrierWaveDirect::Test::Helpers do
|
|
47
47
|
|
48
48
|
context "with no options" do
|
49
49
|
it "should return '*/guid/filename.extension'" do
|
50
|
-
sample_key(
|
51
|
-
direct_uploader
|
52
|
-
).should =~ /#{GUID_REGEXP}\/filename\.extension$/
|
50
|
+
expect(sample_key(direct_uploader)).to match /#{GUID_REGEXP}\/filename\.extension$/
|
53
51
|
end
|
54
52
|
end
|
55
53
|
|
@@ -64,7 +62,7 @@ describe CarrierWaveDirect::Test::Helpers do
|
|
64
62
|
|
65
63
|
shared_examples_for "a custom filename" do
|
66
64
|
it "should return '*/guid/some_file.reg'" do
|
67
|
-
sample_key(direct_uploader, options).
|
65
|
+
expect(sample_key(direct_uploader, options)).to match /#{GUID_REGEXP}\/some_file\.reg$/
|
68
66
|
end
|
69
67
|
end
|
70
68
|
|
@@ -82,10 +80,10 @@ describe CarrierWaveDirect::Test::Helpers do
|
|
82
80
|
|
83
81
|
context ":base => 'upload_dir/porno/movie/${filename}'" do
|
84
82
|
it "should return 'upload_dir/porno/movie/guid/filename.extension'" do
|
85
|
-
sample_key(
|
83
|
+
expect(sample_key(
|
86
84
|
direct_uploader,
|
87
85
|
:base => "upload_dir/porno/movie/${filename}"
|
88
|
-
).
|
86
|
+
)).to eq "upload_dir/porno/movie/filename.extension"
|
89
87
|
end
|
90
88
|
end
|
91
89
|
context ":filename => 'some_file.reg'" do
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CarrierWaveDirect::Uploader::Configuration do
|
4
|
+
include UploaderHelpers
|
5
|
+
include ModelHelpers
|
6
|
+
|
7
|
+
let(:subject) { DirectUploader }
|
8
|
+
|
9
|
+
before do
|
10
|
+
subject.reset_direct_config
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "default configuration" do
|
14
|
+
it "returns false for validate_is_attached" do
|
15
|
+
expect(subject.validate_is_attached).to be false
|
16
|
+
end
|
17
|
+
|
18
|
+
it "returns false for validate_is_uploaded" do
|
19
|
+
expect(subject.validate_is_uploaded).to be false
|
20
|
+
end
|
21
|
+
|
22
|
+
it "return true for validate_unique_filename" do
|
23
|
+
expect(subject.validate_unique_filename).to be true
|
24
|
+
end
|
25
|
+
|
26
|
+
it "returns true for validate_remote_net_url_format" do
|
27
|
+
expect(subject.validate_remote_net_url_format).to be true
|
28
|
+
end
|
29
|
+
|
30
|
+
it "has upload_expiration of 10 hours" do
|
31
|
+
expect(subject.upload_expiration).to eq 36000
|
32
|
+
end
|
33
|
+
|
34
|
+
it "has min_file_size of 1 byte" do
|
35
|
+
expect(subject.min_file_size).to eq 1
|
36
|
+
end
|
37
|
+
|
38
|
+
it "has max_file_size of 5 MB" do
|
39
|
+
expect(subject.max_file_size).to eq 5242880
|
40
|
+
end
|
41
|
+
|
42
|
+
it "returns false for use_action_status" do
|
43
|
+
expect(subject.use_action_status).to be false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe CarrierWaveDirect::Uploader::ContentType do
|
6
|
+
subject { DirectUploader.new }
|
7
|
+
|
8
|
+
describe "#content_type" do
|
9
|
+
it "defaults to binary/octet-stream when there is no default_content_type" do
|
10
|
+
allow(subject.class).to receive(:default_content_type).and_return(nil)
|
11
|
+
expect(subject.content_type).to eq 'binary/octet-stream'
|
12
|
+
end
|
13
|
+
|
14
|
+
it "returns the default_content_type if set" do
|
15
|
+
allow(subject.class).to receive(:default_content_type).and_return('video/mp4')
|
16
|
+
expect(subject.content_type).to eq 'video/mp4'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#content_types" do
|
21
|
+
it "should default to common media types" do
|
22
|
+
expect(subject.content_types).to eq %w(application/atom+xml application/ecmascript application/json
|
23
|
+
application/javascript application/octet-stream application/ogg
|
24
|
+
application/pdf application/postscript application/rss+xml
|
25
|
+
application/font-woff application/xhtml+xml application/xml
|
26
|
+
application/xml-dtd application/zip application/gzip audio/basic
|
27
|
+
audio/mp4 audio/mpeg audio/ogg audio/vorbis audio/vnd.rn-realaudio
|
28
|
+
audio/vnd.wave audio/webm image/gif image/jpeg image/pjpeg image/png
|
29
|
+
image/svg+xml image/tiff text/cmd text/css text/csv text/html
|
30
|
+
text/javascript text/plain text/vcard text/xml video/mpeg video/mp4
|
31
|
+
video/ogg video/quicktime video/webm video/x-matroska video/x-ms-wmv
|
32
|
+
video/x-flv)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should be the configured value" do
|
36
|
+
allow(subject.class).to receive(:allowed_content_types).and_return(['audio/ogg'])
|
37
|
+
expect(subject.content_types).to eq ['audio/ogg']
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'data/sample_data'
|
5
|
+
|
6
|
+
describe CarrierWaveDirect::Uploader::DirectUrl do
|
7
|
+
|
8
|
+
let(:subject) { DirectUploader.new }
|
9
|
+
|
10
|
+
let(:mounted_subject) { DirectUploader.new(mounted_model, sample(:mounted_as)) }
|
11
|
+
|
12
|
+
describe "#direct_fog_url" do
|
13
|
+
it "should return the result from CarrierWave::Storage::Fog::File#public_url" do
|
14
|
+
expect(subject.direct_fog_url).to eq CarrierWave::Storage::Fog::File.new(
|
15
|
+
subject, nil, nil
|
16
|
+
).public_url
|
17
|
+
end
|
18
|
+
|
19
|
+
context ":with_path => true" do
|
20
|
+
it "should return the full url set by carrierwave" do
|
21
|
+
allow(subject).to receive(:url).and_return("url")
|
22
|
+
expect(subject.direct_fog_url(:with_path => true)).to eq "url"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|