tugboat 1.3.1 → 2.0.0.RC1

Sign up to get free protection for your applications and to get access to all the features.
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