tugboat 1.3.1 → 2.0.0.RC1
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/.travis.yml +1 -1
- data/CHANGELOG.md +12 -8
- data/lib/tugboat/cli.rb +8 -7
- data/lib/tugboat/config.rb +8 -12
- data/lib/tugboat/middleware/add_key.rb +9 -6
- data/lib/tugboat/middleware/ask_for_credentials.rb +7 -8
- data/lib/tugboat/middleware/check_configuration.rb +1 -1
- data/lib/tugboat/middleware/check_credentials.rb +4 -2
- data/lib/tugboat/middleware/config.rb +3 -4
- data/lib/tugboat/middleware/create_droplet.rb +32 -26
- data/lib/tugboat/middleware/destroy_droplet.rb +6 -6
- data/lib/tugboat/middleware/destroy_image.rb +6 -6
- data/lib/tugboat/middleware/find_droplet.rb +20 -16
- data/lib/tugboat/middleware/find_image.rb +17 -10
- data/lib/tugboat/middleware/halt_droplet.rb +8 -8
- data/lib/tugboat/middleware/info_droplet.rb +38 -25
- data/lib/tugboat/middleware/info_image.rb +5 -5
- data/lib/tugboat/middleware/inject_client.rb +3 -9
- data/lib/tugboat/middleware/list_droplets.rb +6 -4
- data/lib/tugboat/middleware/list_images.rb +28 -23
- data/lib/tugboat/middleware/list_regions.rb +3 -3
- data/lib/tugboat/middleware/list_sizes.rb +3 -3
- data/lib/tugboat/middleware/list_ssh_keys.rb +5 -4
- data/lib/tugboat/middleware/password_reset.rb +7 -7
- data/lib/tugboat/middleware/rebuild_droplet.rb +8 -8
- data/lib/tugboat/middleware/resize_droplet.rb +7 -7
- data/lib/tugboat/middleware/restart_droplet.rb +8 -8
- data/lib/tugboat/middleware/snapshot_droplet.rb +6 -6
- data/lib/tugboat/middleware/ssh_droplet.rb +3 -1
- data/lib/tugboat/middleware/start_droplet.rb +6 -6
- data/lib/tugboat/middleware/wait_for_state.rb +6 -6
- data/lib/tugboat/version.rb +1 -1
- data/spec/cli/add_key_spec.rb +16 -9
- data/spec/cli/authorize_cli_spec.rb +24 -29
- data/spec/cli/config_cli_spec.rb +57 -0
- data/spec/cli/create_cli_spec.rb +18 -28
- data/spec/cli/debug_cli_spec.rb +8 -14
- data/spec/cli/destroy_cli_spec.rb +39 -50
- data/spec/cli/destroy_image_cli_spec.rb +33 -39
- data/spec/cli/droplets_cli_spec.rb +15 -12
- data/spec/cli/halt_cli_spec.rb +50 -46
- data/spec/cli/images_cli_spec.rb +134 -58
- data/spec/cli/info_cli_spec.rb +139 -139
- data/spec/cli/info_image_cli_spec.rb +113 -26
- data/spec/cli/keys_cli_spec.rb +7 -5
- data/spec/cli/password_reset_cli_spec.rb +46 -44
- data/spec/cli/rebuild_cli_spec.rb +187 -101
- data/spec/cli/regions_cli_spec.rb +13 -6
- data/spec/cli/resize_cli_spec.rb +51 -48
- data/spec/cli/restart_cli_spec.rb +41 -39
- data/spec/cli/sizes_cli_spec.rb +13 -8
- data/spec/cli/snapshot_cli_spec.rb +36 -37
- data/spec/cli/ssh_cli_spec.rb +7 -15
- data/spec/cli/start_cli_spec.rb +39 -35
- data/spec/cli/verify_cli_spec.rb +20 -12
- data/spec/cli/wait_cli_spec.rb +43 -27
- data/spec/config_spec.rb +19 -25
- data/spec/fixtures/create_droplet.json +44 -0
- data/spec/fixtures/create_ssh_key.json +4 -4
- data/spec/fixtures/create_ssh_key_from_file.json +8 -0
- data/spec/fixtures/droplet_start_response.json +13 -0
- data/spec/fixtures/not_found.json +4 -0
- data/spec/fixtures/password_reset_response.json +13 -0
- data/spec/fixtures/power_cycle_response.json +13 -0
- data/spec/fixtures/resize_droplet.json +13 -0
- data/spec/fixtures/restart_response.json +13 -0
- data/spec/fixtures/show_coreos_image.json +23 -0
- data/spec/fixtures/show_droplet.json +90 -11
- data/spec/fixtures/show_droplet_inactive.json +90 -11
- data/spec/fixtures/show_droplets.json +249 -30
- data/spec/fixtures/show_droplets_empty.json +5 -2
- data/spec/fixtures/show_image.json +14 -7
- data/spec/fixtures/show_images.json +1075 -13
- data/spec/fixtures/show_images_global.json +25 -16
- data/spec/fixtures/show_keys.json +15 -7
- data/spec/fixtures/show_redmine_image.json +24 -0
- data/spec/fixtures/show_regions.json +181 -12
- data/spec/fixtures/show_sizes.json +178 -9
- data/spec/fixtures/shutdown_response.json +13 -0
- data/spec/fixtures/snapshot_response.json +13 -0
- data/spec/fixtures/ubuntu_image_9801951.json +24 -0
- data/spec/middleware/check_credentials_spec.rb +4 -3
- data/spec/middleware/inject_client_spec.rb +2 -2
- data/spec/shared/environment.rb +6 -7
- data/spec/spec_helper.rb +1 -1
- data/tugboat.gemspec +39 -19
- metadata +50 -14
- data/spec/fixtures/show_droplet_fuzzy.json +0 -13
- data/spec/fixtures/show_droplets_fuzzy.json +0 -35
- data/spec/fixtures/show_droplets_inactive.json +0 -37
data/spec/cli/info_cli_spec.rb
CHANGED
@@ -3,248 +3,248 @@ require 'spec_helper'
|
|
3
3
|
describe Tugboat::CLI do
|
4
4
|
include_context "spec"
|
5
5
|
|
6
|
-
describe "
|
6
|
+
describe "info" do
|
7
7
|
it "shows a droplet with a fuzzy name" do
|
8
|
-
stub_request(:get, "https://api.digitalocean.com/droplets?
|
9
|
-
|
8
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
|
9
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
10
|
+
to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
|
10
11
|
|
11
|
-
stub_request(:get, "https://api.digitalocean.com/droplets/
|
12
|
-
|
12
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets/6918990?per_page=200").
|
13
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
14
|
+
to_return(:status => 200, :body => fixture('show_droplet'), :headers => {})
|
13
15
|
|
14
|
-
@cli.info("
|
16
|
+
@cli.info("example.com")
|
15
17
|
|
16
18
|
expect($stdout.string).to eq <<-eos
|
17
|
-
Droplet fuzzy name provided. Finding droplet ID...done\e[0m,
|
19
|
+
Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
18
20
|
|
19
|
-
Name:
|
20
|
-
ID:
|
21
|
+
Name: example.com
|
22
|
+
ID: 6918990
|
21
23
|
Status: \e[32mactive\e[0m
|
22
|
-
|
23
|
-
|
24
|
-
Region
|
25
|
-
Image
|
26
|
-
Size
|
24
|
+
IP4: 104.131.186.241
|
25
|
+
IP6: 2604:A880:0800:0010:0000:0000:031D:2001
|
26
|
+
Region: New York 3 - nyc3
|
27
|
+
Image: 6918990 - 14.04 x64
|
28
|
+
Size: 512MB
|
27
29
|
Backups Active: false
|
28
30
|
eos
|
29
31
|
|
30
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
31
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
32
32
|
end
|
33
33
|
|
34
34
|
it "shows a droplet with an id" do
|
35
|
-
stub_request(:get, "https://api.digitalocean.com/droplets
|
36
|
-
|
35
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets/6918990?per_page=200").
|
36
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
37
|
+
to_return(:status => 200, :body => fixture('show_droplet'), :headers => {})
|
37
38
|
|
38
|
-
|
39
|
-
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
40
|
-
|
41
|
-
@cli.options = @cli.options.merge(:id => droplet_id)
|
39
|
+
@cli.options = @cli.options.merge(:id => 6918990)
|
42
40
|
@cli.info
|
43
41
|
|
44
42
|
expect($stdout.string).to eq <<-eos
|
45
|
-
Droplet id provided. Finding Droplet...done\e[0m,
|
43
|
+
Droplet id provided. Finding Droplet...done\e[0m, 6918990 (example.com)
|
46
44
|
|
47
|
-
Name:
|
48
|
-
ID:
|
45
|
+
Name: example.com
|
46
|
+
ID: 6918990
|
49
47
|
Status: \e[32mactive\e[0m
|
50
|
-
|
51
|
-
|
52
|
-
Region
|
53
|
-
Image
|
54
|
-
Size
|
48
|
+
IP4: 104.131.186.241
|
49
|
+
IP6: 2604:A880:0800:0010:0000:0000:031D:2001
|
50
|
+
Region: New York 3 - nyc3
|
51
|
+
Image: 6918990 - 14.04 x64
|
52
|
+
Size: 512MB
|
55
53
|
Backups Active: false
|
56
54
|
eos
|
57
|
-
|
58
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
59
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/#{droplet_id}?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
60
55
|
end
|
61
56
|
|
62
57
|
it "shows a droplet with a name" do
|
63
|
-
stub_request(:get, "https://api.digitalocean.com/droplets?
|
64
|
-
|
58
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
|
59
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
60
|
+
to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
|
65
61
|
|
66
|
-
stub_request(:get, "https://api.digitalocean.com/droplets/
|
67
|
-
|
62
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets/6918990?per_page=200").
|
63
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
64
|
+
to_return(:status => 200, :body => fixture('show_droplet'), :headers => {})
|
68
65
|
|
69
|
-
@cli.options = @cli.options.merge(:name =>
|
66
|
+
@cli.options = @cli.options.merge(:name => "example.com")
|
70
67
|
@cli.info
|
71
68
|
|
72
69
|
expect($stdout.string).to eq <<-eos
|
73
|
-
Droplet name provided. Finding droplet ID...done\e[0m,
|
70
|
+
Droplet name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
74
71
|
|
75
|
-
Name:
|
76
|
-
ID:
|
72
|
+
Name: example.com
|
73
|
+
ID: 6918990
|
77
74
|
Status: \e[32mactive\e[0m
|
78
|
-
|
79
|
-
|
80
|
-
Region
|
81
|
-
Image
|
82
|
-
Size
|
75
|
+
IP4: 104.131.186.241
|
76
|
+
IP6: 2604:A880:0800:0010:0000:0000:031D:2001
|
77
|
+
Region: New York 3 - nyc3
|
78
|
+
Image: 6918990 - 14.04 x64
|
79
|
+
Size: 512MB
|
83
80
|
Backups Active: false
|
84
81
|
eos
|
85
|
-
|
86
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
87
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
88
82
|
end
|
89
83
|
|
90
84
|
it "allows choice of multiple droplets" do
|
91
|
-
stub_request(:get, "https://api.digitalocean.com/droplets?
|
92
|
-
|
85
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
|
86
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
87
|
+
to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
|
93
88
|
|
94
|
-
stub_request(:get, "https://api.digitalocean.com/droplets/
|
95
|
-
|
89
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets/6918990?per_page=200").
|
90
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
91
|
+
to_return(:status => 200, :body => fixture('show_droplet'), :headers => {})
|
96
92
|
|
97
93
|
$stdin.should_receive(:gets).and_return('0')
|
98
94
|
|
99
|
-
@cli.info("
|
95
|
+
@cli.info("examp")
|
100
96
|
|
101
97
|
expect($stdout.string).to eq <<-eos
|
102
98
|
Droplet fuzzy name provided. Finding droplet ID...Multiple droplets found.
|
103
99
|
|
104
|
-
0)
|
105
|
-
1)
|
100
|
+
0) example.com (6918990)
|
101
|
+
1) example2.com (3164956)
|
102
|
+
2) example3.com (3164444)
|
106
103
|
|
107
|
-
Please choose a droplet: ["0", "1"]\x20
|
108
|
-
Name:
|
109
|
-
ID:
|
104
|
+
Please choose a droplet: ["0", "1", "2"]\x20
|
105
|
+
Name: example.com
|
106
|
+
ID: 6918990
|
110
107
|
Status: \e[32mactive\e[0m
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
108
|
+
IP4: 104.131.186.241
|
109
|
+
IP6: 2604:A880:0800:0010:0000:0000:031D:2001
|
110
|
+
Region: New York 3 - nyc3
|
111
|
+
Image: 6918990 - 14.04 x64
|
112
|
+
Size: 512MB
|
115
113
|
Backups Active: false
|
116
114
|
eos
|
117
|
-
|
118
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
119
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
120
115
|
end
|
121
116
|
|
122
117
|
end
|
123
118
|
|
124
119
|
it "shows a droplet with an id under porcelain mode" do
|
125
|
-
stub_request(:get, "https://api.digitalocean.com/droplets
|
126
|
-
|
127
|
-
|
128
|
-
stub_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}").
|
129
|
-
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
120
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets/6918990?per_page=200").
|
121
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
122
|
+
to_return(:status => 200, :body => fixture('show_droplet'), :headers => {})
|
130
123
|
|
131
|
-
@cli.options = @cli.options.merge(:id =>
|
124
|
+
@cli.options = @cli.options.merge(:id => '6918990', :porcelain => true)
|
132
125
|
@cli.info
|
133
126
|
|
134
127
|
expect($stdout.string).to eq <<-eos
|
135
|
-
name
|
136
|
-
id
|
128
|
+
name example.com
|
129
|
+
id 6918990
|
137
130
|
status active
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
131
|
+
ip4 104.131.186.241
|
132
|
+
ip6 2604:A880:0800:0010:0000:0000:031D:2001
|
133
|
+
region nyc3
|
134
|
+
Image 6918990
|
135
|
+
size 512mb
|
143
136
|
backups_active false
|
144
137
|
eos
|
145
|
-
|
146
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
147
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/#{droplet_id}?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
148
138
|
end
|
149
139
|
|
150
140
|
it "shows a droplet with a name under porcelain mode" do
|
151
|
-
stub_request(:get, "https://api.digitalocean.com/droplets?
|
152
|
-
|
141
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
|
142
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
143
|
+
to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
|
153
144
|
|
154
|
-
stub_request(:get, "https://api.digitalocean.com/droplets/
|
155
|
-
|
145
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets/6918990?per_page=200").
|
146
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
147
|
+
to_return(:status => 200, :body => fixture('show_droplet'), :headers => {})
|
156
148
|
|
157
|
-
@cli.options = @cli.options.merge(:name =>
|
149
|
+
@cli.options = @cli.options.merge(:name => 'example.com', :porcelain => true)
|
158
150
|
@cli.info
|
159
151
|
|
160
152
|
expect($stdout.string).to eq <<-eos
|
161
|
-
name
|
162
|
-
id
|
153
|
+
name example.com
|
154
|
+
id 6918990
|
163
155
|
status active
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
156
|
+
ip4 104.131.186.241
|
157
|
+
ip6 2604:A880:0800:0010:0000:0000:031D:2001
|
158
|
+
region nyc3
|
159
|
+
Image 6918990
|
160
|
+
size 512mb
|
169
161
|
backups_active false
|
170
162
|
eos
|
171
|
-
|
172
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
173
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
174
163
|
end
|
175
164
|
|
176
165
|
it "shows a droplet attribute with an id" do
|
177
|
-
stub_request(:get, "https://api.digitalocean.com/droplets
|
178
|
-
|
179
|
-
|
180
|
-
stub_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}").
|
181
|
-
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
166
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets/6918990?per_page=200").
|
167
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
168
|
+
to_return(:status => 200, :body => fixture('show_droplet'), :headers => {})
|
182
169
|
|
183
|
-
@cli.options = @cli.options.merge(:id =>
|
170
|
+
@cli.options = @cli.options.merge(:id => '6918990', :attribute => "ip4")
|
184
171
|
@cli.info
|
185
172
|
|
186
173
|
expect($stdout.string).to eq <<-eos
|
187
|
-
Droplet id provided. Finding Droplet...done\e[0m,
|
188
|
-
|
174
|
+
Droplet id provided. Finding Droplet...done\e[0m, 6918990 (example.com)
|
175
|
+
104.131.186.241
|
189
176
|
eos
|
190
|
-
|
191
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
192
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/#{droplet_id}?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
193
177
|
end
|
194
178
|
|
195
179
|
it "shows a droplet attribute with a name" do
|
196
|
-
stub_request(:get, "https://api.digitalocean.com/droplets?
|
197
|
-
|
180
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
|
181
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
182
|
+
to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
|
198
183
|
|
199
|
-
stub_request(:get, "https://api.digitalocean.com/droplets/
|
200
|
-
|
184
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets/6918990?per_page=200").
|
185
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
186
|
+
to_return(:status => 200, :body => fixture('show_droplet'), :headers => {})
|
201
187
|
|
202
|
-
@cli.options = @cli.options.merge(:name =>
|
188
|
+
@cli.options = @cli.options.merge(:name => 'example.com', :attribute => "ip4")
|
203
189
|
@cli.info
|
204
190
|
|
205
191
|
expect($stdout.string).to eq <<-eos
|
206
|
-
Droplet name provided. Finding droplet ID...done\e[0m,
|
207
|
-
|
192
|
+
Droplet name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
193
|
+
104.131.186.241
|
208
194
|
eos
|
209
|
-
|
210
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
211
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
212
195
|
end
|
213
196
|
|
214
|
-
it "
|
215
|
-
stub_request(:get, "https://api.digitalocean.com/droplets
|
216
|
-
|
197
|
+
it "gives error if invalid attribute given" do
|
198
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets/6918990?per_page=200").
|
199
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
200
|
+
to_return(:status => 200, :body => fixture('show_droplet'), :headers => {})
|
217
201
|
|
218
|
-
|
219
|
-
|
202
|
+
@cli.options = @cli.options.merge(:id => 6918990, :porcelain => true, :attribute => "foo")
|
203
|
+
expect {@cli.info}.to raise_error(SystemExit)
|
220
204
|
|
221
|
-
|
205
|
+
expect($stdout.string).to eq <<-eos
|
206
|
+
Invalid attribute "foo"
|
207
|
+
Provide one of the following:
|
208
|
+
name
|
209
|
+
id
|
210
|
+
status
|
211
|
+
ip4
|
212
|
+
ip6
|
213
|
+
private_ip
|
214
|
+
region
|
215
|
+
Image
|
216
|
+
size
|
217
|
+
backups_active
|
218
|
+
eos
|
219
|
+
end
|
220
|
+
|
221
|
+
it "shows a droplet attribute with an id under porcelain mode" do
|
222
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets/6918990?per_page=200").
|
223
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
224
|
+
to_return(:status => 200, :body => fixture('show_droplet'), :headers => {})
|
225
|
+
|
226
|
+
@cli.options = @cli.options.merge(:id => '6918990', :porcelain => true, :attribute => "ip4")
|
222
227
|
@cli.info
|
223
228
|
|
224
229
|
expect($stdout.string).to eq <<-eos
|
225
|
-
|
230
|
+
104.131.186.241
|
226
231
|
eos
|
227
|
-
|
228
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
229
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/#{droplet_id}?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
230
232
|
end
|
231
233
|
|
232
234
|
it "shows a droplet attribute with a name under porcelain mode" do
|
233
|
-
stub_request(:get, "https://api.digitalocean.com/droplets?
|
234
|
-
|
235
|
-
|
236
|
-
stub_request(:get, "https://api.digitalocean.com/droplets/
|
237
|
-
|
238
|
-
|
239
|
-
|
235
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
|
236
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
237
|
+
to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
|
238
|
+
stub_request(:get, "https://api.digitalocean.com/v2/droplets/6918990?per_page=200").
|
239
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
240
|
+
to_return(:status => 200, :body => fixture('show_droplet'), :headers => {})
|
241
|
+
|
242
|
+
@cli.options = @cli.options.merge(:name => 'example.com', :porcelain => true, :attribute => "ip4")
|
240
243
|
@cli.info
|
241
244
|
|
242
245
|
expect($stdout.string).to eq <<-eos
|
243
|
-
|
246
|
+
104.131.186.241
|
244
247
|
eos
|
245
|
-
|
246
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
247
|
-
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
248
248
|
end
|
249
249
|
|
250
250
|
end
|
@@ -3,59 +3,146 @@ require 'spec_helper'
|
|
3
3
|
describe Tugboat::CLI do
|
4
4
|
include_context "spec"
|
5
5
|
|
6
|
-
describe "
|
6
|
+
describe "info_image" do
|
7
7
|
it "shows an image with a fuzzy name" do
|
8
|
-
stub_request(:get, "https://api.digitalocean.com/images?
|
9
|
-
|
8
|
+
stub_request(:get, "https://api.digitalocean.com/v2/images?per_page=200").
|
9
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
10
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images"))
|
10
11
|
|
11
|
-
stub_request(:get, "https://api.digitalocean.com/images/
|
12
|
-
|
12
|
+
stub_request(:get, "https://api.digitalocean.com/v2/images/12789325?per_page=200").
|
13
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
14
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_coreos_image"))
|
13
15
|
|
14
|
-
@cli.info_image("
|
16
|
+
@cli.info_image("745.1.0 (alpha)")
|
15
17
|
|
16
18
|
expect($stdout.string).to eq <<-eos
|
17
|
-
Image fuzzy name provided. Finding image ID...done\e[0m,
|
18
|
-
eos
|
19
|
+
Image fuzzy name provided. Finding image ID...done\e[0m, 12789325 (745.1.0 (alpha))
|
19
20
|
|
20
|
-
|
21
|
-
|
21
|
+
Name: 745.1.0 (alpha)
|
22
|
+
ID: 12789325
|
23
|
+
Distribution: CoreOS
|
24
|
+
eos
|
22
25
|
end
|
23
26
|
|
24
27
|
it "shows an image with an id" do
|
25
|
-
stub_request(:get, "https://api.digitalocean.com/images
|
26
|
-
|
28
|
+
stub_request(:get, "https://api.digitalocean.com/v2/images?per_page=200").
|
29
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
30
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images"))
|
27
31
|
|
28
|
-
stub_request(:get, "https://api.digitalocean.com/images/
|
29
|
-
|
32
|
+
stub_request(:get, "https://api.digitalocean.com/v2/images/12438838?per_page=200").
|
33
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
34
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_redmine_image"))
|
30
35
|
|
31
|
-
@cli.options = @cli.options.merge(:id =>
|
36
|
+
@cli.options = @cli.options.merge(:id => 12438838)
|
32
37
|
@cli.info_image
|
33
38
|
|
34
39
|
expect($stdout.string).to eq <<-eos
|
35
|
-
Image id provided. Finding Image...done\e[0m,
|
36
|
-
eos
|
40
|
+
Image id provided. Finding Image...done\e[0m, 12438838 (Redmine on 14.04)
|
37
41
|
|
38
|
-
|
42
|
+
Name: Redmine on 14.04
|
43
|
+
ID: 12438838
|
44
|
+
Distribution: Ubuntu
|
45
|
+
eos
|
39
46
|
end
|
40
47
|
|
41
48
|
it "shows an image with a name" do
|
42
|
-
stub_request(:get, "https://api.digitalocean.com/images?
|
43
|
-
|
49
|
+
stub_request(:get, "https://api.digitalocean.com/v2/images?per_page=200").
|
50
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
51
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images"))
|
44
52
|
|
45
|
-
stub_request(:get, "https://api.digitalocean.com/images/
|
46
|
-
|
53
|
+
stub_request(:get, "https://api.digitalocean.com/v2/images/12438838?per_page=200").
|
54
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
55
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_redmine_image"))
|
47
56
|
|
48
|
-
@cli.options = @cli.options.merge(:name => "
|
57
|
+
@cli.options = @cli.options.merge(:name => "Redmine on 14.04")
|
49
58
|
@cli.info_image
|
50
59
|
|
51
60
|
expect($stdout.string).to eq <<-eos
|
52
|
-
Image name provided. Finding
|
61
|
+
Image name provided. Finding Image...done\e[0m, 12438838 (Redmine on 14.04)
|
62
|
+
|
63
|
+
Name: Redmine on 14.04
|
64
|
+
ID: 12438838
|
65
|
+
Distribution: Ubuntu
|
66
|
+
eos
|
67
|
+
end
|
68
|
+
|
69
|
+
it "errors if no image with matching id is found" do
|
70
|
+
stub_request(:get, "https://api.digitalocean.com/v2/images?per_page=200").
|
71
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
72
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images"))
|
73
|
+
|
74
|
+
stub_request(:get, "https://api.digitalocean.com/v2/images/123?per_page=200").
|
75
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
76
|
+
to_return(:status => 404, :body => fixture('not_found'), :headers => {})
|
77
|
+
|
78
|
+
@cli.options = @cli.options.merge(:id => '123')
|
79
|
+
expect {@cli.info_image}.to raise_error(SystemExit)
|
80
|
+
|
81
|
+
expect($stdout.string).to eq <<-eos
|
82
|
+
Image id provided. Finding Image...Failed to find Image: The resource you were accessing could not be found.
|
83
|
+
eos
|
84
|
+
end
|
85
|
+
|
86
|
+
it "errors if no image with matching name is found" do
|
87
|
+
stub_request(:get, "https://api.digitalocean.com/v2/images?per_page=200").
|
88
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
89
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images"))
|
90
|
+
|
91
|
+
@cli.options = @cli.options.merge(:name => 'foobarbaz')
|
92
|
+
expect {@cli.info_image}.to raise_error(SystemExit)
|
93
|
+
|
94
|
+
expect($stdout.string).to eq <<-eos
|
95
|
+
Image name provided. Finding Image...error
|
96
|
+
Unable to find an image named 'foobarbaz'.
|
97
|
+
eos
|
98
|
+
end
|
99
|
+
|
100
|
+
it "errors if no image with matching fuzzy name is found" do
|
101
|
+
stub_request(:get, "https://api.digitalocean.com/v2/images?per_page=200").
|
102
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
103
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images"))
|
104
|
+
|
105
|
+
expect {@cli.info_image("foobarbaz")}.to raise_error(SystemExit)
|
106
|
+
|
107
|
+
expect($stdout.string).to eq <<-eos
|
108
|
+
Image fuzzy name provided. Finding image ID...error
|
109
|
+
Unable to find an image named 'foobarbaz'.
|
53
110
|
eos
|
111
|
+
end
|
112
|
+
|
113
|
+
it "allows choice of multiple images" do
|
114
|
+
stub_request(:get, "https://api.digitalocean.com/v2/images?per_page=200").
|
115
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
116
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images"))
|
117
|
+
|
118
|
+
stub_request(:get, "https://api.digitalocean.com/v2/images/9801951?per_page=200").
|
119
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
120
|
+
to_return(:status => 200, :body => fixture('ubuntu_image_9801951'), :headers => {})
|
121
|
+
|
122
|
+
$stdin.should_receive(:gets).and_return('0')
|
54
123
|
|
55
|
-
|
56
|
-
|
124
|
+
@cli.info_image("ubun")
|
125
|
+
|
126
|
+
expect($stdout.string).to eq <<-eos
|
127
|
+
Image fuzzy name provided. Finding image ID...Multiple images found.
|
128
|
+
|
129
|
+
0) 14.10 x32 (9801951)
|
130
|
+
1) 14.10 x64 (9801954)
|
131
|
+
2) 12.04.5 x64 (10321756)
|
132
|
+
3) 12.04.5 x32 (10321777)
|
133
|
+
4) 15.04 x64 (12658446)
|
134
|
+
5) 15.04 x32 (12660649)
|
135
|
+
6) 14.04 x32 (12790298)
|
136
|
+
7) 14.04 x64 (12790328)
|
137
|
+
|
138
|
+
Please choose a image: ["0", "1", "2", "3", "4", "5", "6", "7"]\x20
|
139
|
+
Name: 14.10 x32
|
140
|
+
ID: 9801951
|
141
|
+
Distribution: Ubuntu
|
142
|
+
eos
|
57
143
|
end
|
58
144
|
|
145
|
+
|
59
146
|
end
|
60
147
|
|
61
148
|
end
|
data/spec/cli/keys_cli_spec.rb
CHANGED
@@ -5,18 +5,20 @@ describe Tugboat::CLI do
|
|
5
5
|
|
6
6
|
describe "keys" do
|
7
7
|
it "shows a list" do
|
8
|
-
|
9
|
-
|
8
|
+
|
9
|
+
stub_request(:get, "https://api.digitalocean.com/v2/account/keys?per_page=200").
|
10
|
+
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
|
11
|
+
to_return(:status => 200, :body => fixture('show_keys'), :headers => {})
|
10
12
|
|
11
13
|
@cli.keys
|
12
14
|
|
13
15
|
expect($stdout.string).to eq <<-eos
|
14
16
|
SSH Keys:
|
15
|
-
|
16
|
-
|
17
|
+
Name: My SSH Public Key, (id: 512189), fingerprint: 3b:16:bf:e4:8b:00:8b:b8:59:8c:a9:d3:f0:19:45:fa
|
18
|
+
Name: My Other SSH Public Key, (id: 512110), fingerprint: 3b:16:bf:d4:8b:00:8b:b8:59:8c:a9:d3:f0:19:45:fa
|
17
19
|
eos
|
18
20
|
|
19
|
-
expect(a_request(:get, "https://api.digitalocean.com/
|
21
|
+
expect(a_request(:get, "https://api.digitalocean.com/v2/account/keys?per_page=200")).to have_been_made
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|