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.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/CHANGELOG.md +12 -8
  4. data/lib/tugboat/cli.rb +8 -7
  5. data/lib/tugboat/config.rb +8 -12
  6. data/lib/tugboat/middleware/add_key.rb +9 -6
  7. data/lib/tugboat/middleware/ask_for_credentials.rb +7 -8
  8. data/lib/tugboat/middleware/check_configuration.rb +1 -1
  9. data/lib/tugboat/middleware/check_credentials.rb +4 -2
  10. data/lib/tugboat/middleware/config.rb +3 -4
  11. data/lib/tugboat/middleware/create_droplet.rb +32 -26
  12. data/lib/tugboat/middleware/destroy_droplet.rb +6 -6
  13. data/lib/tugboat/middleware/destroy_image.rb +6 -6
  14. data/lib/tugboat/middleware/find_droplet.rb +20 -16
  15. data/lib/tugboat/middleware/find_image.rb +17 -10
  16. data/lib/tugboat/middleware/halt_droplet.rb +8 -8
  17. data/lib/tugboat/middleware/info_droplet.rb +38 -25
  18. data/lib/tugboat/middleware/info_image.rb +5 -5
  19. data/lib/tugboat/middleware/inject_client.rb +3 -9
  20. data/lib/tugboat/middleware/list_droplets.rb +6 -4
  21. data/lib/tugboat/middleware/list_images.rb +28 -23
  22. data/lib/tugboat/middleware/list_regions.rb +3 -3
  23. data/lib/tugboat/middleware/list_sizes.rb +3 -3
  24. data/lib/tugboat/middleware/list_ssh_keys.rb +5 -4
  25. data/lib/tugboat/middleware/password_reset.rb +7 -7
  26. data/lib/tugboat/middleware/rebuild_droplet.rb +8 -8
  27. data/lib/tugboat/middleware/resize_droplet.rb +7 -7
  28. data/lib/tugboat/middleware/restart_droplet.rb +8 -8
  29. data/lib/tugboat/middleware/snapshot_droplet.rb +6 -6
  30. data/lib/tugboat/middleware/ssh_droplet.rb +3 -1
  31. data/lib/tugboat/middleware/start_droplet.rb +6 -6
  32. data/lib/tugboat/middleware/wait_for_state.rb +6 -6
  33. data/lib/tugboat/version.rb +1 -1
  34. data/spec/cli/add_key_spec.rb +16 -9
  35. data/spec/cli/authorize_cli_spec.rb +24 -29
  36. data/spec/cli/config_cli_spec.rb +57 -0
  37. data/spec/cli/create_cli_spec.rb +18 -28
  38. data/spec/cli/debug_cli_spec.rb +8 -14
  39. data/spec/cli/destroy_cli_spec.rb +39 -50
  40. data/spec/cli/destroy_image_cli_spec.rb +33 -39
  41. data/spec/cli/droplets_cli_spec.rb +15 -12
  42. data/spec/cli/halt_cli_spec.rb +50 -46
  43. data/spec/cli/images_cli_spec.rb +134 -58
  44. data/spec/cli/info_cli_spec.rb +139 -139
  45. data/spec/cli/info_image_cli_spec.rb +113 -26
  46. data/spec/cli/keys_cli_spec.rb +7 -5
  47. data/spec/cli/password_reset_cli_spec.rb +46 -44
  48. data/spec/cli/rebuild_cli_spec.rb +187 -101
  49. data/spec/cli/regions_cli_spec.rb +13 -6
  50. data/spec/cli/resize_cli_spec.rb +51 -48
  51. data/spec/cli/restart_cli_spec.rb +41 -39
  52. data/spec/cli/sizes_cli_spec.rb +13 -8
  53. data/spec/cli/snapshot_cli_spec.rb +36 -37
  54. data/spec/cli/ssh_cli_spec.rb +7 -15
  55. data/spec/cli/start_cli_spec.rb +39 -35
  56. data/spec/cli/verify_cli_spec.rb +20 -12
  57. data/spec/cli/wait_cli_spec.rb +43 -27
  58. data/spec/config_spec.rb +19 -25
  59. data/spec/fixtures/create_droplet.json +44 -0
  60. data/spec/fixtures/create_ssh_key.json +4 -4
  61. data/spec/fixtures/create_ssh_key_from_file.json +8 -0
  62. data/spec/fixtures/droplet_start_response.json +13 -0
  63. data/spec/fixtures/not_found.json +4 -0
  64. data/spec/fixtures/password_reset_response.json +13 -0
  65. data/spec/fixtures/power_cycle_response.json +13 -0
  66. data/spec/fixtures/resize_droplet.json +13 -0
  67. data/spec/fixtures/restart_response.json +13 -0
  68. data/spec/fixtures/show_coreos_image.json +23 -0
  69. data/spec/fixtures/show_droplet.json +90 -11
  70. data/spec/fixtures/show_droplet_inactive.json +90 -11
  71. data/spec/fixtures/show_droplets.json +249 -30
  72. data/spec/fixtures/show_droplets_empty.json +5 -2
  73. data/spec/fixtures/show_image.json +14 -7
  74. data/spec/fixtures/show_images.json +1075 -13
  75. data/spec/fixtures/show_images_global.json +25 -16
  76. data/spec/fixtures/show_keys.json +15 -7
  77. data/spec/fixtures/show_redmine_image.json +24 -0
  78. data/spec/fixtures/show_regions.json +181 -12
  79. data/spec/fixtures/show_sizes.json +178 -9
  80. data/spec/fixtures/shutdown_response.json +13 -0
  81. data/spec/fixtures/snapshot_response.json +13 -0
  82. data/spec/fixtures/ubuntu_image_9801951.json +24 -0
  83. data/spec/middleware/check_credentials_spec.rb +4 -3
  84. data/spec/middleware/inject_client_spec.rb +2 -2
  85. data/spec/shared/environment.rb +6 -7
  86. data/spec/spec_helper.rb +1 -1
  87. data/tugboat.gemspec +39 -19
  88. metadata +50 -14
  89. data/spec/fixtures/show_droplet_fuzzy.json +0 -13
  90. data/spec/fixtures/show_droplets_fuzzy.json +0 -35
  91. data/spec/fixtures/show_droplets_inactive.json +0 -37
@@ -7,28 +7,28 @@ describe Tugboat::CLI do
7
7
 
8
8
  describe "authorize" do
9
9
  before do
10
- stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
11
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200)
10
+
12
11
  end
13
12
 
14
13
  it "asks the right questions and checks credentials" do
14
+ stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
15
+ 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'}).
16
+ to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
15
17
 
16
18
  expect($stdout).to receive(:print).exactly(6).times
17
- expect($stdout).to receive(:print).with("Enter your client key: ")
18
- expect($stdin).to receive(:gets).and_return(client_key)
19
- expect($stdout).to receive(:print).with("Enter your API key: ")
20
- expect($stdin).to receive(:gets).and_return(api_key)
19
+ expect($stdout).to receive(:print).with("Enter your access token: ")
20
+ expect($stdin).to receive(:gets).and_return(access_token)
21
21
  expect($stdout).to receive(:print).with("Enter your SSH key path (optional, defaults to ~/.ssh/id_rsa): ")
22
22
  expect($stdin).to receive(:gets).and_return(ssh_key_path)
23
23
  expect($stdout).to receive(:print).with("Enter your SSH user (optional, defaults to root): ")
24
24
  expect($stdin).to receive(:gets).and_return(ssh_user)
25
25
  expect($stdout).to receive(:print).with("Enter your SSH port number (optional, defaults to 22): ")
26
26
  expect($stdin).to receive(:gets).and_return(ssh_port)
27
- expect($stdout).to receive(:print).with("Enter your default region ID (optional, defaults to 8 (New York 3)): ")
27
+ expect($stdout).to receive(:print).with("Enter your default region (optional, defaults to nyc1): ")
28
28
  expect($stdin).to receive(:gets).and_return(region)
29
- expect($stdout).to receive(:print).with("Enter your default image ID (optional, defaults to 9801950 (Ubuntu 14.04 x64)): ")
29
+ expect($stdout).to receive(:print).with("Enter your default image ID or image slug (optional, defaults to ubuntu-14-04-x64): ")
30
30
  expect($stdin).to receive(:gets).and_return(image)
31
- expect($stdout).to receive(:print).with("Enter your default size ID (optional, defaults to 66 (512MB)): ")
31
+ expect($stdout).to receive(:print).with("Enter your default size (optional, defaults to 512mb)): ")
32
32
  expect($stdin).to receive(:gets).and_return(size)
33
33
  expect($stdout).to receive(:print).with("Enter your default ssh key ID (optional, defaults to none): ")
34
34
  expect($stdin).to receive(:gets).and_return(ssh_key_id)
@@ -39,13 +39,10 @@ describe Tugboat::CLI do
39
39
 
40
40
  @cli.authorize
41
41
 
42
- expect($stdout.string).to include("Note: You can get this information from https://cloud.digitalocean.com/api_access")
43
- expect($stdout.string).to include("Also Note: Tugboat is setup to work with v1 of the Digital Ocean API (https://developers.digitalocean.com/v1/)")
42
+ expect($stdout.string).to include("Note: You can get your Access Token from https://cloud.digitalocean.com/settings/tokens/new")
44
43
  expect($stdout.string).to include("To retrieve region, image, size and key ID's, you can use the corresponding tugboat command, such as `tugboat images`.")
45
44
  expect($stdout.string).to include("Defaults can be changed at any time in your ~/.tugboat configuration file.")
46
45
 
47
- expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
48
-
49
46
  config = YAML.load_file(tmp_path)
50
47
 
51
48
  expect(config["defaults"]["image"]).to eq image
@@ -60,23 +57,24 @@ describe Tugboat::CLI do
60
57
  end
61
58
 
62
59
  it "sets defaults if no input given" do
60
+ stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
61
+ with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>/Bearer/, 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
62
+ to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
63
63
 
64
64
  expect($stdout).to receive(:print).exactly(6).times
65
- expect($stdout).to receive(:print).with("Enter your client key: ")
66
- expect($stdin).to receive(:gets).and_return(client_key)
67
- expect($stdout).to receive(:print).with("Enter your API key: ")
68
- expect($stdin).to receive(:gets).and_return(api_key)
65
+ expect($stdout).to receive(:print).with("Enter your access token: ")
66
+ expect($stdin).to receive(:gets).and_return('')
69
67
  expect($stdout).to receive(:print).with("Enter your SSH key path (optional, defaults to ~/.ssh/id_rsa): ")
70
- expect($stdin).to receive(:gets).and_return(ssh_key_path)
68
+ expect($stdin).to receive(:gets).and_return('')
71
69
  expect($stdout).to receive(:print).with("Enter your SSH user (optional, defaults to root): ")
72
70
  expect($stdin).to receive(:gets).and_return('')
73
71
  expect($stdout).to receive(:print).with("Enter your SSH port number (optional, defaults to 22): ")
74
72
  expect($stdin).to receive(:gets).and_return('')
75
- expect($stdout).to receive(:print).with("Enter your default region ID (optional, defaults to 8 (New York 3)): ")
73
+ expect($stdout).to receive(:print).with("Enter your default region (optional, defaults to nyc1): ")
76
74
  expect($stdin).to receive(:gets).and_return('')
77
- expect($stdout).to receive(:print).with("Enter your default image ID (optional, defaults to 9801950 (Ubuntu 14.04 x64)): ")
75
+ expect($stdout).to receive(:print).with("Enter your default image ID or image slug (optional, defaults to ubuntu-14-04-x64): ")
78
76
  expect($stdin).to receive(:gets).and_return('')
79
- expect($stdout).to receive(:print).with("Enter your default size ID (optional, defaults to 66 (512MB)): ")
77
+ expect($stdout).to receive(:print).with("Enter your default size (optional, defaults to 512mb)): ")
80
78
  expect($stdin).to receive(:gets).and_return('')
81
79
  expect($stdout).to receive(:print).with("Enter your default ssh key ID (optional, defaults to none): ")
82
80
  expect($stdin).to receive(:gets).and_return('')
@@ -87,20 +85,17 @@ describe Tugboat::CLI do
87
85
 
88
86
  @cli.authorize
89
87
 
90
- expect($stdout.string).to include("Note: You can get this information from https://cloud.digitalocean.com/api_access")
91
- expect($stdout.string).to include("Also Note: Tugboat is setup to work with v1 of the Digital Ocean API (https://developers.digitalocean.com/v1/)")
88
+ expect($stdout.string).to include("Note: You can get your Access Token from https://cloud.digitalocean.com/settings/tokens/new")
92
89
  expect($stdout.string).to include("To retrieve region, image, size and key ID's, you can use the corresponding tugboat command, such as `tugboat images`.")
93
90
  expect($stdout.string).to include("Defaults can be changed at any time in your ~/.tugboat configuration file.")
94
91
 
95
- expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
96
-
97
92
  config = YAML.load_file(tmp_path)
98
93
 
99
- expect(config["defaults"]["image"]).to eq "9801950"
100
- expect(config["defaults"]["region"]).to eq "8"
101
- expect(config["defaults"]["size"]).to eq "66"
94
+ expect(config["defaults"]["image"]).to eq "ubuntu-14-04-x64"
95
+ expect(config["defaults"]["region"]).to eq "nyc2"
96
+ expect(config["defaults"]["size"]).to eq "512mb"
102
97
  expect(config["ssh"]["ssh_user"]).to eq 'root'
103
- expect(config["ssh"]["ssh_key_path"]).to eq "~/.ssh/id_rsa2"
98
+ expect(config["ssh"]["ssh_key_path"]).to eq "~/.ssh/id_rsa"
104
99
  expect(config["ssh"]["ssh_port"]).to eq "22"
105
100
  expect(config["defaults"]["ssh_key"]).to eq ""
106
101
  end
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+
3
+ describe Tugboat::CLI do
4
+ include_context "spec"
5
+
6
+ describe "config" do
7
+ it "shows the full config" do
8
+
9
+ @cli.config
10
+
11
+ expect($stdout.string).to eq <<-eos
12
+ Current Config\x20
13
+ Path: #{Dir.pwd}/tmp/tugboat
14
+ ---
15
+ authentication:
16
+ access_token: foo
17
+ ssh:
18
+ ssh_user: baz
19
+ ssh_key_path: ~/.ssh/id_rsa2
20
+ ssh_port: '33'
21
+ defaults:
22
+ region: nyc2
23
+ image: ubuntu-14-04-x64
24
+ size: 512mb
25
+ ssh_key: '1234'
26
+ private_networking: 'false'
27
+ backups_enabled: 'false'
28
+ eos
29
+ end
30
+
31
+ it "hides sensitive data if option given" do
32
+
33
+ @cli.options = @cli.options.merge(:hide => true)
34
+ @cli.config
35
+
36
+ expect($stdout.string).to eq <<-eos
37
+ Current Config (Keys Redacted)
38
+ Path: #{Dir.pwd}/tmp/tugboat
39
+ ---
40
+ authentication:
41
+ access_token:\x20\x20[REDACTED]
42
+ ssh:
43
+ ssh_user: baz
44
+ ssh_key_path: ~/.ssh/id_rsa2
45
+ ssh_port: '33'
46
+ defaults:
47
+ region: nyc2
48
+ image: ubuntu-14-04-x64
49
+ size: 512mb
50
+ ssh_key: '1234'
51
+ private_networking: 'false'
52
+ backups_enabled: 'false'
53
+ eos
54
+ end
55
+ end
56
+ end
57
+
@@ -5,47 +5,35 @@ describe Tugboat::CLI do
5
5
 
6
6
  describe "create a droplet" do
7
7
  it "with a name, uses defaults from configuration" do
8
- stub_request(:get, "https://api.digitalocean.com/droplets/new?api_key=#{api_key}&client_id=#{client_key}&image_id=#{image}&name=#{droplet_name}&backups_enabled=#{backups_enabled}&private_networking=#{private_networking}&region_id=#{region}&size_id=#{size}&ssh_key_ids=#{ssh_key_id}").
9
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => '{"status":"OK"}')
8
+ stub_request(:post, "https://api.digitalocean.com/v2/droplets").
9
+ with(:body => "{\"name\":\"foo\",\"size\":\"512mb\",\"image\":\"ubuntu-14-04-x64\",\"region\":\"nyc2\",\"ssh_keys\":[\"1234\"],\"private_networking\":\"false\",\"backups_enabled\":\"false\",\"ipv6\":null}",
10
+ :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('create_droplet'), :headers => {})
10
12
 
11
13
  @cli.create(droplet_name)
12
14
 
13
15
  expect($stdout.string).to eq <<-eos
14
- Queueing creation of droplet '#{droplet_name}'...done
16
+ Queueing creation of droplet '#{droplet_name}'...Droplet created!
15
17
  eos
16
- expect(a_request(:get, "https://api.digitalocean.com/droplets/new?api_key=#{api_key}&client_id=#{client_key}&image_id=#{image}&name=#{droplet_name}&backups_enabled=#{backups_enabled}&private_networking=#{private_networking}&region_id=#{region}&size_id=#{size}&ssh_key_ids=#{ssh_key_id}")).to have_been_made
17
18
  end
18
19
 
19
20
  it "with args does not use defaults from configuration" do
20
- stub_request(:get, "https://api.digitalocean.com/droplets/new?api_key=#{api_key}&client_id=#{client_key}&image_id=555&name=foo&backups_enabled=#{backups_enabled}&private_networking=#{private_networking}&region_id=3&size_id=666&ssh_key_ids=4321").
21
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => '{"status":"OK"}')
21
+ stub_request(:post, "https://api.digitalocean.com/v2/droplets").
22
+ with(:body => "{\"name\":\"example.com\",\"size\":\"1gb\",\"image\":\"ubuntu-12-04-x64\",\"region\":\"nyc3\",\"ssh_keys\":[\"foo_bar_key\"],\"private_networking\":\"false\",\"backups_enabled\":\"false\",\"ipv6\":null}",
23
+ :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'}).
24
+ to_return(:status => 200, :body => fixture('create_droplet'), :headers => {})
22
25
 
23
- @cli.options = @cli.options.merge(:image => '555', :size => '666', :region => '3', :keys => '4321')
24
- @cli.create(droplet_name)
26
+ @cli.options = @cli.options.merge(:image => 'ubuntu-12-04-x64', :size => '1gb', :region => 'nyc3', :keys => 'foo_bar_key')
27
+ @cli.create('example.com')
25
28
 
26
29
  expect($stdout.string).to eq <<-eos
27
- Queueing creation of droplet '#{droplet_name}'...done
30
+ Queueing creation of droplet 'example.com'...Droplet created!
28
31
  eos
29
32
 
30
- expect(a_request(:get, "https://api.digitalocean.com/droplets/new?api_key=#{api_key}&client_id=#{client_key}&image_id=555&name=foo&backups_enabled=#{backups_enabled}&private_networking=#{private_networking}&region_id=3&size_id=666&ssh_key_ids=4321")).to have_been_made
31
33
  end
32
34
 
33
35
  it "doesn't create a droplet when mistyping help command" do
34
- help_text = <<-eos
35
- Usage:
36
- rspec create NAME
37
-
38
- Options:
39
- -s, [--size=N] # The size_id of the droplet
40
- -i, [--image=N] # The image_id of the droplet
41
- -r, [--region=N] # The region_id of the droplet
42
- -k, [--keys=KEYS] # A comma separated list of SSH key ids to add to the droplet
43
- -p, [--private-networking] # Enable private networking on the droplet
44
- -b, [--backups-enabled] # Enable backups on the droplet
45
- -q, [--quiet]
46
-
47
- Create a droplet.
48
- eos
36
+ help_text = "Usage:\n rspec create NAME\n\nOptions:\n -s, [--size=N] # The size_id of the droplet\n -i, [--image=N] # The image_id of the droplet\n -r, [--region=N] # The region_id of the droplet\n -k, [--keys=KEYS] # A comma separated list of SSH key ids to add to the droplet\n -p, [--private-networking] # Enable private networking on the droplet\n -b, [--backups-enabled] # Enable backups on the droplet\n -q, [--quiet] \n\nCreate a droplet.\n"
49
37
 
50
38
  @cli.create('help')
51
39
  expect($stdout.string).to eq help_text
@@ -58,13 +46,15 @@ eos
58
46
  end
59
47
 
60
48
  it "does not clobber named droplets that contain the word help" do
61
- stub_request(:get, "https://api.digitalocean.com/droplets/new?api_key=#{api_key}&client_id=#{client_key}&image_id=#{image}&name=somethingblahblah--help&backups_enabled=#{backups_enabled}&private_networking=#{private_networking}&region_id=#{region}&size_id=#{size}&ssh_key_ids=#{ssh_key_id}").
62
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => '{"status":"OK"}')
49
+ stub_request(:post, "https://api.digitalocean.com/v2/droplets").
50
+ with(:body => "{\"name\":\"somethingblahblah--help\",\"size\":\"512mb\",\"image\":\"ubuntu-14-04-x64\",\"region\":\"nyc2\",\"ssh_keys\":[\"1234\"],\"private_networking\":\"false\",\"backups_enabled\":\"false\",\"ipv6\":null}",
51
+ :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'}).
52
+ to_return(:status => 200, :body => fixture('create_droplet'), :headers => {})
63
53
 
64
54
  @cli.create('somethingblahblah--help')
65
55
 
66
56
  expect($stdout.string).to eq <<-eos
67
- Queueing creation of droplet 'somethingblahblah--help'...done
57
+ Queueing creation of droplet 'somethingblahblah--help'...Droplet created!
68
58
  eos
69
59
  end
70
60
  end
@@ -11,14 +11,11 @@ describe Tugboat::CLI do
11
11
  end
12
12
 
13
13
  it "gives full faraday logs" do
14
- stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
15
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
16
-
14
+ pending 'Debug flag not avaliable yet'
15
+ stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
16
+ 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'}).
17
+ to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
17
18
  @cli.droplets
18
-
19
- expect($stdout.string).to include('Response from https://api.digitalocean.com/droplets?client_id=foo&api_key=bar; Status: 200;')
20
-
21
- expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
22
19
  end
23
20
  end
24
21
 
@@ -30,14 +27,11 @@ describe Tugboat::CLI do
30
27
  end
31
28
 
32
29
  it "gives full faraday logs with redacted API keys" do
33
- stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
34
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
35
-
30
+ pending 'Debug flag not avaliable yet'
31
+ stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
32
+ 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'}).
33
+ to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
36
34
  @cli.droplets
37
-
38
- expect($stdout.string).to include('Response from https://api.digitalocean.com/droplets?client_id=[CLIENT-ID]&api_key=[API-KEY]; Status: 200;')
39
-
40
- expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
41
35
  end
42
36
  end
43
37
  end
@@ -5,103 +5,92 @@ describe Tugboat::CLI do
5
5
 
6
6
  describe "destroy" do
7
7
  it "destroys a droplet with a fuzzy name" do
8
- stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
9
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
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(:delete, "https://api.digitalocean.com/droplets/100823/destroy?api_key=#{api_key}&client_id=#{client_key}").
12
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
12
+ stub_request(:delete, "https://api.digitalocean.com/v2/droplets/6918990").
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 => 204, :body => "", :headers => {})
13
15
 
14
16
  expect($stdin).to receive(:gets).and_return("y")
15
17
 
16
- @cli.destroy("foo")
18
+ @cli.destroy("example.com")
17
19
 
18
20
  expect($stdout.string).to eq <<-eos
19
- Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 100823 (foo)\nWarning! Potentially destructive action. Please confirm [y/n]: Queuing destroy for 100823 (foo)...done
20
- eos
21
-
22
- expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
23
- expect(a_request(:delete, "https://api.digitalocean.com/droplets/100823/destroy?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
21
+ Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)\nWarning! Potentially destructive action. Please confirm [y/n]: Queuing destroy for 6918990 (example.com)...Deletion Successful!
22
+ eos
24
23
  end
25
24
 
26
25
  it "destroys a droplet with an id" do
27
- stub_request(:get, "https://api.digitalocean.com/droplets/#{droplet_id}?api_key=#{api_key}&client_id=#{client_key}").
28
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
26
+ stub_request(:get, "https://api.digitalocean.com/v2/droplets/6918990?per_page=200").
27
+ 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'}).
28
+ to_return(:status => 200, :body => fixture('show_droplet'), :headers => {})
29
29
 
30
- stub_request(:delete, "https://api.digitalocean.com/droplets/100823/destroy?api_key=#{api_key}&client_id=#{client_key}").
31
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
30
+ stub_request(:delete, "https://api.digitalocean.com/v2/droplets/6918990").
31
+ 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'}).
32
+ to_return(:status => 204, :body => "", :headers => {})
32
33
 
33
34
  expect($stdin).to receive(:gets).and_return("y")
34
35
 
35
- @cli.options = @cli.options.merge(:id => droplet_id)
36
+ @cli.options = @cli.options.merge(:id => '6918990')
36
37
  @cli.destroy
37
38
 
38
39
  expect($stdout.string).to eq <<-eos
39
- Droplet id provided. Finding Droplet...done\e[0m, 100823 (foo)\nWarning! Potentially destructive action. Please confirm [y/n]: Queuing destroy for 100823 (foo)...done
40
+ Droplet id provided. Finding Droplet...done\e[0m, 6918990 (example.com)\nWarning! Potentially destructive action. Please confirm [y/n]: Queuing destroy for 6918990 (example.com)...Deletion Successful!
40
41
  eos
41
-
42
- expect(a_request(:get, "https://api.digitalocean.com/droplets/#{droplet_id}?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
43
- expect(a_request(:delete, "https://api.digitalocean.com/droplets/100823/destroy?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
44
42
  end
45
43
 
46
44
 
47
45
  it "destroys a droplet with a name" do
48
- stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
49
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
46
+ stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
47
+ 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'}).
48
+ to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
50
49
 
51
- stub_request(:delete, "https://api.digitalocean.com/droplets/100823/destroy?api_key=#{api_key}&client_id=#{client_key}").
52
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
50
+ stub_request(:delete, "https://api.digitalocean.com/v2/droplets/6918990").
51
+ 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'}).
52
+ to_return(:status => 204, :body => "", :headers => {})
53
53
 
54
54
  expect($stdin).to receive(:gets).and_return("y")
55
55
 
56
- @cli.options = @cli.options.merge(:name => droplet_name)
56
+ @cli.options = @cli.options.merge(:name => 'example.com')
57
57
  @cli.destroy
58
58
 
59
59
  expect($stdout.string).to eq <<-eos
60
- Droplet name provided. Finding droplet ID...done\e[0m, 100823 (foo)\nWarning! Potentially destructive action. Please confirm [y/n]: Queuing destroy for 100823 (foo)...done
60
+ Droplet name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)\nWarning! Potentially destructive action. Please confirm [y/n]: Queuing destroy for 6918990 (example.com)...Deletion Successful!
61
61
  eos
62
-
63
- expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
64
- expect(a_request(:delete, "https://api.digitalocean.com/droplets/100823/destroy?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
65
62
  end
66
63
 
67
-
68
64
  it "destroys a droplet with confirm flag set" do
69
- stub_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}").
70
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplets"))
65
+ stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
66
+ 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'}).
67
+ to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
71
68
 
72
- stub_request(:delete, "https://api.digitalocean.com/droplets/100823/destroy?api_key=#{api_key}&client_id=#{client_key}").
73
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_droplet"))
69
+ stub_request(:delete, "https://api.digitalocean.com/v2/droplets/6918990").
70
+ 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'}).
71
+ to_return(:status => 204, :body => "", :headers => {})
74
72
 
75
- @cli.options = @cli.options.merge(:name => droplet_name)
76
- @cli.options = @cli.options.merge(:confirm => true)
73
+ @cli.options = @cli.options.merge(:name => 'example.com', :confirm => true)
77
74
  @cli.destroy
78
75
 
79
76
  expect($stdout.string).to eq <<-eos
80
- Droplet name provided. Finding droplet ID...done\e[0m, 100823 (foo)
81
- Queuing destroy for 100823 (foo)...done
77
+ Droplet name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
78
+ Queuing destroy for 6918990 (example.com)...Deletion Successful!
82
79
  eos
83
-
84
- expect(a_request(:get, "https://api.digitalocean.com/droplets?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
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
80
  end
87
81
 
88
82
  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"))
83
+ stub_request(:get, "https://api.digitalocean.com/v2/droplets?per_page=200").
84
+ 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'}).
85
+ to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
94
86
 
95
87
  $stdin.should_receive(:gets).and_return("n")
96
88
 
97
- expect {@cli.destroy("foo")}.to raise_error(SystemExit)
89
+ expect {@cli.destroy("example.com")}.to raise_error(SystemExit)
98
90
 
99
91
  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.
92
+ Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)\nWarning! Potentially destructive action. Please confirm [y/n]: Aborted due to user request.
101
93
  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
94
  end
106
95
  end
107
96
 
@@ -5,83 +5,77 @@ describe Tugboat::CLI do
5
5
 
6
6
  describe "destroy image" do
7
7
  it "destroys an image with a fuzzy name" do
8
- stub_request(:get, "https://api.digitalocean.com/images?api_key=#{api_key}&client_id=#{client_key}").
9
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images"))
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(:status => 200, :body => fixture('show_images_global'), :headers => {})
10
11
 
11
- stub_request(:get, "https://api.digitalocean.com/images/478/destroy?api_key=#{api_key}&client_id=#{client_key}").
12
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_image"))
12
+ stub_request(:delete, "https://api.digitalocean.com/v2/images/6376601").
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 => 204, :body => "", :headers => {})
13
15
 
14
16
  expect($stdin).to receive(:gets).and_return("y")
15
17
 
16
- @cli.destroy_image("NLP Final")
18
+ @cli.destroy_image("My application image")
17
19
 
18
20
  expect($stdout.string).to eq <<-eos
19
- Image fuzzy name provided. Finding image ID...done\e[0m, 478 (NLP Final)\nWarning! Potentially destructive action. Please confirm [y/n]: Queuing destroy image for 478 (NLP Final)...done
21
+ Image fuzzy name provided. Finding image ID...done\e[0m, 6376601 (My application image)\nWarning! Potentially destructive action. Please confirm [y/n]: Queuing destroy image for 6376601 (My application image)...Image deletion successful!
20
22
  eos
21
-
22
- expect(a_request(:get, "https://api.digitalocean.com/images?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
23
- expect(a_request(:get, "https://api.digitalocean.com/images/478/destroy?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
24
23
  end
25
24
 
26
25
  it "destroys an image with an id" do
27
- stub_request(:get, "https://api.digitalocean.com/images/478?api_key=#{api_key}&client_id=#{client_key}").
28
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_image"))
26
+ stub_request(:get, "https://api.digitalocean.com/v2/images/6376601?per_page=200").
27
+ 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'}).
28
+ to_return(:status => 200, :body => fixture('show_image'), :headers => {})
29
29
 
30
- stub_request(:get, "https://api.digitalocean.com/images/478/destroy?api_key=#{api_key}&client_id=#{client_key}").
31
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_image"))
30
+ stub_request(:delete, "https://api.digitalocean.com/v2/images/6376601").
31
+ 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'}).
32
+ to_return(:status => 204, :body => "", :headers => {})
32
33
 
33
34
  expect($stdin).to receive(:gets).and_return("y")
34
35
 
35
- @cli.options = @cli.options.merge(:id => 478)
36
+ @cli.options = @cli.options.merge(:id => 6376601)
36
37
  @cli.destroy_image
37
38
 
38
39
  expect($stdout.string).to eq <<-eos
39
- Image id provided. Finding Image...done\e[0m, 478 (NLP Final)\nWarning! Potentially destructive action. Please confirm [y/n]: Queuing destroy image for 478 (NLP Final)...done
40
+ Image id provided. Finding Image...done\e[0m, 6376601 (My application image)\nWarning! Potentially destructive action. Please confirm [y/n]: Queuing destroy image for 6376601 (My application image)...Image deletion successful!
40
41
  eos
41
-
42
- expect(a_request(:get, "https://api.digitalocean.com/images/478?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
43
- expect(a_request(:get, "https://api.digitalocean.com/images/478/destroy?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
44
- end
42
+ end
45
43
 
46
44
 
47
45
  it "destroys an image with a name" do
48
- stub_request(:get, "https://api.digitalocean.com/images?api_key=#{api_key}&client_id=#{client_key}").
49
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images"))
46
+ stub_request(:get, "https://api.digitalocean.com/v2/images?per_page=200").
47
+ 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'}).
48
+ to_return(:status => 200, :body => fixture('show_images_global'), :headers => {})
50
49
 
51
- stub_request(:get, "https://api.digitalocean.com/images/478/destroy?api_key=#{api_key}&client_id=#{client_key}").
52
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_image"))
50
+ stub_request(:delete, "https://api.digitalocean.com/v2/images/6376601").
51
+ 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'}).
52
+ to_return(:status => 204, :body => "", :headers => {})
53
53
 
54
54
  expect($stdin).to receive(:gets).and_return("y")
55
55
 
56
- @cli.options = @cli.options.merge(:name => "NLP Final")
56
+ @cli.options = @cli.options.merge(:name => "My application image")
57
57
  @cli.destroy_image
58
58
 
59
- expect($stdout.string).to eq <<-eos
60
- Image name provided. Finding image ID...done\e[0m, 478 (NLP Final)\nWarning! Potentially destructive action. Please confirm [y/n]: Queuing destroy image for 478 (NLP Final)...done
61
- eos
62
-
63
- expect(a_request(:get, "https://api.digitalocean.com/images?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
64
- expect(a_request(:get, "https://api.digitalocean.com/images/478/destroy?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
59
+ expect($stdout.string).to eq "Image name provided. Finding Image...done\e[0m, 6376601 (My application image)\nWarning! Potentially destructive action. Please confirm [y/n]: Queuing destroy image for 6376601 (My application image)...Image deletion successful!\n"
65
60
  end
66
61
 
67
62
 
68
63
  it "destroys an image with confirm flag set" do
69
- stub_request(:get, "https://api.digitalocean.com/images?api_key=#{api_key}&client_id=#{client_key}").
70
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_images"))
64
+ stub_request(:get, "https://api.digitalocean.com/v2/images?per_page=200").
65
+ 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'}).
66
+ to_return(:status => 200, :body => fixture('show_images_global'), :headers => {})
71
67
 
72
- stub_request(:get, "https://api.digitalocean.com/images/478/destroy?api_key=#{api_key}&client_id=#{client_key}").
73
- to_return(:headers => {'Content-Type' => 'application/json'}, :status => 200, :body => fixture("show_image"))
68
+ stub_request(:delete, "https://api.digitalocean.com/v2/images/6376601").
69
+ 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'}).
70
+ to_return(:status => 204, :body => "", :headers => {})
74
71
 
75
- @cli.options = @cli.options.merge(:name => "NLP Final")
72
+ @cli.options = @cli.options.merge(:name => "My application image")
76
73
  @cli.options = @cli.options.merge(:confirm => true)
77
74
  @cli.destroy_image("NLP Final")
78
75
 
79
76
  expect($stdout.string).to eq <<-eos
80
- Image name provided. Finding image ID...done\e[0m, 478 (NLP Final)\nQueuing destroy image for 478 (NLP Final)...done
77
+ Image name provided. Finding Image...done\e[0m, 6376601 (My application image)\nQueuing destroy image for 6376601 (My application image)...Image deletion successful!
81
78
  eos
82
-
83
- expect(a_request(:get, "https://api.digitalocean.com/images?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
84
- expect(a_request(:get, "https://api.digitalocean.com/images/478/destroy?api_key=#{api_key}&client_id=#{client_key}")).to have_been_made
85
79
  end
86
80
  end
87
81