nightcrawler_swift 0.4.0 → 0.5.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +4 -1
- data/Changelog.md +12 -2
- data/Gemfile.lock +11 -1
- data/README.md +112 -7
- data/bin/nswift +1 -1
- data/lib/nightcrawler_swift/cli/commands/url_for.rb +9 -0
- data/lib/nightcrawler_swift/cli/formatters/basic.rb +40 -0
- data/lib/nightcrawler_swift/cli/opt_parser.rb +81 -0
- data/lib/nightcrawler_swift/cli/runner.rb +127 -0
- data/lib/nightcrawler_swift/cli.rb +16 -173
- data/lib/nightcrawler_swift/command.rb +5 -14
- data/lib/nightcrawler_swift/commands/delete.rb +4 -6
- data/lib/nightcrawler_swift/commands/download.rb +4 -6
- data/lib/nightcrawler_swift/commands/list.rb +0 -6
- data/lib/nightcrawler_swift/commands/upload.rb +1 -4
- data/lib/nightcrawler_swift/connection.rb +15 -15
- data/lib/nightcrawler_swift/exceptions.rb +2 -1
- data/lib/nightcrawler_swift/gateway.rb +68 -0
- data/lib/nightcrawler_swift/version.rb +1 -1
- data/lib/nightcrawler_swift.rb +7 -2
- data/nightcrawler_swift.gemspec +1 -0
- data/spec/lib/nightcrawler_swift/cli/commands/url_for_spec.rb +34 -0
- data/spec/lib/nightcrawler_swift/cli/formatters/basic_spec.rb +117 -0
- data/spec/lib/nightcrawler_swift/cli/opt_parser_spec.rb +135 -0
- data/spec/lib/nightcrawler_swift/{cli_spec.rb → cli/runner_spec.rb} +133 -136
- data/spec/lib/nightcrawler_swift/command_spec.rb +17 -32
- data/spec/lib/nightcrawler_swift/commands/delete_spec.rb +8 -29
- data/spec/lib/nightcrawler_swift/commands/download_spec.rb +8 -29
- data/spec/lib/nightcrawler_swift/commands/list_spec.rb +14 -44
- data/spec/lib/nightcrawler_swift/commands/upload_spec.rb +1 -8
- data/spec/lib/nightcrawler_swift/connection_spec.rb +26 -9
- data/spec/lib/nightcrawler_swift/gateway_spec.rb +139 -0
- data/spec/lib/nightcrawler_swift_spec.rb +15 -2
- data/spec/spec_helper.rb +3 -0
- metadata +31 -4
@@ -0,0 +1,135 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "nightcrawler_swift/cli"
|
3
|
+
|
4
|
+
describe NightcrawlerSwift::CLI::OptParser do
|
5
|
+
|
6
|
+
let :runner do
|
7
|
+
instance_double "Runner", options: OpenStruct.new(bucket: nil, config_file: nil, default_config_file: true)
|
8
|
+
end
|
9
|
+
|
10
|
+
let :config_dir do
|
11
|
+
File.expand_path(File.join(File.dirname(__FILE__), "../../../fixtures"))
|
12
|
+
end
|
13
|
+
|
14
|
+
subject do
|
15
|
+
NightcrawlerSwift::CLI::OptParser.new runner
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "options" do
|
19
|
+
|
20
|
+
["-v", "--version"].each do |switch|
|
21
|
+
context switch do
|
22
|
+
it "prints the version number" do
|
23
|
+
allow(runner).to receive(:argv).and_return([switch])
|
24
|
+
expect(runner).to receive(:log).with(NightcrawlerSwift::VERSION)
|
25
|
+
expect { subject.parse! }.to raise_error SystemExit
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
["-h", "--help"].each do |switch|
|
31
|
+
context switch do
|
32
|
+
it "prints the help" do
|
33
|
+
allow(runner).to receive(:argv).and_return([switch])
|
34
|
+
expect(runner).to receive(:log).with(subject.help)
|
35
|
+
expect { subject.parse! }.to raise_error SystemExit
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
["-c PATH", "--config=PATH"].each do |switch|
|
41
|
+
context switch do
|
42
|
+
let :config_file do
|
43
|
+
File.join(config_dir, "#{NightcrawlerSwift::CLI::CONFIG_FILE}-test")
|
44
|
+
end
|
45
|
+
|
46
|
+
let :command do
|
47
|
+
switch.gsub(/PATH/, config_file)
|
48
|
+
end
|
49
|
+
|
50
|
+
before do
|
51
|
+
File.open(config_file, "w") {|f| f.write("test")}
|
52
|
+
end
|
53
|
+
|
54
|
+
after do
|
55
|
+
File.delete(config_file) if File.exist?(config_file)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "configures the config_file" do
|
59
|
+
allow(runner).to receive(:log)
|
60
|
+
allow(runner).to receive(:argv).and_return([command])
|
61
|
+
subject.parse!
|
62
|
+
expect(runner.options.config_file).to eql config_file
|
63
|
+
expect(runner.options.default_config_file).to eql false
|
64
|
+
end
|
65
|
+
|
66
|
+
context "when the config file does not exist" do
|
67
|
+
let :invalid_filename do
|
68
|
+
"invalid-file"
|
69
|
+
end
|
70
|
+
|
71
|
+
let :invalid_filepath do
|
72
|
+
File.expand_path(File.join(File.dirname(__FILE__), "../../../../", invalid_filename))
|
73
|
+
end
|
74
|
+
|
75
|
+
let :command do
|
76
|
+
switch.gsub(/PATH/, invalid_filename)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "prints the error and exit with a failure" do
|
80
|
+
expect(runner).to receive(:argv).and_return([command])
|
81
|
+
expect(runner).to receive(:log).with("Error: No such file or directory - #{invalid_filepath}")
|
82
|
+
exited = false
|
83
|
+
|
84
|
+
begin
|
85
|
+
subject.parse!
|
86
|
+
rescue SystemExit => e
|
87
|
+
exited = true
|
88
|
+
expect(e.status).to eql 1
|
89
|
+
ensure
|
90
|
+
expect(exited).to eql true
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
["-b NAME", "--bucket=NAME"].each do |switch|
|
98
|
+
context switch do
|
99
|
+
let :bucket_name do
|
100
|
+
"rogue"
|
101
|
+
end
|
102
|
+
|
103
|
+
let :command do
|
104
|
+
switch.gsub(/NAME/, bucket_name)
|
105
|
+
end
|
106
|
+
|
107
|
+
it "configures the bucket name" do
|
108
|
+
allow(runner).to receive(:argv).and_return([command])
|
109
|
+
allow(runner).to receive(:log)
|
110
|
+
subject.parse!
|
111
|
+
expect(runner.options.bucket).to eql bucket_name
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe "#parse!" do
|
118
|
+
before do
|
119
|
+
allow(runner).to receive(:argv).and_return([])
|
120
|
+
end
|
121
|
+
|
122
|
+
it "calls method 'parse!' in OptionParser with runner argv" do
|
123
|
+
expect(subject.parser).to receive(:parse!).with(runner.argv)
|
124
|
+
subject.parse!
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
describe "#help" do
|
129
|
+
it "calls method 'help' in OptionParser" do
|
130
|
+
expect(subject.parser).to receive(:help)
|
131
|
+
subject.help
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
require "nightcrawler_swift/cli"
|
3
3
|
|
4
|
-
describe NightcrawlerSwift::CLI do
|
4
|
+
describe NightcrawlerSwift::CLI::Runner do
|
5
5
|
|
6
6
|
let :config_dir do
|
7
|
-
File.expand_path(File.join(File.dirname(__FILE__), "
|
7
|
+
File.expand_path(File.join(File.dirname(__FILE__), "../../../fixtures"))
|
8
8
|
end
|
9
9
|
|
10
10
|
let :config_file do
|
@@ -16,7 +16,15 @@ describe NightcrawlerSwift::CLI do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
let :connection_success_json do
|
19
|
-
JSON.parse File.read(File.join(
|
19
|
+
JSON.parse File.read(File.join(config_dir, "auth_success.json"))
|
20
|
+
end
|
21
|
+
|
22
|
+
let :formatter do
|
23
|
+
NightcrawlerSwift::CLI::Formatters::Basic.new(subject)
|
24
|
+
end
|
25
|
+
|
26
|
+
let :filepath do
|
27
|
+
"testfile.txt"
|
20
28
|
end
|
21
29
|
|
22
30
|
let :opts do
|
@@ -30,11 +38,12 @@ describe NightcrawlerSwift::CLI do
|
|
30
38
|
end
|
31
39
|
|
32
40
|
subject do
|
33
|
-
NightcrawlerSwift::CLI.new argv.dup
|
41
|
+
NightcrawlerSwift::CLI::Runner.new argv.dup
|
34
42
|
end
|
35
43
|
|
36
44
|
before do
|
37
|
-
allow(
|
45
|
+
allow(Dir).to receive(:home).and_return(config_dir)
|
46
|
+
allow(NightcrawlerSwift::CLI::Formatters::Basic).to receive(:new).and_return(formatter)
|
38
47
|
end
|
39
48
|
|
40
49
|
after do
|
@@ -61,66 +70,6 @@ describe NightcrawlerSwift::CLI do
|
|
61
70
|
end
|
62
71
|
end
|
63
72
|
|
64
|
-
shared_examples "CLI with parsed parameters" do
|
65
|
-
context "--version or -v" do
|
66
|
-
it "prints the version number" do
|
67
|
-
subject.argv << "-v"
|
68
|
-
expect(subject).to receive(:log).with(NightcrawlerSwift::VERSION)
|
69
|
-
expect { subject.run }.to raise_error SystemExit
|
70
|
-
|
71
|
-
expect(subject).to receive(:log).with(NightcrawlerSwift::VERSION)
|
72
|
-
subject.argv = (argv << "--version")
|
73
|
-
expect { subject.run }.to raise_error SystemExit
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
context "--help or -h" do
|
78
|
-
before do
|
79
|
-
subject.send :configure_default_options
|
80
|
-
subject.send :configure_opt_parser
|
81
|
-
|
82
|
-
allow(subject).to receive(:configure_default_options)
|
83
|
-
allow(subject).to receive(:configure_opt_parser)
|
84
|
-
end
|
85
|
-
|
86
|
-
it "prints the help" do
|
87
|
-
subject.argv << "-h"
|
88
|
-
expect(subject).to receive(:log).with(subject.opt_parser.help)
|
89
|
-
expect { subject.run }.to raise_error SystemExit
|
90
|
-
|
91
|
-
expect(subject).to receive(:log).with(subject.opt_parser.help)
|
92
|
-
subject.argv = (argv << "--help")
|
93
|
-
expect { subject.run }.to raise_error SystemExit
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
context "--config or -c" do
|
98
|
-
let :config_file do
|
99
|
-
File.join(config_dir, "#{NightcrawlerSwift::CLI::CONFIG_FILE}-test")
|
100
|
-
end
|
101
|
-
|
102
|
-
before do
|
103
|
-
allow(subject).to receive(:execute_command)
|
104
|
-
allow(subject).to receive(:log)
|
105
|
-
File.open(config_file, "w") {|f| f.write("test")}
|
106
|
-
end
|
107
|
-
|
108
|
-
after do
|
109
|
-
File.delete(config_file) if File.exist?(config_file)
|
110
|
-
end
|
111
|
-
|
112
|
-
it "configures the config_file" do
|
113
|
-
subject.argv << "-c #{config_file}"
|
114
|
-
subject.run
|
115
|
-
expect(subject.options.config_file).to eql config_file
|
116
|
-
|
117
|
-
subject.argv = (argv << "--config=#{config_file}")
|
118
|
-
subject.run
|
119
|
-
expect(subject.options.config_file).to eql config_file
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
73
|
shared_examples "CLI that creates a sample config file" do
|
125
74
|
before do
|
126
75
|
allow(subject).to receive(:execute_command)
|
@@ -131,7 +80,7 @@ describe NightcrawlerSwift::CLI do
|
|
131
80
|
expect(File.exist?(config_file)).to eql false
|
132
81
|
expect { subject.run }.to raise_error SystemExit
|
133
82
|
expect(File.exist?(config_file)).to eql true
|
134
|
-
expect(File.read(config_file)).to eql
|
83
|
+
expect(File.read(config_file)).to eql NightcrawlerSwift::CLI.sample_rcfile
|
135
84
|
end
|
136
85
|
|
137
86
|
it "flags as not configured" do
|
@@ -146,7 +95,7 @@ describe NightcrawlerSwift::CLI do
|
|
146
95
|
end
|
147
96
|
|
148
97
|
before do
|
149
|
-
allow(
|
98
|
+
allow(formatter).to receive(command_method)
|
150
99
|
allow(NightcrawlerSwift).to receive(:connection).and_return(connection)
|
151
100
|
File.open(config_file, "w") {|f| f.write(opts.to_json)}
|
152
101
|
end
|
@@ -167,6 +116,21 @@ describe NightcrawlerSwift::CLI do
|
|
167
116
|
end
|
168
117
|
end
|
169
118
|
|
119
|
+
context "with a custom bucket name" do
|
120
|
+
let(:bucket_name) { "rogue" }
|
121
|
+
|
122
|
+
before do
|
123
|
+
subject.send :configure_default_options
|
124
|
+
expect(subject.options.bucket).to be_nil
|
125
|
+
end
|
126
|
+
|
127
|
+
it "overrides the default name" do
|
128
|
+
allow(subject).to receive(:parse_parameters) { subject.options.bucket = bucket_name }
|
129
|
+
subject.run
|
130
|
+
expect(NightcrawlerSwift.options.bucket).to eql bucket_name
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
170
134
|
it "writes the auth_response into cache file" do
|
171
135
|
expect(File.exist?(cache_file)).to eql false
|
172
136
|
expect(connection).to receive(:auth_response).and_return(OpenStruct.new(connection_success_json))
|
@@ -174,120 +138,153 @@ describe NightcrawlerSwift::CLI do
|
|
174
138
|
expect(File.exist?(cache_file)).to eql true
|
175
139
|
expect(File.read(cache_file)).to eql connection_success_json.to_json
|
176
140
|
end
|
141
|
+
|
142
|
+
context "when rescue NightcrawlerSwift::Exceptions::BaseError" do
|
143
|
+
let(:message) { "error" }
|
144
|
+
|
145
|
+
before do
|
146
|
+
NightcrawlerSwift.logger = Logger.new(StringIO.new)
|
147
|
+
end
|
148
|
+
|
149
|
+
it "prints the error and exit with failure" do
|
150
|
+
expect(subject).to receive(:connect_and_execute).and_raise(NightcrawlerSwift::Exceptions::BaseError.new(message))
|
151
|
+
exited = false
|
152
|
+
|
153
|
+
begin
|
154
|
+
subject.run
|
155
|
+
rescue SystemExit => e
|
156
|
+
exited = true
|
157
|
+
expect(e.status).to eql 1
|
158
|
+
ensure
|
159
|
+
expect(exited).to eql true
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
context "when rescue Errno::ENOENT" do
|
165
|
+
before do
|
166
|
+
NightcrawlerSwift.logger = Logger.new(StringIO.new)
|
167
|
+
end
|
168
|
+
|
169
|
+
it "prints the error and exit with failure" do
|
170
|
+
expect(subject).to receive(:connect_and_execute).and_raise(Errno::ENOENT.new)
|
171
|
+
exited = false
|
172
|
+
|
173
|
+
begin
|
174
|
+
subject.run
|
175
|
+
rescue SystemExit => e
|
176
|
+
exited = true
|
177
|
+
expect(e.status).to eql 1
|
178
|
+
ensure
|
179
|
+
expect(exited).to eql true
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
177
183
|
end
|
178
184
|
|
179
185
|
describe "command list" do
|
180
186
|
let(:argv) { ["list"] }
|
181
187
|
let(:command) { NightcrawlerSwift::List.new }
|
182
188
|
let(:command_method) { :command_list }
|
183
|
-
let :result do
|
184
|
-
[{
|
185
|
-
"hash"=>"c9df50d4a29542f8b6d426a50c72b3de",
|
186
|
-
"last_modified"=>"2014-08-27T19:35:46.053560",
|
187
|
-
"bytes"=>4994,
|
188
|
-
"name"=>"assets/file.png",
|
189
|
-
"content_type"=>"image/png"
|
190
|
-
}]
|
191
|
-
end
|
192
189
|
|
193
190
|
it_behaves_like "CLI with default options"
|
194
|
-
it_behaves_like "CLI with parsed parameters"
|
195
191
|
it_behaves_like "CLI that creates a sample config file"
|
196
192
|
it_behaves_like "CLI that uses the configured command"
|
197
|
-
|
198
|
-
context "when executing the command" do
|
199
|
-
before do
|
200
|
-
File.open(config_file, "w") {|f| f.write(opts.to_json)}
|
201
|
-
end
|
202
|
-
|
203
|
-
it "lists all files in the bucket/container configured" do
|
204
|
-
expect(NightcrawlerSwift::List).to receive(:new).and_return(command)
|
205
|
-
expect(command).to receive(:execute).and_return(result)
|
206
|
-
expect(subject).to receive(:log).with(result.first["name"])
|
207
|
-
subject.run
|
208
|
-
end
|
209
|
-
end
|
210
193
|
end
|
211
194
|
|
212
195
|
describe "command download" do
|
213
|
-
let(:filepath) { "testfile.txt" }
|
214
196
|
let(:argv) { ["download", filepath] }
|
215
197
|
let(:command) { NightcrawlerSwift::Download.new }
|
216
198
|
let(:command_method) { :command_download }
|
217
199
|
|
218
200
|
it_behaves_like "CLI with default options"
|
219
|
-
it_behaves_like "CLI with parsed parameters"
|
220
201
|
it_behaves_like "CLI that creates a sample config file"
|
221
202
|
it_behaves_like "CLI that uses the configured command"
|
222
|
-
|
223
|
-
context "when executing the command" do
|
224
|
-
before do
|
225
|
-
File.open(config_file, "w") {|f| f.write(opts.to_json)}
|
226
|
-
end
|
227
|
-
|
228
|
-
it "downloads the file" do
|
229
|
-
expect(NightcrawlerSwift::Download).to receive(:new).and_return(command)
|
230
|
-
expect(command).to receive(:execute).with(filepath).and_return("test-content")
|
231
|
-
expect(subject).to receive(:log).with("test-content")
|
232
|
-
subject.run
|
233
|
-
end
|
234
|
-
end
|
235
203
|
end
|
236
204
|
|
237
205
|
describe "command upload" do
|
238
|
-
let(:
|
239
|
-
let(:
|
240
|
-
let(:argv) { ["upload", realpath, swiftpath] }
|
206
|
+
let(:realpath) { File.join(config_dir, filepath) }
|
207
|
+
let(:argv) { ["upload", realpath, filepath] }
|
241
208
|
let(:command) { NightcrawlerSwift::Upload.new }
|
242
209
|
let(:command_method) { :command_upload }
|
243
210
|
|
244
211
|
it_behaves_like "CLI with default options"
|
245
|
-
it_behaves_like "CLI with parsed parameters"
|
246
212
|
it_behaves_like "CLI that creates a sample config file"
|
247
213
|
it_behaves_like "CLI that uses the configured command"
|
248
|
-
|
249
|
-
context "when executing the command" do
|
250
|
-
before do
|
251
|
-
File.open(config_file, "w") {|f| f.write(opts.to_json)}
|
252
|
-
File.open(realpath, "w") {|f| f.write("test") }
|
253
|
-
end
|
254
|
-
|
255
|
-
after do
|
256
|
-
File.delete(realpath) if File.exist?(realpath)
|
257
|
-
end
|
258
|
-
|
259
|
-
it "uploads the file" do
|
260
|
-
expect(NightcrawlerSwift::Upload).to receive(:new).and_return(command)
|
261
|
-
expect(command).to receive(:execute).with(swiftpath, instance_of(File)).and_return(true)
|
262
|
-
expect(subject).to receive(:log).with("success")
|
263
|
-
subject.run
|
264
|
-
end
|
265
|
-
end
|
266
214
|
end
|
267
215
|
|
268
216
|
describe "command delete" do
|
269
|
-
let(:filepath) { "testfile.txt" }
|
270
217
|
let(:argv) { ["delete", filepath] }
|
271
218
|
let(:command) { NightcrawlerSwift::Delete.new }
|
272
219
|
let(:command_method) { :command_delete }
|
273
220
|
|
274
221
|
it_behaves_like "CLI with default options"
|
275
|
-
it_behaves_like "CLI with parsed parameters"
|
276
222
|
it_behaves_like "CLI that creates a sample config file"
|
277
223
|
it_behaves_like "CLI that uses the configured command"
|
224
|
+
end
|
225
|
+
|
226
|
+
describe "command delete" do
|
227
|
+
let(:argv) { ["url-for", filepath] }
|
228
|
+
let(:command) { NightcrawlerSwift::CLI::UrlFor.new }
|
229
|
+
let(:command_method) { :command_url_for }
|
230
|
+
|
231
|
+
it_behaves_like "CLI with default options"
|
232
|
+
it_behaves_like "CLI that creates a sample config file"
|
233
|
+
it_behaves_like "CLI that uses the configured command"
|
234
|
+
end
|
235
|
+
|
236
|
+
describe "validation of commands" do
|
237
|
+
context "when no command is provided" do
|
238
|
+
let(:argv) { [] }
|
278
239
|
|
279
|
-
context "when executing the command" do
|
280
240
|
before do
|
281
|
-
|
241
|
+
subject.send :configure_default_options
|
242
|
+
subject.send :configure_opt_parser
|
282
243
|
end
|
283
244
|
|
284
|
-
it "
|
285
|
-
|
286
|
-
expect(
|
287
|
-
|
288
|
-
|
245
|
+
it "prints the help and exit with success" do
|
246
|
+
exited = false
|
247
|
+
expect(subject).to receive(:log).with(subject.opt_parser.help)
|
248
|
+
begin
|
249
|
+
subject.run
|
250
|
+
rescue SystemExit => e
|
251
|
+
exited = true
|
252
|
+
expect(e.status).to eql 0
|
253
|
+
ensure
|
254
|
+
expect(exited).to eql true
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
context "when the command does not exist" do
|
260
|
+
let(:argv) { ["wrong"] }
|
261
|
+
|
262
|
+
it "prints the error and exit with failure" do
|
263
|
+
exited = false
|
264
|
+
expect(subject).to receive(:log).with("Error: Unknown command 'wrong'")
|
265
|
+
begin
|
266
|
+
subject.run
|
267
|
+
rescue SystemExit => e
|
268
|
+
exited = true
|
269
|
+
expect(e.status).to eql 1
|
270
|
+
ensure
|
271
|
+
expect(exited).to eql true
|
272
|
+
end
|
289
273
|
end
|
290
274
|
end
|
291
275
|
end
|
292
276
|
|
277
|
+
describe "#log" do
|
278
|
+
let(:argv) { [] }
|
279
|
+
|
280
|
+
before do
|
281
|
+
NightcrawlerSwift.logger = Logger.new(StringIO.new)
|
282
|
+
end
|
283
|
+
|
284
|
+
it "uses NightcrawlerSwift.logger" do
|
285
|
+
expect(NightcrawlerSwift).to receive(:logger).and_call_original
|
286
|
+
subject.log "stuff"
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
293
290
|
end
|
@@ -17,21 +17,14 @@ describe NightcrawlerSwift::Command do
|
|
17
17
|
let(:connection) { NightcrawlerSwift::Connection.new }
|
18
18
|
let(:restclient) { double(:restclient, put: response, get: response, delete: response) }
|
19
19
|
let(:response) { double(:response) }
|
20
|
-
let(:url) { "http://url
|
20
|
+
let(:url) { "http://url-com" }
|
21
21
|
let(:token) { "token" }
|
22
22
|
let(:expires_at) { (DateTime.now + 60).to_time }
|
23
23
|
|
24
|
-
shared_examples "
|
25
|
-
it "
|
26
|
-
NightcrawlerSwift.
|
24
|
+
shared_examples "command with configured gateway" do
|
25
|
+
it "creates a new gateway with the url" do
|
26
|
+
expect(NightcrawlerSwift::Gateway).to receive(:new).with(url).and_call_original
|
27
27
|
execute_http
|
28
|
-
expect(RestClient::Resource).to have_received(:new).with(url, hash_including(verify_ssl: true))
|
29
|
-
end
|
30
|
-
|
31
|
-
it "uses the configured timeout" do
|
32
|
-
NightcrawlerSwift.configure timeout: 10
|
33
|
-
execute_http
|
34
|
-
expect(RestClient::Resource).to have_received(:new).with(url, hash_including(timeout: 10))
|
35
28
|
end
|
36
29
|
end
|
37
30
|
|
@@ -66,67 +59,59 @@ describe NightcrawlerSwift::Command do
|
|
66
59
|
end
|
67
60
|
|
68
61
|
describe "#get" do
|
69
|
-
let :
|
62
|
+
let :execute_http do
|
70
63
|
subject.send :get, url, headers: {content_type: :json}
|
71
64
|
end
|
72
65
|
|
73
|
-
|
74
|
-
it_behaves_like "resource configured with NightcrawlerSwift.options"
|
66
|
+
it_behaves_like "command with configured gateway"
|
75
67
|
|
76
68
|
it "sends headers with token" do
|
77
|
-
|
69
|
+
execute_http
|
78
70
|
expect(restclient).to have_received(:get).with(content_type: :json, "X-Storage-Token" => token)
|
79
71
|
end
|
80
72
|
|
81
73
|
it "returns RestClient response" do
|
82
|
-
expect(
|
74
|
+
expect(execute_http).to eql(response)
|
83
75
|
end
|
84
76
|
end
|
85
77
|
|
86
78
|
describe "#delete" do
|
87
|
-
let :
|
79
|
+
let :execute_http do
|
88
80
|
subject.send :delete, url, headers: {content_type: :json}
|
89
81
|
end
|
90
82
|
|
91
|
-
|
92
|
-
it_behaves_like "resource configured with NightcrawlerSwift.options"
|
83
|
+
it_behaves_like "command with configured gateway"
|
93
84
|
|
94
85
|
it "sends headers with token" do
|
95
|
-
|
86
|
+
execute_http
|
96
87
|
expect(restclient).to have_received(:delete).with(content_type: :json, "X-Storage-Token" => token)
|
97
88
|
end
|
98
89
|
|
99
90
|
it "returns RestClient response" do
|
100
|
-
expect(
|
91
|
+
expect(execute_http).to eql(response)
|
101
92
|
end
|
102
93
|
end
|
103
94
|
|
104
95
|
describe "#put" do
|
105
|
-
let :
|
96
|
+
let :execute_http do
|
106
97
|
subject.send(:put, url, body: 'content', headers: {a: 1})
|
107
98
|
end
|
108
99
|
|
109
|
-
|
110
|
-
it_behaves_like "resource configured with NightcrawlerSwift.options"
|
100
|
+
it_behaves_like "command with configured gateway"
|
111
101
|
|
112
102
|
it "returns RestClient response" do
|
113
|
-
expect(
|
103
|
+
expect(execute_http).to eql(response)
|
114
104
|
end
|
115
105
|
|
116
106
|
it "sends body" do
|
117
|
-
|
107
|
+
execute_http
|
118
108
|
expect(restclient).to have_received(:put).with('content', anything)
|
119
109
|
end
|
120
110
|
|
121
111
|
it "sends headers with token" do
|
122
|
-
|
112
|
+
execute_http
|
123
113
|
expect(restclient).to have_received(:put).with(anything, {a: 1, "X-Storage-Token" => token})
|
124
114
|
end
|
125
|
-
|
126
|
-
it "uses url to initialize RestClient" do
|
127
|
-
put
|
128
|
-
expect(RestClient::Resource).to have_received(:new).with(url, verify_ssl: false, timeout: nil)
|
129
|
-
end
|
130
115
|
end
|
131
116
|
|
132
117
|
end
|
@@ -23,15 +23,15 @@ describe NightcrawlerSwift::Delete do
|
|
23
23
|
subject.execute "file_path"
|
24
24
|
end
|
25
25
|
|
26
|
-
before do
|
27
|
-
allow(subject).to receive(:delete).and_return(response)
|
28
|
-
end
|
29
|
-
|
30
26
|
context "success" do
|
31
27
|
let :response do
|
32
28
|
double(:response, code: 200)
|
33
29
|
end
|
34
30
|
|
31
|
+
before do
|
32
|
+
allow(subject).to receive(:delete).and_return(response)
|
33
|
+
end
|
34
|
+
|
35
35
|
it "deletes using upload url" do
|
36
36
|
execute
|
37
37
|
expect(subject).to have_received(:delete).with("server-url/file_path", headers: {accept: :json})
|
@@ -42,31 +42,10 @@ describe NightcrawlerSwift::Delete do
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
context "when the
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
before do
|
51
|
-
allow(subject).to receive(:delete).and_raise(RestClient::ResourceNotFound.new(response))
|
52
|
-
end
|
53
|
-
|
54
|
-
it "raises NightcrawlerSwift::Exceptions::NotFoundError" do
|
55
|
-
expect { execute }.to raise_error NightcrawlerSwift::Exceptions::NotFoundError
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
context "when another error happens" do
|
60
|
-
let :response do
|
61
|
-
double(:response, code: 500)
|
62
|
-
end
|
63
|
-
|
64
|
-
before do
|
65
|
-
allow(subject).to receive(:delete).and_raise(RuntimeError.new(response))
|
66
|
-
end
|
67
|
-
|
68
|
-
it "raises NightcrawlerSwift::Exceptions::ConnectionError" do
|
69
|
-
expect { execute }.to raise_error NightcrawlerSwift::Exceptions::ConnectionError
|
45
|
+
context "when the path was not informed" do
|
46
|
+
it "raises NightcrawlerSwift::Exceptions::ValidationError" do
|
47
|
+
expect { subject.execute nil }.to raise_error NightcrawlerSwift::Exceptions::ValidationError
|
48
|
+
expect { subject.execute "" }.to raise_error NightcrawlerSwift::Exceptions::ValidationError
|
70
49
|
end
|
71
50
|
end
|
72
51
|
end
|