tugboat 0.2.0 → 1.0.0
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 +5 -4
- data/CHANGELOG.md +325 -102
- data/CHANGELOG_old.md +150 -0
- data/Gemfile +6 -0
- data/README.md +12 -6
- data/Rakefile +7 -3
- data/features/step_definitions/steps.rb +0 -0
- data/features/support/env.rb +9 -0
- data/features/vagrant-adam/config_current_directory.feature +27 -0
- data/lib/tugboat/cli.rb +31 -3
- data/lib/tugboat/config.rb +13 -5
- data/lib/tugboat/middleware.rb +8 -0
- data/lib/tugboat/middleware/ask_for_credentials.rb +5 -4
- data/lib/tugboat/middleware/authentication_middleware.rb +2 -2
- data/lib/tugboat/middleware/config.rb +29 -0
- data/lib/tugboat/middleware/custom_logger.rb +2 -2
- data/lib/tugboat/middleware/find_droplet.rb +4 -0
- data/lib/tugboat/middleware/info_droplet.rb +5 -0
- data/lib/tugboat/middleware/inject_client.rb +1 -1
- data/lib/tugboat/middleware/list_droplets.rb +5 -1
- data/lib/tugboat/middleware/list_regions.rb +2 -2
- data/lib/tugboat/middleware/ssh_droplet.rb +17 -2
- data/lib/tugboat/version.rb +1 -1
- data/spec/cli/add_key_spec.rb +9 -9
- data/spec/cli/authorize_cli_spec.rb +76 -52
- data/spec/cli/create_cli_spec.rb +39 -4
- data/spec/cli/debug_cli_spec.rb +44 -0
- data/spec/cli/destroy_cli_spec.rb +30 -11
- data/spec/cli/destroy_image_cli_spec.rb +11 -11
- data/spec/cli/droplets_cli_spec.rb +6 -6
- data/spec/cli/halt_cli_spec.rb +9 -9
- data/spec/cli/images_cli_spec.rb +6 -6
- data/spec/cli/info_cli_spec.rb +42 -7
- data/spec/cli/info_image_cli_spec.rb +6 -6
- data/spec/cli/keys_cli_spec.rb +1 -1
- data/spec/cli/password_reset_cli_spec.rb +8 -8
- data/spec/cli/rebuild_cli_spec.rb +49 -49
- data/spec/cli/regions_cli_spec.rb +4 -4
- data/spec/cli/resize_cli_spec.rb +8 -8
- data/spec/cli/restart_cli_spec.rb +8 -8
- data/spec/cli/sizes_cli_spec.rb +1 -1
- data/spec/cli/snapshot_cli_spec.rb +7 -7
- data/spec/cli/ssh_cli_spec.rb +4 -4
- data/spec/cli/start_cli_spec.rb +7 -7
- data/spec/cli/verify_cli_spec.rb +10 -2
- data/spec/cli/wait_cli_spec.rb +6 -6
- data/spec/fixtures/500.html +68 -0
- data/spec/fixtures/show_droplet.json +1 -0
- data/spec/fixtures/show_droplet_fuzzy.json +13 -0
- data/spec/fixtures/show_droplet_inactive.json +1 -0
- data/spec/fixtures/show_droplets.json +2 -0
- data/spec/fixtures/show_droplets_fuzzy.json +35 -0
- data/spec/fixtures/show_droplets_inactive.json +2 -0
- data/spec/fixtures/show_regions.json +9 -6
- data/spec/middleware/base_spec.rb +1 -1
- data/spec/middleware/check_credentials_spec.rb +1 -1
- data/spec/middleware/inject_client_spec.rb +29 -0
- data/spec/middleware/inject_configuration_spec.rb +1 -1
- data/spec/middleware/ssh_droplet_spec.rb +30 -7
- data/spec/shared/environment.rb +1 -0
- data/spec/spec_helper.rb +11 -4
- data/tugboat.gemspec +9 -7
- metadata +64 -33
@@ -6,12 +6,12 @@ describe Tugboat::CLI do
|
|
6
6
|
describe "destroy" do
|
7
7
|
it "destroys a droplet with a fuzzy name" do
|
8
8
|
stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
|
9
|
-
to_return(:status => 200, :body => fixture("show_droplets"))
|
9
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
|
10
10
|
|
11
11
|
stub_request(:delete, "https://api.digitalocean.com/droplets/100823/destroy?api_key=#{api_key}&client_id=#{client_key}").
|
12
|
-
to_return(:status => 200, :body => fixture("show_droplet"))
|
12
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
13
13
|
|
14
|
-
$stdin.
|
14
|
+
expect($stdin).to receive(:gets).and_return("y")
|
15
15
|
|
16
16
|
@cli.destroy("foo")
|
17
17
|
|
@@ -25,12 +25,12 @@ Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 100823 (foo)\nWarni
|
|
25
25
|
|
26
26
|
it "destroys a droplet with an id" do
|
27
27
|
stub_request(:get, "https://api.digitalocean.com/droplets/#{droplet_id}?api_key=#{api_key}&client_id=#{client_key}").
|
28
|
-
to_return(:status => 200, :body => fixture("show_droplet"))
|
28
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
29
29
|
|
30
30
|
stub_request(:delete, "https://api.digitalocean.com/droplets/100823/destroy?api_key=#{api_key}&client_id=#{client_key}").
|
31
|
-
to_return(:status => 200, :body => fixture("show_droplet"))
|
31
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
32
32
|
|
33
|
-
$stdin.
|
33
|
+
expect($stdin).to receive(:gets).and_return("y")
|
34
34
|
|
35
35
|
@cli.options = @cli.options.merge(:id => droplet_id)
|
36
36
|
@cli.destroy
|
@@ -46,12 +46,12 @@ Droplet id provided. Finding Droplet...done\e[0m, 100823 (foo)\nWarning! Potenti
|
|
46
46
|
|
47
47
|
it "destroys a droplet with a name" do
|
48
48
|
stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
|
49
|
-
to_return(:status => 200, :body => fixture("show_droplets"))
|
49
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
|
50
50
|
|
51
51
|
stub_request(:delete, "https://api.digitalocean.com/droplets/100823/destroy?api_key=#{api_key}&client_id=#{client_key}").
|
52
|
-
to_return(:status => 200, :body => fixture("show_droplet"))
|
52
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
53
53
|
|
54
|
-
$stdin.
|
54
|
+
expect($stdin).to receive(:gets).and_return("y")
|
55
55
|
|
56
56
|
@cli.options = @cli.options.merge(:name => droplet_name)
|
57
57
|
@cli.destroy
|
@@ -67,10 +67,10 @@ Droplet name provided. Finding droplet ID...done\e[0m, 100823 (foo)\nWarning! Po
|
|
67
67
|
|
68
68
|
it "destroys a droplet with confirm flag set" do
|
69
69
|
stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
|
70
|
-
to_return(:status => 200, :body => fixture("show_droplets"))
|
70
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
|
71
71
|
|
72
72
|
stub_request(:delete, "https://api.digitalocean.com/droplets/100823/destroy?api_key=#{api_key}&client_id=#{client_key}").
|
73
|
-
to_return(:status => 200, :body => fixture("show_droplet"))
|
73
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
74
74
|
|
75
75
|
@cli.options = @cli.options.merge(:name => droplet_name)
|
76
76
|
@cli.options = @cli.options.merge(:confirm => true)
|
@@ -84,6 +84,25 @@ Queuing destroy for 100823 (foo)...done
|
|
84
84
|
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
85
85
|
expect(a_request(:delete, "https://api.digitalocean.com/droplets/100823/destroy?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
86
86
|
end
|
87
|
+
|
88
|
+
it "does not destroy a droplet if no is chosen" do
|
89
|
+
stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
|
90
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
|
91
|
+
|
92
|
+
stub_request(:delete, "https://api.digitalocean.com/droplets/100823/destroy?api_key=#{api_key}&client_id=#{client_key}").
|
93
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
94
|
+
|
95
|
+
$stdin.should_receive(:gets).and_return("n")
|
96
|
+
|
97
|
+
expect {@cli.destroy("foo")}.to raise_error(SystemExit)
|
98
|
+
|
99
|
+
expect($stdout.string).to eq <<-eos
|
100
|
+
Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 100823 (foo)\nWarning! Potentially destructive action. Please confirm [y/n]: Aborted due to user request.
|
101
|
+
eos
|
102
|
+
|
103
|
+
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
104
|
+
expect(a_request(:delete, "https://api.digitalocean.com/droplets/100823/destroy?api_key=#{api_key}&client_id=#{client_key}")).to_not have_been_made
|
105
|
+
end
|
87
106
|
end
|
88
107
|
|
89
108
|
end
|
@@ -6,12 +6,12 @@ describe Tugboat::CLI do
|
|
6
6
|
describe "destroy image" do
|
7
7
|
it "destroys an image with a fuzzy name" do
|
8
8
|
stub_request(:get, "https://api.digitalocean.com/images?api_key=#{api_key}&client_id=#{client_key}").
|
9
|
-
to_return(:status => 200, :body => fixture("show_images"))
|
9
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images"))
|
10
10
|
|
11
11
|
stub_request(:get, "https://api.digitalocean.com/images/478/destroy?api_key=#{api_key}&client_id=#{client_key}").
|
12
|
-
to_return(:status => 200, :body => fixture("show_image"))
|
12
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_image"))
|
13
13
|
|
14
|
-
$stdin.
|
14
|
+
expect($stdin).to receive(:gets).and_return("y")
|
15
15
|
|
16
16
|
@cli.destroy_image("NLP Final")
|
17
17
|
|
@@ -25,12 +25,12 @@ Image fuzzy name provided. Finding image ID...done\e[0m, 478 (NLP Final)\nWarnin
|
|
25
25
|
|
26
26
|
it "destroys an image with an id" do
|
27
27
|
stub_request(:get, "https://api.digitalocean.com/images/478?api_key=#{api_key}&client_id=#{client_key}").
|
28
|
-
to_return(:status => 200, :body => fixture("show_image"))
|
28
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_image"))
|
29
29
|
|
30
30
|
stub_request(:get, "https://api.digitalocean.com/images/478/destroy?api_key=#{api_key}&client_id=#{client_key}").
|
31
|
-
to_return(:status => 200, :body => fixture("show_image"))
|
31
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_image"))
|
32
32
|
|
33
|
-
$stdin.
|
33
|
+
expect($stdin).to receive(:gets).and_return("y")
|
34
34
|
|
35
35
|
@cli.options = @cli.options.merge(:id => 478)
|
36
36
|
@cli.destroy_image
|
@@ -46,12 +46,12 @@ Image id provided. Finding Image...done\e[0m, 478 (NLP Final)\nWarning! Potentia
|
|
46
46
|
|
47
47
|
it "destroys an image with a name" do
|
48
48
|
stub_request(:get, "https://api.digitalocean.com/images?api_key=#{api_key}&client_id=#{client_key}").
|
49
|
-
to_return(:status => 200, :body => fixture("show_images"))
|
49
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images"))
|
50
50
|
|
51
51
|
stub_request(:get, "https://api.digitalocean.com/images/478/destroy?api_key=#{api_key}&client_id=#{client_key}").
|
52
|
-
to_return(:status => 200, :body => fixture("show_image"))
|
52
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_image"))
|
53
53
|
|
54
|
-
$stdin.
|
54
|
+
expect($stdin).to receive(:gets).and_return("y")
|
55
55
|
|
56
56
|
@cli.options = @cli.options.merge(:name => "NLP Final")
|
57
57
|
@cli.destroy_image
|
@@ -67,10 +67,10 @@ Image name provided. Finding image ID...done\e[0m, 478 (NLP Final)\nWarning! Pot
|
|
67
67
|
|
68
68
|
it "destroys an image with confirm flag set" do
|
69
69
|
stub_request(:get, "https://api.digitalocean.com/images?api_key=#{api_key}&client_id=#{client_key}").
|
70
|
-
to_return(:status => 200, :body => fixture("show_images"))
|
70
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images"))
|
71
71
|
|
72
72
|
stub_request(:get, "https://api.digitalocean.com/images/478/destroy?api_key=#{api_key}&client_id=#{client_key}").
|
73
|
-
to_return(:status => 200, :body => fixture("show_image"))
|
73
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_image"))
|
74
74
|
|
75
75
|
@cli.options = @cli.options.merge(:name => "NLP Final")
|
76
76
|
@cli.options = @cli.options.merge(:confirm => true)
|
@@ -6,22 +6,22 @@ describe Tugboat::CLI do
|
|
6
6
|
describe "droplets" do
|
7
7
|
it "shows a list when droplets exist" do
|
8
8
|
stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
|
9
|
-
to_return(:status => 200, :body => fixture("show_droplets"))
|
9
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
|
10
10
|
|
11
11
|
@cli.droplets
|
12
12
|
|
13
13
|
expect($stdout.string).to eq <<-eos
|
14
|
-
test222 (ip: 33.33.33.10, status: \e[32mactive\e[0m, region: 1, id: 100823)
|
14
|
+
test222 (ip: 33.33.33.10, privateip: 10.20.30.1, status: \e[32mactive\e[0m, region: 1, id: 100823)
|
15
15
|
test223 (ip: 33.33.33.10, status: \e[32mactive\e[0m, region: 1, id: 100823)
|
16
|
-
foo (ip: 33.33.33.10, status: \e[32mactive\e[0m, region: 1, id: 100823)
|
16
|
+
foo (ip: 33.33.33.10, privateip: 10.20.30.40, status: \e[32mactive\e[0m, region: 1, id: 100823)
|
17
17
|
eos
|
18
18
|
|
19
19
|
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
20
20
|
end
|
21
21
|
|
22
|
-
it "returns an error when no droplets exist" do
|
22
|
+
it "returns an error message when no droplets exist" do
|
23
23
|
stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
|
24
|
-
to_return(:status => 200, :body => fixture("show_droplets_empty"))
|
24
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets_empty"))
|
25
25
|
|
26
26
|
@cli.droplets
|
27
27
|
|
@@ -34,7 +34,7 @@ Try creating one with \e[32m`tugboat create`\e[0m
|
|
34
34
|
end
|
35
35
|
it "shows no output when --quiet is set" do
|
36
36
|
stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
|
37
|
-
to_return(:status => 200, :body => fixture("show_droplets_empty"))
|
37
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets_empty"))
|
38
38
|
|
39
39
|
@cli.options = @cli.options.merge(:quiet => true)
|
40
40
|
@cli.droplets
|
data/spec/cli/halt_cli_spec.rb
CHANGED
@@ -6,10 +6,10 @@ describe Tugboat::CLI do
|
|
6
6
|
describe "halt" do
|
7
7
|
it "halts a droplet with a fuzzy name" do
|
8
8
|
stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
|
9
|
-
to_return(:status => 200, :body => fixture("show_droplets"))
|
9
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
|
10
10
|
|
11
11
|
stub_request(:put, "https://api.digitalocean.com/droplets/100823/shutdown?api_key=#{api_key}&client_id=#{client_key}").
|
12
|
-
to_return(:status => 200, :body => fixture("show_droplet"))
|
12
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
13
13
|
|
14
14
|
@cli.halt("foo")
|
15
15
|
|
@@ -24,9 +24,9 @@ Queuing shutdown for 100823 (foo)...done
|
|
24
24
|
|
25
25
|
it "halts a droplet hard when the hard option is used" do
|
26
26
|
stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
|
27
|
-
to_return(:status => 200, :body => fixture("show_droplets"))
|
27
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
|
28
28
|
stub_request(:put, "https://api.digitalocean.com/droplets/100823/power_off?api_key=#{api_key}&client_id=#{client_key}").
|
29
|
-
to_return(:status => 200, :body => fixture("show_droplet"))
|
29
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
30
30
|
|
31
31
|
@cli.options = @cli.options.merge(:hard => true)
|
32
32
|
@cli.halt("foo")
|
@@ -42,10 +42,10 @@ Queuing hard shutdown for 100823 (foo)...done
|
|
42
42
|
|
43
43
|
it "halts a droplet with an id" do
|
44
44
|
stub_request(:get, "https://api.digitalocean.com/droplets/#{droplet_id}?api_key=#{api_key}&client_id=#{client_key}").
|
45
|
-
to_return(:status => 200, :body => fixture("show_droplet"))
|
45
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
46
46
|
|
47
47
|
stub_request(:put, "https://api.digitalocean.com/droplets/100823/shutdown?api_key=#{api_key}&client_id=#{client_key}").
|
48
|
-
to_return(:status => 200, :body => fixture("show_droplet"))
|
48
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
49
49
|
|
50
50
|
@cli.options = @cli.options.merge(:id => droplet_id)
|
51
51
|
@cli.halt
|
@@ -62,10 +62,10 @@ Queuing shutdown for 100823 (foo)...done
|
|
62
62
|
|
63
63
|
it "halts a droplet with a name" do
|
64
64
|
stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
|
65
|
-
to_return(:status => 200, :body => fixture("show_droplets"))
|
65
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
|
66
66
|
|
67
67
|
stub_request(:put, "https://api.digitalocean.com/droplets/100823/shutdown?api_key=#{api_key}&client_id=#{client_key}").
|
68
|
-
to_return(:status => 200, :body => fixture("show_droplet"))
|
68
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
69
69
|
|
70
70
|
@cli.options = @cli.options.merge(:name => droplet_name)
|
71
71
|
@cli.halt
|
@@ -82,7 +82,7 @@ Queuing shutdown for 100823 (foo)...done
|
|
82
82
|
|
83
83
|
it "does not halt a droplet that is off" do
|
84
84
|
stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
|
85
|
-
to_return(:status => 200, :body => fixture("show_droplets_inactive"))
|
85
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets_inactive"))
|
86
86
|
|
87
87
|
@cli.options = @cli.options.merge(:name => droplet_name)
|
88
88
|
expect {@cli.halt}.to raise_error(SystemExit)
|
data/spec/cli/images_cli_spec.rb
CHANGED
@@ -6,7 +6,7 @@ describe Tugboat::CLI do
|
|
6
6
|
describe "images" do
|
7
7
|
it "shows a list" do
|
8
8
|
stub_request(:get, "https://api.digitalocean.com/images?api_key=#{api_key}&client_id=#{client_key}&filter=my_images").
|
9
|
-
to_return(:status => 200, :body => fixture("show_images"))
|
9
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images"))
|
10
10
|
|
11
11
|
@cli.images
|
12
12
|
|
@@ -21,7 +21,7 @@ NLP Final (id: 478, distro: Ubuntu)
|
|
21
21
|
|
22
22
|
it "acknowledges when my images are empty" do
|
23
23
|
stub_request(:get, "https://api.digitalocean.com/images?api_key=#{api_key}&client_id=#{client_key}&filter=my_images").
|
24
|
-
to_return(:status => 200, :body => fixture("show_images_empty"))
|
24
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images_empty"))
|
25
25
|
|
26
26
|
@cli.images
|
27
27
|
|
@@ -35,10 +35,10 @@ No images found
|
|
35
35
|
|
36
36
|
it "acknowledges when my images are empty and also shows a global list" do
|
37
37
|
stub_request(:get, "https://api.digitalocean.com/images?api_key=#{api_key}&client_id=#{client_key}&filter=my_images").
|
38
|
-
to_return(:status => 200, :body => fixture("show_images_empty"))
|
38
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images_empty"))
|
39
39
|
|
40
40
|
stub_request(:get, "https://api.digitalocean.com/images?api_key=#{api_key}&client_id=#{client_key}&filter=global").
|
41
|
-
to_return(:status => 200, :body => fixture("show_images_global"))
|
41
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images_global"))
|
42
42
|
|
43
43
|
@cli.options = @cli.options.merge(:global => true)
|
44
44
|
@cli.images
|
@@ -59,10 +59,10 @@ Global Final (id: 479, distro: Ubuntu)
|
|
59
59
|
|
60
60
|
it "shows a global list" do
|
61
61
|
stub_request(:get, "https://api.digitalocean.com/images?api_key=#{api_key}&client_id=#{client_key}&filter=my_images").
|
62
|
-
to_return(:status => 200, :body => fixture("show_images"))
|
62
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images"))
|
63
63
|
|
64
64
|
stub_request(:get, "https://api.digitalocean.com/images?api_key=#{api_key}&client_id=#{client_key}&filter=global").
|
65
|
-
to_return(:status => 200, :body => fixture("show_images_global"))
|
65
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images_global"))
|
66
66
|
|
67
67
|
@cli.options = @cli.options.merge(:global => true)
|
68
68
|
@cli.images
|
data/spec/cli/info_cli_spec.rb
CHANGED
@@ -6,10 +6,10 @@ describe Tugboat::CLI do
|
|
6
6
|
describe "show" do
|
7
7
|
it "shows a droplet with a fuzzy name" do
|
8
8
|
stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
|
9
|
-
to_return(:status => 200, :body => fixture("show_droplets"))
|
9
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
|
10
10
|
|
11
11
|
stub_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}").
|
12
|
-
to_return(:status => 200, :body => fixture("show_droplet"))
|
12
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
13
13
|
|
14
14
|
@cli.info("foo")
|
15
15
|
|
@@ -20,6 +20,7 @@ Name: foo
|
|
20
20
|
ID: 100823
|
21
21
|
Status: \e[32mactive\e[0m
|
22
22
|
IP: 33.33.33.10
|
23
|
+
Private IP: 10.20.30.40
|
23
24
|
Region ID: 1
|
24
25
|
Image ID: 420
|
25
26
|
Size ID: 33
|
@@ -32,10 +33,10 @@ Backups Active: false
|
|
32
33
|
|
33
34
|
it "shows a droplet with an id" do
|
34
35
|
stub_request(:get, "https://api.digitalocean.com/droplets/#{droplet_id}?api_key=#{api_key}&client_id=#{client_key}").
|
35
|
-
to_return(:status => 200, :body => fixture("show_droplet"))
|
36
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
36
37
|
|
37
38
|
stub_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}").
|
38
|
-
to_return(:status => 200, :body => fixture("show_droplet"))
|
39
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
39
40
|
|
40
41
|
@cli.options = @cli.options.merge(:id => droplet_id)
|
41
42
|
@cli.info
|
@@ -47,6 +48,7 @@ Name: foo
|
|
47
48
|
ID: 100823
|
48
49
|
Status: \e[32mactive\e[0m
|
49
50
|
IP: 33.33.33.10
|
51
|
+
Private IP: 10.20.30.40
|
50
52
|
Region ID: 1
|
51
53
|
Image ID: 420
|
52
54
|
Size ID: 33
|
@@ -59,10 +61,10 @@ Backups Active: false
|
|
59
61
|
|
60
62
|
it "shows a droplet with a name" do
|
61
63
|
stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
|
62
|
-
to_return(:status => 200, :body => fixture("show_droplets"))
|
64
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
|
63
65
|
|
64
66
|
stub_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}").
|
65
|
-
to_return(:status => 200, :body => fixture("show_droplet"))
|
67
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
66
68
|
|
67
69
|
@cli.options = @cli.options.merge(:name => droplet_name)
|
68
70
|
@cli.info
|
@@ -74,6 +76,7 @@ Name: foo
|
|
74
76
|
ID: 100823
|
75
77
|
Status: \e[32mactive\e[0m
|
76
78
|
IP: 33.33.33.10
|
79
|
+
Private IP: 10.20.30.40
|
77
80
|
Region ID: 1
|
78
81
|
Image ID: 420
|
79
82
|
Size ID: 33
|
@@ -84,6 +87,38 @@ Backups Active: false
|
|
84
87
|
expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
|
85
88
|
end
|
86
89
|
|
90
|
+
it "allows choice of multiple droplets" do
|
91
|
+
stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
|
92
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets_fuzzy"))
|
93
|
+
|
94
|
+
stub_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}").
|
95
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet_fuzzy"))
|
96
|
+
|
97
|
+
$stdin.should_receive(:gets).and_return('0')
|
98
|
+
|
99
|
+
@cli.info("test")
|
100
|
+
|
101
|
+
expect($stdout.string).to eq <<-eos
|
102
|
+
Droplet fuzzy name provided. Finding droplet ID...Multiple droplets found.
|
103
|
+
|
104
|
+
0) test222 (100823)
|
105
|
+
1) test223 (100824)
|
106
|
+
|
107
|
+
Please choose a droplet: ["0", "1"]
|
108
|
+
Name: test222
|
109
|
+
ID: 100823
|
110
|
+
Status: \e[32mactive\e[0m
|
111
|
+
IP: 33.33.33.10
|
112
|
+
Region ID: 1
|
113
|
+
Image ID: 420
|
114
|
+
Size ID: 33
|
115
|
+
Backups Active: false
|
116
|
+
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
|
+
end
|
121
|
+
|
87
122
|
end
|
88
123
|
|
89
|
-
end
|
124
|
+
end
|
@@ -6,10 +6,10 @@ describe Tugboat::CLI do
|
|
6
6
|
describe "show" do
|
7
7
|
it "shows an image with a fuzzy name" do
|
8
8
|
stub_request(:get, "https://api.digitalocean.com/images?api_key=#{api_key}&client_id=#{client_key}").
|
9
|
-
to_return(:status => 200, :body => fixture("show_images"))
|
9
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images"))
|
10
10
|
|
11
11
|
stub_request(:get, "https://api.digitalocean.com/images/478?api_key=#{api_key}&client_id=#{client_key}").
|
12
|
-
to_return(:status => 200, :body => fixture("show_image"))
|
12
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_image"))
|
13
13
|
|
14
14
|
@cli.info_image("NLP Final")
|
15
15
|
|
@@ -23,10 +23,10 @@ Image fuzzy name provided. Finding image ID...done\e[0m, 478 (NLP Final)\n\nName
|
|
23
23
|
|
24
24
|
it "shows an image with an id" do
|
25
25
|
stub_request(:get, "https://api.digitalocean.com/images/478?api_key=#{api_key}&client_id=#{client_key}").
|
26
|
-
to_return(:status => 200, :body => fixture("show_image"))
|
26
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_image"))
|
27
27
|
|
28
28
|
stub_request(:get, "https://api.digitalocean.com/images/478?api_key=#{api_key}&client_id=#{client_key}").
|
29
|
-
to_return(:status => 200, :body => fixture("show_image"))
|
29
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_image"))
|
30
30
|
|
31
31
|
@cli.options = @cli.options.merge(:id => 478)
|
32
32
|
@cli.info_image
|
@@ -40,10 +40,10 @@ Image id provided. Finding Image...done\e[0m, 478 (NLP Final)\n\nName:
|
|
40
40
|
|
41
41
|
it "shows an image with a name" do
|
42
42
|
stub_request(:get, "https://api.digitalocean.com/images?api_key=#{api_key}&client_id=#{client_key}").
|
43
|
-
to_return(:status => 200, :body => fixture("show_images"))
|
43
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images"))
|
44
44
|
|
45
45
|
stub_request(:get, "https://api.digitalocean.com/images/478?api_key=#{api_key}&client_id=#{client_key}").
|
46
|
-
to_return(:status => 200, :body => fixture("show_image"))
|
46
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_image"))
|
47
47
|
|
48
48
|
@cli.options = @cli.options.merge(:name => "NLP Final")
|
49
49
|
@cli.info_image
|
data/spec/cli/keys_cli_spec.rb
CHANGED
@@ -6,7 +6,7 @@ describe Tugboat::CLI do
|
|
6
6
|
describe "keys" do
|
7
7
|
it "shows a list" do
|
8
8
|
stub_request(:get, "https://api.digitalocean.com/ssh_keys?api_key=#{api_key}&client_id=#{client_key}").
|
9
|
-
to_return(:status => 200, :body => fixture("show_keys"))
|
9
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_keys"))
|
10
10
|
|
11
11
|
@cli.keys
|
12
12
|
|
@@ -6,9 +6,9 @@ describe Tugboat::CLI do
|
|
6
6
|
describe "passwordreset" do
|
7
7
|
it "resets the root password given a fuzzy name" do
|
8
8
|
stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
|
9
|
-
to_return(:status => 200, :body => fixture("show_droplets"))
|
9
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
|
10
10
|
stub_request(:post, "https://api.digitalocean.com/droplets/100823/password_reset?api_key=#{api_key}&client_id=#{client_key}").
|
11
|
-
to_return(:status => 200, :body => '{"status":"OK","event_id":456}')
|
11
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => '{"status":"OK","event_id":456}')
|
12
12
|
|
13
13
|
@cli.password_reset("foo")
|
14
14
|
|
@@ -26,9 +26,9 @@ Your new root password will be emailed to you
|
|
26
26
|
|
27
27
|
it "resets the root password given an id" do
|
28
28
|
stub_request(:get, "https://api.digitalocean.com/droplets/100823?api_key=#{api_key}&client_id=#{client_key}").
|
29
|
-
to_return(:status => 200, :body => fixture("show_droplet"))
|
29
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
|
30
30
|
stub_request(:post, "https://api.digitalocean.com/droplets/100823/password_reset?api_key=#{api_key}&client_id=#{client_key}").
|
31
|
-
to_return(:status => 200, :body => '{"status":"OK","event_id":456}')
|
31
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => '{"status":"OK","event_id":456}')
|
32
32
|
|
33
33
|
@cli.options = @cli.options.merge(:id => 100823)
|
34
34
|
@cli.password_reset
|
@@ -47,9 +47,9 @@ Your new root password will be emailed to you
|
|
47
47
|
|
48
48
|
it "resets the root password given a name" do
|
49
49
|
stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
|
50
|
-
to_return(:status => 200, :body => fixture("show_droplets"))
|
50
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
|
51
51
|
stub_request(:post, "https://api.digitalocean.com/droplets/100823/password_reset?api_key=#{api_key}&client_id=#{client_key}").
|
52
|
-
to_return(:status => 200, :body => '{"status":"OK","event_id":456}')
|
52
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => '{"status":"OK","event_id":456}')
|
53
53
|
|
54
54
|
@cli.options = @cli.options.merge(:name => "foo")
|
55
55
|
@cli.password_reset
|
@@ -68,9 +68,9 @@ Your new root password will be emailed to you
|
|
68
68
|
|
69
69
|
it "raises SystemExit when a request fails" do
|
70
70
|
stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
|
71
|
-
to_return(:status => 200, :body => fixture("show_droplets"))
|
71
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
|
72
72
|
stub_request(:post, "https://api.digitalocean.com/droplets/100823/password_reset?api_key=#{api_key}&client_id=#{client_key}").
|
73
|
-
to_return(:status => 500, :body => '{"status":"ERROR","message":"Some error"}')
|
73
|
+
to_return(:headers => {'Content-Type' => 'application/json'}, :status => 500, :body => '{"status":"ERROR","message":"Some error"}')
|
74
74
|
|
75
75
|
expect { @cli.password_reset("foo") }.to raise_error(SystemExit)
|
76
76
|
|