/
fog_spec.rb
139 lines (108 loc) · 3.59 KB
/
fog_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
require 'spec_helper'
require 'fog/aws'
require 'fog/google'
require 'fog/local'
begin
require 'fog/rackspace'
rescue LoadError
# Can be missing in CI
end
unless ENV['REMOTE'] == 'true'
Fog.mock!
end
require_relative './fog_credentials' # after Fog.mock!
require_relative './fog_helper'
describe CarrierWave::Storage::Fog do
FOG_CREDENTIALS.each do |credential|
fog_tests(credential)
end
describe '.eager_load' do
after do
CarrierWave::Storage::Fog.connection_cache.clear
CarrierWave::Uploader::Base.fog_credentials = nil
end
it "caches Fog::Storage instance" do
CarrierWave::Uploader::Base.fog_credentials = {
provider: 'AWS', aws_access_key_id: 'foo', aws_secret_access_key: 'bar'
}
expect { CarrierWave::Storage::Fog.eager_load }.
to change { CarrierWave::Storage::Fog.connection_cache }
end
it "does nothing when fog_credentials is empty" do
CarrierWave::Uploader::Base.fog_credentials = {}
expect { CarrierWave::Storage::Fog.eager_load }.
not_to change { CarrierWave::Storage::Fog.connection_cache }
end
end
describe CarrierWave::Storage::Fog::File do
subject(:file) { CarrierWave::Storage::Fog::File.new(nil, nil, nil) }
describe "#filename" do
subject(:filename) { file.filename }
before { allow(file).to receive(:url).and_return(url) }
context "with normal url" do
let(:url) { 'http://example.com/path/to/foo.txt' }
it "extracts filename from url" do
is_expected.to eq('foo.txt')
end
end
context "when url contains '/' in query string" do
let(:url){ 'http://example.com/path/to/foo.txt?bar=baz/fubar' }
it "extracts correct part" do
is_expected.to eq('foo.txt')
end
end
context "when url contains multi-byte characters" do
let(:url) { 'http://example.com/path/to/%E6%97%A5%E6%9C%AC%E8%AA%9E.txt' }
it "decodes multi-byte characters" do
is_expected.to eq('日本語.txt')
end
end
end
describe "#basename" do
subject(:basename) { file.basename }
before { allow(file).to receive(:filename).and_return(filename) }
context "when file has complicated extensions" do
let(:filename) { "complex.filename.tar.gz" }
it "return correct basename" do
is_expected.to eq("complex.filename")
end
end
context "when file has simple extension" do
let(:filename) { "simple.extension" }
it "return correct basename" do
is_expected.to eq("simple")
end
end
context "when file has no extension" do
let(:filename) { "filename" }
it "return correct basename" do
is_expected.to eq("filename")
end
end
end
describe "#extension" do
subject(:extension) { file.extension }
before { allow(file).to receive(:filename).and_return(filename) }
%w[gz bz2 z lz xz].each do |ext|
context "when file has complicated extensions (tar.#{ext})" do
let(:filename) { "complex.filename.tar.#{ext}" }
it "return correct extension" do
is_expected.to eq("tar.#{ext}")
end
end
end
context "when file has simple extension" do
let(:filename) { "simple.extension" }
it "return correct extension" do
is_expected.to eq("extension")
end
end
context "when file has no extension" do
let(:filename) { "filename" }
it "return correct extension" do
is_expected.to eq("")
end
end
end
end
end