brightbox-cli 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -0
  3. data/Gemfile.lock +5 -2
  4. data/brightbox-cli.gemspec +1 -1
  5. data/lib/brightbox/cli/config.rb +19 -0
  6. data/lib/brightbox-cli/accounts.rb +2 -2
  7. data/lib/brightbox-cli/api.rb +4 -4
  8. data/lib/brightbox-cli/commands/accounts/default.rb +1 -1
  9. data/lib/brightbox-cli/commands/accounts/list.rb +1 -1
  10. data/lib/brightbox-cli/commands/config/client-add.rb +2 -2
  11. data/lib/brightbox-cli/commands/config/client-default.rb +3 -3
  12. data/lib/brightbox-cli/commands/config/client-list.rb +6 -6
  13. data/lib/brightbox-cli/commands/config/client-remove.rb +4 -4
  14. data/lib/brightbox-cli/commands/config/user-add.rb +2 -2
  15. data/lib/brightbox-cli/commands/login.rb +53 -0
  16. data/lib/brightbox-cli/config/accounts.rb +5 -0
  17. data/lib/brightbox-cli/config/authentication_tokens.rb +10 -3
  18. data/lib/brightbox-cli/config/cache.rb +8 -12
  19. data/lib/brightbox-cli/config/clients.rb +14 -38
  20. data/lib/brightbox-cli/config/sections.rb +70 -13
  21. data/lib/brightbox-cli/config/user_application.rb +13 -5
  22. data/lib/brightbox-cli/config.rb +22 -14
  23. data/lib/brightbox-cli/connection_manager.rb +2 -2
  24. data/lib/brightbox-cli/gli_global_hooks.rb +25 -28
  25. data/lib/brightbox-cli/version.rb +1 -1
  26. data/lib/brightbox_cli.rb +4 -0
  27. data/spec/cassettes/Brightbox_BBConfig/_add_section/when_config_exists_and_overwrite_duplicates_is_false/does_not_update_the_config_file.yml +199 -0
  28. data/spec/cassettes/Brightbox_BBConfig/_add_section/when_config_exists_and_overwrite_duplicates_is_true/does_not_update_the_config_file.yml +199 -0
  29. data/spec/cassettes/Brightbox_BBConfig_add_login/when_altering_a_custom_option/does_not_alter_the_configuration.yml +99 -0
  30. data/spec/cassettes/Brightbox_BBConfig_add_login/when_altering_a_custom_option/updates_access_token.yml +99 -0
  31. data/spec/cassettes/Brightbox_BBConfig_add_login/when_altering_a_custom_option/updates_refresh_token.yml +99 -0
  32. data/spec/cassettes/Brightbox_BBConfig_add_login/when_configured_with_custom_options/does_not_alter_the_configuration.yml +99 -0
  33. data/spec/cassettes/Brightbox_BBConfig_add_login/when_configured_with_custom_options/updates_access_token.yml +99 -0
  34. data/spec/cassettes/Brightbox_BBConfig_add_login/when_configured_with_custom_options/updates_refresh_token.yml +99 -0
  35. data/spec/cassettes/Brightbox_BBConfig_add_login/when_logged_in_previously/does_not_alter_the_configuration.yml +149 -0
  36. data/spec/cassettes/Brightbox_BBConfig_add_login/when_logged_in_previously/updates_access_token.yml +149 -0
  37. data/spec/cassettes/Brightbox_BBConfig_add_login/when_logged_in_previously/updates_refresh_token.yml +149 -0
  38. data/spec/cassettes/Brightbox_BBConfig_add_login/when_no_config_exists/creates_the_configuration.yml +101 -0
  39. data/spec/cassettes/Brightbox_BBConfig_add_login/when_no_config_exists/refreshed_tokens.yml +101 -0
  40. data/spec/cassettes/Brightbox_BBConfig_add_login/when_using_an_email_and_suffix/creates_the_configuration.yml +101 -0
  41. data/spec/cassettes/Brightbox_BBConfig_add_login/when_using_an_email_and_suffix/refreshed_tokens.yml +101 -0
  42. data/spec/cassettes/brightbox_accounts/list/_when_access_token_expired_/does_not_report_invalid_token_errors.yml +64 -18
  43. data/spec/cassettes/brightbox_accounts/list/_when_no_tokens_/does_not_report_invalid_token_errors.yml +62 -16
  44. data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/does_not_error.yml +101 -0
  45. data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/does_not_prompt_to_rerun_the_command.yml +101 -0
  46. data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/prompts_for_the_password.yml +101 -0
  47. data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/requests_access_tokens.yml +101 -0
  48. data/spec/cassettes/brightbox_login/when_alternative_client_credentials_are_given/sets_up_the_config.yml +101 -0
  49. data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/does_not_error.yml +101 -0
  50. data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/does_not_prompt_to_rerun_the_command.yml +101 -0
  51. data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/prompts_for_the_password.yml +101 -0
  52. data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/requests_access_tokens.yml +101 -0
  53. data/spec/cassettes/brightbox_login/when_custom_api/auth_URLs_are_given/sets_up_the_config.yml +101 -0
  54. data/spec/cassettes/brightbox_login/when_default_account_is_passed/does_not_error.yml +51 -0
  55. data/spec/cassettes/brightbox_login/when_default_account_is_passed/does_not_prompt_to_rerun_the_command.yml +51 -0
  56. data/spec/cassettes/brightbox_login/when_default_account_is_passed/prompts_for_the_password.yml +51 -0
  57. data/spec/cassettes/brightbox_login/when_default_account_is_passed/requests_access_tokens.yml +51 -0
  58. data/spec/cassettes/brightbox_login/when_default_account_is_passed/sets_up_the_config.yml +51 -0
  59. data/spec/cassettes/brightbox_login/when_no_config_is_present/does_not_error.yml +101 -0
  60. data/spec/cassettes/brightbox_login/when_no_config_is_present/does_not_prompt_to_rerun_the_command.yml +101 -0
  61. data/spec/cassettes/brightbox_login/when_no_config_is_present/requests_access_tokens.yml +101 -0
  62. data/spec/cassettes/brightbox_login/when_no_config_is_present/sets_up_the_config.yml +101 -0
  63. data/spec/cassettes/brightbox_login/when_no_password_is_given/does_not_error.yml +101 -0
  64. data/spec/cassettes/brightbox_login/when_no_password_is_given/does_not_prompt_to_rerun_the_command.yml +101 -0
  65. data/spec/cassettes/brightbox_login/when_no_password_is_given/prompts_for_the_password.yml +101 -0
  66. data/spec/cassettes/brightbox_login/when_no_password_is_given/requests_access_tokens.yml +101 -0
  67. data/spec/cassettes/brightbox_login/when_no_password_is_given/sets_up_the_config.yml +101 -0
  68. data/spec/commands/accounts/list_spec.rb +1 -0
  69. data/spec/commands/login_spec.rb +239 -0
  70. data/spec/configs/user_app.ini +0 -2
  71. data/spec/spec_helper.rb +1 -0
  72. data/spec/support/config_helpers.rb +5 -0
  73. data/spec/unit/brightbox/account/all_spec.rb +1 -3
  74. data/spec/unit/brightbox/api/conn_spec.rb +3 -0
  75. data/spec/unit/brightbox/api/find_spec.rb +3 -0
  76. data/spec/unit/brightbox/bb_config/account_spec.rb +2 -0
  77. data/spec/unit/brightbox/bb_config/add_login_spec.rb +222 -0
  78. data/spec/unit/brightbox/bb_config/client_name_spec.rb +4 -12
  79. data/spec/unit/brightbox/bb_config/client_named_spec.rb +1 -1
  80. data/spec/unit/brightbox/bb_config/config_directory_exists_spec.rb +5 -2
  81. data/spec/unit/brightbox/bb_config/config_directory_spec.rb +4 -2
  82. data/spec/unit/brightbox/bb_config/config_spec.rb +4 -8
  83. data/spec/unit/brightbox/bb_config/default_account_spec.rb +10 -6
  84. data/spec/unit/brightbox/bb_config/find_or_set_default_account_spec.rb +2 -0
  85. data/spec/unit/brightbox/bb_config/renew_tokens_spec.rb +3 -0
  86. data/spec/unit/brightbox/bb_config/section_names_spec.rb +46 -0
  87. data/spec/unit/brightbox/bb_config/using_client_spec.rb +12 -12
  88. data/spec/unit/brightbox/bb_config_spec.rb +0 -1
  89. data/spec/unit/brightbox/cloud_ip/find_spec.rb +3 -0
  90. data/spec/unit/brightbox/config/user_application/to_fog_spec.rb +33 -29
  91. data/spec/unit/brightbox/config/user_application/valid_spec.rb +0 -32
  92. data/spec/unit/brightbox/connection_manager/fetch_connection_spec.rb +7 -3
  93. data/spec/unit/brightbox/firewall_policy/apply_to_spec.rb +3 -0
  94. data/spec/unit/brightbox/firewall_policy/create_spec.rb +3 -0
  95. data/spec/unit/brightbox/firewall_policy/destroy_spec.rb +3 -0
  96. data/spec/unit/brightbox/firewall_policy/find_or_call_spec.rb +3 -0
  97. data/spec/unit/brightbox/firewall_policy/find_spec.rb +3 -0
  98. data/spec/unit/brightbox/firewall_rule/create_spec.rb +3 -0
  99. data/spec/unit/brightbox/firewall_rule/destroy_spec.rb +3 -0
  100. data/spec/unit/brightbox/firewall_rule/find_spec.rb +3 -0
  101. data/spec/unit/brightbox/firewall_rule/from_policy_spec.rb +3 -0
  102. data/spec/unit/brightbox/server/destroy_spec.rb +4 -0
  103. data/spec/unit/brightbox/server/find_or_call_spec.rb +3 -0
  104. data/spec/unit/brightbox/server/find_spec.rb +4 -0
  105. data/spec/unit/brightbox/server/shutdown_spec.rb +4 -0
  106. data/spec/unit/brightbox/server/start_spec.rb +4 -0
  107. data/spec/unit/brightbox/server/stop_spec.rb +4 -0
  108. data/spec/unit/brightbox/server/update_spec.rb +4 -0
  109. data/spec/unit/brightbox/server_group/find_spec.rb +3 -0
  110. data/spec/unit/brightbox/user_collaboration/get_for_account_spec.rb +3 -0
  111. metadata +90 -3
@@ -0,0 +1,222 @@
1
+ require "spec_helper"
2
+
3
+ describe Brightbox::BBConfig, "#add_login" do
4
+ let(:config) { Brightbox::BBConfig.new }
5
+
6
+ let(:email) { "jason.null@brightbox.com" }
7
+ let(:password) { "N:B3e%7Cmh" }
8
+ let(:api_url) { ENV["BRIGHTBOX_API_URL"] || "http://api.brightbox.dev" }
9
+
10
+ context "when no config exists", vcr: true do
11
+ let(:expected_config) do
12
+ <<EOS
13
+ [core]
14
+ default_client = #{email}
15
+
16
+ [#{email}]
17
+ username = #{email}
18
+ api_url = #{api_url}
19
+ auth_url = #{api_url}
20
+ default_account = acc-12345
21
+
22
+ EOS
23
+ end
24
+
25
+ before do
26
+ remove_config
27
+ end
28
+
29
+ it "creates the configuration" do
30
+ FauxIO.new do
31
+ config.add_login(email, password)
32
+ end
33
+ expect(config_file_contents).to eq(expected_config)
34
+ end
35
+
36
+ it "refreshed tokens" do
37
+ FauxIO.new do
38
+ expect { config.add_login(email, password) }.not_to raise_error
39
+ end
40
+
41
+ expect(cached_access_token(config)).to eq(config.access_token)
42
+ expect(cached_refresh_token(config)).to eq(config.refresh_token)
43
+ end
44
+ end
45
+
46
+ context "when logged in previously", vcr: true do
47
+ let(:original_config) { config_file_contents }
48
+
49
+ before do
50
+ FauxIO.new { config.add_login(email, password) }
51
+ end
52
+
53
+ it "does not alter the configuration" do
54
+ FauxIO.new do
55
+ expect {
56
+ config.add_login(email, password)
57
+ }.not_to change { config_file_contents }.from(original_config)
58
+ end
59
+ end
60
+
61
+ it "updates access token" do
62
+ FauxIO.new do
63
+ expect { config.add_login(email, password) }.to change {
64
+ config.access_token
65
+ }.from(cached_access_token(config))
66
+ end
67
+ end
68
+
69
+ it "updates refresh token" do
70
+ FauxIO.new do
71
+ expect { config.add_login(email, password) }.to change {
72
+ config.refresh_token
73
+ }.from(cached_refresh_token(config))
74
+ end
75
+ end
76
+ end
77
+
78
+ context "when configured with custom options", vcr: true do
79
+ let(:original_config) { config_file_contents }
80
+
81
+ let(:custom_url) { ENV["BRIGHTBOX_API_URL"] || "http://api.brightbox.dev" }
82
+ let(:custom_app_id) { "app-23456" }
83
+ let(:custom_app_secret) { "ho04hondtzjjdf4" }
84
+ let(:custom_default_account) { "acc-23456" }
85
+
86
+ let(:custom_options) do
87
+ {
88
+ api_url: custom_url,
89
+ auth_url: custom_url,
90
+ default_account: custom_default_account,
91
+ client_id: custom_app_id,
92
+ secret: custom_app_secret
93
+ }
94
+ end
95
+
96
+ before do
97
+ FauxIO.new { config.add_login(email, password, custom_options) }
98
+ end
99
+
100
+ it "does not alter the configuration" do
101
+ FauxIO.new do
102
+ expect {
103
+ config.add_login(email, password)
104
+ }.not_to change { config_file_contents }.from(original_config)
105
+ end
106
+
107
+ expect(config_file_contents).to match("[#{email}]")
108
+ expect(config_file_contents).to match("api_url = #{custom_url}")
109
+ expect(config_file_contents).to match("auth_url = #{custom_url}")
110
+ expect(config_file_contents).to match("username = #{email}")
111
+ expect(config_file_contents).to match("default_account = #{custom_default_account}")
112
+ expect(config_file_contents).to match("default_client = #{email}")
113
+ end
114
+
115
+ it "updates access token" do
116
+ FauxIO.new do
117
+ expect { config.add_login(email, password) }.to change {
118
+ config.access_token
119
+ }.from(cached_access_token(config))
120
+ end
121
+ end
122
+
123
+ it "updates refresh token" do
124
+ FauxIO.new do
125
+ expect { config.add_login(email, password) }.to change {
126
+ config.refresh_token
127
+ }.from(cached_refresh_token(config))
128
+ end
129
+ end
130
+ end
131
+
132
+ context "when altering a custom option", vcr: true do
133
+ let(:original_config) { config_file_contents }
134
+
135
+ let(:custom_url) { ENV["BRIGHTBOX_API_URL"] || "http://api.brightbox.dev" }
136
+ let(:custom_app_id) { "app-23456" }
137
+ let(:custom_app_secret) { "ho04hondtzjjdf4" }
138
+ let(:custom_default_account) { "acc-23456" }
139
+
140
+ let(:custom_options) do
141
+ {
142
+ api_url: custom_url,
143
+ auth_url: custom_url,
144
+ default_account: custom_default_account,
145
+ client_id: custom_app_id,
146
+ secret: custom_app_secret
147
+ }
148
+ end
149
+
150
+ before do
151
+ FauxIO.new { config.add_login(email, password, custom_options) }
152
+ end
153
+
154
+ it "does not alter the configuration" do
155
+ FauxIO.new do
156
+ expect {
157
+ config.add_login(email, password)
158
+ }.not_to change { config_file_contents }.from(original_config)
159
+ end
160
+
161
+ expect(config_file_contents).to match("[#{email}]")
162
+ expect(config_file_contents).to match("api_url = #{custom_url}")
163
+ expect(config_file_contents).to match("username = #{email}")
164
+ expect(config_file_contents).to match("default_account = #{custom_default_account}")
165
+ expect(config_file_contents).to match("default_client = #{email}")
166
+ end
167
+
168
+ it "updates access token" do
169
+ FauxIO.new do
170
+ expect { config.add_login(email, password) }.to change {
171
+ config.access_token
172
+ }.from(cached_access_token(config))
173
+ end
174
+ end
175
+
176
+ it "updates refresh token" do
177
+ FauxIO.new do
178
+ expect { config.add_login(email, password) }.to change {
179
+ config.refresh_token
180
+ }.from(cached_refresh_token(config))
181
+ end
182
+ end
183
+ end
184
+
185
+ context "when using an email and suffix", vcr: true do
186
+ let(:client_name) { "#{email}/dev" }
187
+ let(:expected_config) do
188
+ <<EOS
189
+ [core]
190
+ default_client = #{client_name}
191
+
192
+ [#{client_name}]
193
+ username = #{email}
194
+ api_url = #{api_url}
195
+ auth_url = #{api_url}
196
+ default_account = acc-12345
197
+
198
+ EOS
199
+ end
200
+
201
+ before do
202
+ remove_config
203
+ end
204
+
205
+ it "creates the configuration" do
206
+ FauxIO.new do
207
+ config.add_login(client_name, password)
208
+ end
209
+ expect(config_file_contents).to eq(expected_config)
210
+ end
211
+
212
+ it "refreshed tokens" do
213
+ FauxIO.new do
214
+ expect { config.add_login(email, password) }.not_to raise_error
215
+ end
216
+
217
+ expect(cached_access_token(config)).to eq(config.access_token)
218
+ expect(cached_refresh_token(config)).to eq(config.refresh_token)
219
+ end
220
+ end
221
+
222
+ end
@@ -56,39 +56,31 @@ describe Brightbox::BBConfig do
56
56
  [cli-12345]
57
57
  client_id = cli-12345
58
58
  EOS
59
- @tmp_config = TmpConfig.new(contents)
60
- end
61
-
62
- after do
63
- @tmp_config.close
59
+ config_from_contents(contents)
64
60
  end
65
61
 
66
62
  context "and force_default_config is on" do
67
63
  before do
68
64
  config_opts = {
69
- :directory => @tmp_config.path,
70
65
  :force_default_config => true
71
66
  }
72
67
  @config = Brightbox::BBConfig.new(config_opts)
73
68
  end
74
69
 
75
- it "raises an error" do
76
- expect do
77
- @config.client_name
78
- end.to raise_error(Brightbox::BBConfigError, "You must specify a default client using brightbox config client_default")
70
+ it "returns nil" do
71
+ expect(@config.client_name).to be_nil
79
72
  end
80
73
  end
81
74
 
82
75
  context "and force_default_config is off" do
83
76
  before do
84
77
  config_opts = {
85
- :directory => @tmp_config.path,
86
78
  :force_default_config => false
87
79
  }
88
80
  @config = Brightbox::BBConfig.new(config_opts)
89
81
  end
90
82
 
91
- it "returns first client" do
83
+ it "returns nil" do
92
84
  expect(@config.client_name).to be_nil
93
85
  end
94
86
  end
@@ -6,7 +6,7 @@ describe Brightbox::BBConfig do
6
6
  [core]
7
7
  default_client = fnord
8
8
 
9
- [fnord]
9
+ [other]
10
10
  client_id = cli-12345
11
11
  alias = test
12
12
 
@@ -26,8 +26,11 @@ describe Brightbox::BBConfig do
26
26
 
27
27
  context "when directory does not exist" do
28
28
  it "returns false" do
29
- @dir = "fnord"
30
- expect(config.config_directory_exists?).to be false
29
+ # Create a tmpdir and delete it so we are sure it should not exist
30
+ Dir.mktmpdir { |dir| @dir = dir }
31
+ expect(config.config_directory).to eq(@dir)
32
+ Dir.rmdir(@dir) if Dir.exist?(@dir)
33
+ expect(config.config_directory_exists?).to eq(false)
31
34
  end
32
35
  end
33
36
  end
@@ -13,13 +13,15 @@ describe Brightbox::BBConfig do
13
13
  end
14
14
 
15
15
  context "when absolute custom location is set" do
16
+ let(:custom_dir) { Dir.mktmpdir("custom") }
17
+
16
18
  it "returns a String of the expanded directory" do
17
19
  config_options = {
18
- :directory => "/etc/local/brightbox_cli"
20
+ :directory => custom_dir
19
21
  }
20
22
  config = Brightbox::BBConfig.new(config_options)
21
23
 
22
- expect(config.config_directory).to eql("/etc/local/brightbox_cli")
24
+ expect(config.config_directory).to eql(custom_dir)
23
25
  end
24
26
  end
25
27
 
@@ -10,7 +10,6 @@ describe Brightbox::BBConfig do
10
10
  Dir.mktmpdir do |tmp_dir|
11
11
  target_dir = File.join(tmp_dir, "config")
12
12
  @config = Brightbox::BBConfig.new :directory => target_dir
13
- expect(@config.config_directory_exists?).to be false
14
13
  example.run
15
14
  end
16
15
  end
@@ -62,21 +61,18 @@ describe Brightbox::BBConfig do
62
61
  end
63
62
 
64
63
  context "when config file can not be parsed" do
65
- around do |example|
64
+ it "raises an error" do
66
65
  Dir.mktmpdir do |target_dir|
67
66
  test_config_filename = File.join(target_dir, "config")
68
67
  File.open(test_config_filename, "w") do |f|
69
68
  f.puts "not:ini"
70
69
  end
71
70
 
72
- @config = Brightbox::BBConfig.new :directory => target_dir
73
- example.run
71
+ expect {
72
+ @config = Brightbox::BBConfig.new :directory => target_dir
73
+ }.to raise_error(Brightbox::BBConfigError)
74
74
  end
75
75
  end
76
-
77
- it "raises an error" do
78
- expect { @config.config }.to raise_error(Brightbox::BBConfigError)
79
- end
80
76
  end
81
77
  end
82
78
  end
@@ -43,13 +43,17 @@ describe Brightbox::BBConfig do
43
43
  end
44
44
 
45
45
  context "when set in config" do
46
- before do
47
- @account_name = "acc-ghj32"
48
- @client_name = "app-b3n5b"
49
- contents = <<-EOS
50
- [#{@client_name}]
51
- default_account = #{@account_name}
46
+ let(:account_name) { "acc-ghj32" }
47
+ let(:client_name) { "app-b3n5b" }
48
+
49
+ let(:contents) do
50
+ <<-EOS
51
+ [#{client_name}]
52
+ default_account = #{account_name}
52
53
  EOS
54
+ end
55
+
56
+ before do
53
57
  @config = config_from_contents(contents)
54
58
  end
55
59
 
@@ -61,6 +61,8 @@ describe Brightbox::BBConfig do
61
61
  context "when client may access one account", vcr: true do
62
62
  let(:contents) do
63
63
  <<-EOS
64
+ [core]
65
+ default_client = cli-12345
64
66
  [cli-12345]
65
67
  api_url = http://api.brightbox.dev
66
68
  client_id = cli-12345
@@ -15,6 +15,9 @@ describe Brightbox::BBConfig do
15
15
  context "when using a user app with no tokens", vcr: true do
16
16
  before do
17
17
  contents = <<-EOS
18
+ [core]
19
+ default_client = app-12345
20
+
18
21
  [app-12345]
19
22
  api_url = #{api_endpoint}
20
23
  client_id = #{app_id}
@@ -0,0 +1,46 @@
1
+ require "spec_helper"
2
+
3
+ describe Brightbox::BBConfig, "#section_names" do
4
+ subject(:config) { config_from_contents(ini) }
5
+
6
+ context "when no sections exist" do
7
+ let(:ini) { "" }
8
+ it { expect(config.section_names).to be_empty }
9
+ end
10
+
11
+ context "when only a 'core' section exists" do
12
+ let(:ini) do
13
+ <<-EOS
14
+ [core]
15
+ setting = value
16
+ EOS
17
+ end
18
+ it { expect(config.section_names).to be_empty }
19
+ end
20
+
21
+ context "when only an 'alias' section exists" do
22
+ let(:ini) do
23
+ <<-EOS
24
+ [alias]
25
+ setting = value
26
+ EOS
27
+ end
28
+ it { expect(config.section_names).to be_empty }
29
+ end
30
+
31
+ context "when multiple sections exist" do
32
+ let(:ini) do
33
+ <<-EOS
34
+ [core]
35
+ setting = value
36
+
37
+ [cli-12345]
38
+ setting = value
39
+
40
+ [app-12345]
41
+ setting = value
42
+ EOS
43
+ end
44
+ it { expect(config.section_names).to eq(%w(cli-12345 app-12345)) }
45
+ end
46
+ end
@@ -2,20 +2,20 @@ require "spec_helper"
2
2
 
3
3
  describe Brightbox::BBConfig do
4
4
  let(:api_client_id) { "cli-12345" }
5
- let(:user_client_id) { "app-12345" }
6
- let(:user_app_two) { "app-54321" }
5
+ let(:custom_app) { "app-54321" }
6
+ let(:username) { "jason.null@brightbox.com" }
7
7
 
8
8
  let(:contents) do
9
9
  <<-EOS
10
10
  [#{api_client_id}]
11
11
  client_id = #{api_client_id}
12
12
  secret = #{random_token}
13
- [#{user_client_id}]
14
- client_id = #{user_client_id}
15
- secret = #{random_token}
16
- [#{user_app_two}]
17
- client_id = #{user_app_two}
13
+ [#{username}]
14
+ username = #{username}
15
+ [#{custom_app}]
16
+ client_id = #{custom_app}
18
17
  secret = #{random_token}
18
+ username = #{username}
19
19
  EOS
20
20
  end
21
21
 
@@ -36,7 +36,7 @@ describe Brightbox::BBConfig do
36
36
  end
37
37
 
38
38
  context "when selected config is for a user application" do
39
- let(:client_name) { user_client_id }
39
+ let(:client_name) { username }
40
40
 
41
41
  it "returns true" do
42
42
  config.client_name = client_name
@@ -54,7 +54,7 @@ describe Brightbox::BBConfig do
54
54
  end
55
55
 
56
56
  context "when selected config is for a user application with generic key" do
57
- let(:client_name) { user_app_two }
57
+ let(:client_name) { custom_app }
58
58
 
59
59
  it "returns true" do
60
60
  config.client_name = client_name
@@ -69,7 +69,7 @@ describe Brightbox::BBConfig do
69
69
  remove_config
70
70
  end
71
71
 
72
- it "does not raise an error" do
72
+ it "raises an error" do
73
73
  expect do
74
74
  Brightbox::BBConfig.new.using_api_client?
75
75
  end.to raise_error(Brightbox::NoSelectedClientError, error_message)
@@ -77,7 +77,7 @@ describe Brightbox::BBConfig do
77
77
  end
78
78
 
79
79
  context "when selected config is for a user application" do
80
- let(:client_name) { user_client_id }
80
+ let(:client_name) { username }
81
81
 
82
82
  it "returns false" do
83
83
  config.client_name = client_name
@@ -95,7 +95,7 @@ describe Brightbox::BBConfig do
95
95
  end
96
96
 
97
97
  context "when selected config is for a user application with generic key" do
98
- let(:client_name) { user_app_two }
98
+ let(:client_name) { custom_app }
99
99
 
100
100
  it "returns false" do
101
101
  config.client_name = client_name
@@ -9,7 +9,6 @@ describe Brightbox::BBConfig do
9
9
  it { expect(config).to respond_to(:config_directory) }
10
10
  it { expect(config).to respond_to(:config_filename) }
11
11
  it { expect(config).to respond_to(:delete_section) }
12
- it { expect(config).to respond_to(:clients) }
13
12
  it { expect(config).to respond_to(:client_name) }
14
13
  it { expect(config).to respond_to(:access_token_filename) }
15
14
  it { expect(config).to respond_to(:refresh_token_filename) }
@@ -1,6 +1,9 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe Brightbox::CloudIP do
4
+ before do
5
+ config_from_contents(API_CLIENT_CONFIG_CONTENTS)
6
+ end
4
7
 
5
8
  describe "#find(:all)" do
6
9
  context "when a Cloud IP exists" do
@@ -11,13 +11,11 @@ describe Brightbox::Config::UserApplication do
11
11
  subject(:for_fog) { section.to_fog }
12
12
 
13
13
  describe "#to_fog" do
14
- context "when config is valid" do
14
+ context "when config is using embedded client" do
15
15
  let(:contents) do
16
16
  <<-EOS
17
17
  [#{client_name}]
18
18
  api_url = http://api.brightbox.dev
19
- client_id = #{client_name}
20
- secret = #{secret}
21
19
  username = user@example.com
22
20
  EOS
23
21
  end
@@ -35,11 +33,11 @@ describe Brightbox::Config::UserApplication do
35
33
  end
36
34
 
37
35
  it "sets client_id correctly" do
38
- expect(for_fog[:brightbox_client_id]).to eql(client_name)
36
+ expect(for_fog[:brightbox_client_id]).to eql(Brightbox::EMBEDDED_APP_ID)
39
37
  end
40
38
 
41
39
  it "sets secret correctly" do
42
- expect(for_fog[:brightbox_secret]).to eql(secret)
40
+ expect(for_fog[:brightbox_secret]).to eql(Brightbox::EMBEDDED_APP_SECRET)
43
41
  end
44
42
 
45
43
  it "sets persistent correctly" do
@@ -47,86 +45,92 @@ describe Brightbox::Config::UserApplication do
47
45
  end
48
46
  end
49
47
 
50
- context "when config has alternative auth endpoint" do
48
+ context "when config is using custom client" do
51
49
  let(:contents) do
52
50
  <<-EOS
53
51
  [#{client_name}]
54
52
  api_url = http://api.brightbox.dev
55
- auth_url = http://auth.dev.brightbox.com
56
53
  client_id = #{client_name}
57
54
  secret = #{secret}
58
55
  username = user@example.com
59
56
  EOS
60
57
  end
61
58
 
59
+ it "sets provider as 'Brightbox'" do
60
+ expect(for_fog[:provider]).to eql("Brightbox")
61
+ end
62
+
62
63
  it "sets API endpoint correctly" do
63
64
  expect(for_fog[:brightbox_api_url]).to eql("http://api.brightbox.dev")
64
65
  end
65
66
 
66
67
  it "copies API endpoint for auth endpoint correctly" do
67
- expect(for_fog[:brightbox_auth_url]).to eql("http://auth.dev.brightbox.com")
68
+ expect(for_fog[:brightbox_auth_url]).to eql("http://api.brightbox.dev")
68
69
  end
69
- end
70
70
 
71
- context "when config has persistence setting" do
72
- let(:contents) do
73
- <<-EOS
74
- [#{client_name}]
75
- api_url = http://api.brightbox.dev
76
- client_id = #{client_name}
77
- secret = #{secret}
78
- username = user@example.com
79
- persistent = false
80
- EOS
71
+ it "sets client_id correctly" do
72
+ expect(for_fog[:brightbox_client_id]).to eql(client_name)
73
+ end
74
+
75
+ it "sets secret correctly" do
76
+ expect(for_fog[:brightbox_secret]).to eql(secret)
81
77
  end
82
78
 
83
79
  it "sets persistent correctly" do
84
- expect(for_fog[:persistent]).to be false
80
+ expect(for_fog[:persistent]).to be true
85
81
  end
86
82
  end
87
83
 
88
- context "when config is missing api_url" do
84
+ context "when config has alternative auth endpoint" do
89
85
  let(:contents) do
90
86
  <<-EOS
91
87
  [#{client_name}]
88
+ api_url = http://api.brightbox.dev
89
+ auth_url = http://auth.dev.brightbox.com
92
90
  client_id = #{client_name}
93
91
  secret = #{secret}
94
92
  username = user@example.com
95
93
  EOS
96
94
  end
97
95
 
98
- it "raises error" do
99
- expect { section.to_fog }.to raise_error(Brightbox::BBConfigError, "api_url option missing from config in section app-12345")
96
+ it "sets API endpoint correctly" do
97
+ expect(for_fog[:brightbox_api_url]).to eql("http://api.brightbox.dev")
98
+ end
99
+
100
+ it "copies API endpoint for auth endpoint correctly" do
101
+ expect(for_fog[:brightbox_auth_url]).to eql("http://auth.dev.brightbox.com")
100
102
  end
101
103
  end
102
104
 
103
- context "when config is missing client_id" do
105
+ context "when config has persistence setting" do
104
106
  let(:contents) do
105
107
  <<-EOS
106
108
  [#{client_name}]
107
109
  api_url = http://api.brightbox.dev
110
+ client_id = #{client_name}
108
111
  secret = #{secret}
109
112
  username = user@example.com
113
+ persistent = false
110
114
  EOS
111
115
  end
112
116
 
113
- it "raises error" do
114
- expect { section.to_fog }.to raise_error(Brightbox::BBConfigError, "client_id option missing from config in section app-12345")
117
+ it "sets persistent correctly" do
118
+ expect(for_fog[:persistent]).to be false
115
119
  end
116
120
  end
117
121
 
118
- context "when config is missing secret" do
122
+ context "when config is missing api_url" do
119
123
  let(:contents) do
120
124
  <<-EOS
121
125
  [#{client_name}]
122
- api_url = http://api.brightbox.dev
123
126
  client_id = #{client_name}
127
+ secret = #{secret}
124
128
  username = user@example.com
125
129
  EOS
126
130
  end
127
131
 
128
132
  it "raises error" do
129
- expect { section.to_fog }.to raise_error(Brightbox::BBConfigError, "secret option missing from config in section app-12345")
133
+ expect { section.to_fog }.to raise_error(Brightbox::BBConfigError, "api_url option missing from config in section app-12345")
130
134
  end
131
135
  end
132
136