rhc 1.2.7 → 1.3.8

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 (97) hide show
  1. data/bin/rhc +6 -8
  2. data/bin/rhc-chk +23 -10
  3. data/features/domain.feature +1 -1
  4. data/features/lib/rhc_helper.rb +3 -2
  5. data/features/lib/rhc_helper/api.rb +7 -0
  6. data/features/lib/rhc_helper/app.rb +8 -10
  7. data/features/lib/rhc_helper/domain.rb +2 -1
  8. data/features/lib/rhc_helper/runnable.rb +2 -24
  9. data/features/sshkey.feature +3 -3
  10. data/features/step_definitions/cartridge_steps.rb +6 -6
  11. data/features/step_definitions/client_steps.rb +0 -1
  12. data/features/step_definitions/sshkey_steps.rb +2 -2
  13. data/features/support/before_hooks.rb +0 -1
  14. data/features/support/env.rb +5 -3
  15. data/lib/rhc-common.rb +1 -1
  16. data/lib/rhc.rb +9 -8
  17. data/lib/rhc/auth.rb +3 -0
  18. data/lib/rhc/auth/basic.rb +54 -0
  19. data/lib/rhc/cartridge_helpers.rb +11 -5
  20. data/lib/rhc/cli.rb +4 -2
  21. data/lib/rhc/command_runner.rb +35 -30
  22. data/lib/rhc/commands.rb +127 -18
  23. data/lib/rhc/commands/account.rb +24 -0
  24. data/lib/rhc/commands/alias.rb +1 -1
  25. data/lib/rhc/commands/app.rb +210 -209
  26. data/lib/rhc/commands/apps.rb +22 -0
  27. data/lib/rhc/commands/base.rb +10 -77
  28. data/lib/rhc/commands/cartridge.rb +35 -35
  29. data/lib/rhc/commands/domain.rb +20 -13
  30. data/lib/rhc/commands/git_clone.rb +30 -0
  31. data/lib/rhc/commands/{port-forward.rb → port_forward.rb} +3 -3
  32. data/lib/rhc/commands/server.rb +28 -16
  33. data/lib/rhc/commands/setup.rb +18 -1
  34. data/lib/rhc/commands/snapshot.rb +4 -4
  35. data/lib/rhc/commands/sshkey.rb +4 -18
  36. data/lib/rhc/commands/tail.rb +32 -9
  37. data/lib/rhc/config.rb +168 -99
  38. data/lib/rhc/context_helper.rb +22 -9
  39. data/lib/rhc/core_ext.rb +41 -1
  40. data/lib/rhc/exceptions.rb +21 -5
  41. data/lib/rhc/git_helpers.rb +81 -0
  42. data/lib/rhc/help_formatter.rb +21 -1
  43. data/lib/rhc/helpers.rb +222 -87
  44. data/lib/rhc/output_helpers.rb +94 -110
  45. data/lib/rhc/rest.rb +15 -198
  46. data/lib/rhc/rest/api.rb +88 -0
  47. data/lib/rhc/rest/application.rb +29 -30
  48. data/lib/rhc/rest/attributes.rb +27 -0
  49. data/lib/rhc/rest/base.rb +29 -33
  50. data/lib/rhc/rest/cartridge.rb +42 -20
  51. data/lib/rhc/rest/client.rb +351 -89
  52. data/lib/rhc/rest/domain.rb +7 -13
  53. data/lib/rhc/rest/gear_group.rb +1 -1
  54. data/lib/rhc/rest/key.rb +7 -2
  55. data/lib/rhc/rest/mock.rb +609 -0
  56. data/lib/rhc/rest/user.rb +6 -2
  57. data/lib/rhc/{ssh_key_helpers.rb → ssh_helpers.rb} +58 -28
  58. data/lib/rhc/{targz.rb → tar_gz.rb} +0 -0
  59. data/lib/rhc/usage_templates/command_help.erb +4 -1
  60. data/lib/rhc/usage_templates/help.erb +24 -11
  61. data/lib/rhc/usage_templates/options_help.erb +14 -0
  62. data/lib/rhc/wizard.rb +283 -213
  63. data/spec/keys/example.pem +23 -0
  64. data/spec/keys/example_private.pem +27 -0
  65. data/spec/keys/server.pem +19 -0
  66. data/spec/rest_spec_helper.rb +3 -371
  67. data/spec/rhc/auth_spec.rb +226 -0
  68. data/spec/rhc/cli_spec.rb +41 -14
  69. data/spec/rhc/command_spec.rb +44 -15
  70. data/spec/rhc/commands/account_spec.rb +41 -0
  71. data/spec/rhc/commands/alias_spec.rb +16 -15
  72. data/spec/rhc/commands/app_spec.rb +115 -92
  73. data/spec/rhc/commands/apps_spec.rb +39 -0
  74. data/spec/rhc/commands/cartridge_spec.rb +134 -112
  75. data/spec/rhc/commands/domain_spec.rb +31 -86
  76. data/spec/rhc/commands/git_clone_spec.rb +56 -0
  77. data/spec/rhc/commands/{port-forward_spec.rb → port_forward_spec.rb} +27 -32
  78. data/spec/rhc/commands/server_spec.rb +28 -3
  79. data/spec/rhc/commands/setup_spec.rb +29 -11
  80. data/spec/rhc/commands/snapshot_spec.rb +4 -3
  81. data/spec/rhc/commands/sshkey_spec.rb +24 -56
  82. data/spec/rhc/commands/tail_spec.rb +26 -9
  83. data/spec/rhc/commands/threaddump_spec.rb +12 -11
  84. data/spec/rhc/config_spec.rb +211 -164
  85. data/spec/rhc/context_spec.rb +2 -0
  86. data/spec/rhc/helpers_spec.rb +242 -46
  87. data/spec/rhc/rest_application_spec.rb +42 -28
  88. data/spec/rhc/rest_client_spec.rb +110 -93
  89. data/spec/rhc/rest_spec.rb +220 -131
  90. data/spec/rhc/targz_spec.rb +1 -1
  91. data/spec/rhc/wizard_spec.rb +435 -624
  92. data/spec/spec.opts +1 -1
  93. data/spec/spec_helper.rb +140 -6
  94. data/spec/wizard_spec_helper.rb +326 -0
  95. metadata +163 -143
  96. data/lib/rhc/client.rb +0 -17
  97. data/lib/rhc/git_helper.rb +0 -59
@@ -0,0 +1,226 @@
1
+ require 'spec_helper'
2
+ require 'rhc/commands'
3
+
4
+ describe RHC::Auth::Basic do
5
+ let(:user){ 'test_user' }
6
+ let(:password){ 'test pass' }
7
+ let(:auth_hash){ {:user => user, :password => password} }
8
+ let(:options){ (o = Commander::Command::Options.new).default(default_options); o }
9
+ let(:default_options){ {} }
10
+
11
+ its(:username){ should be_nil }
12
+ its(:username?){ should be_false }
13
+ its(:password){ should be_nil }
14
+ its(:options){ should be_nil }
15
+ its(:openshift_server){ should == 'openshift.redhat.com' }
16
+
17
+ context "with user options" do
18
+ subject{ described_class.new(options) }
19
+
20
+ its(:username){ should be_nil }
21
+ its(:username?){ should be_false }
22
+ its(:password){ should be_nil }
23
+ its(:options){ should equal(options) }
24
+
25
+ context "that include user info" do
26
+ let(:default_options){ {:rhlogin => user, :password => password} }
27
+
28
+ its(:username){ should == user }
29
+ its(:username?){ should be_true }
30
+ its(:password){ should == password }
31
+ end
32
+
33
+ context "that includes server" do
34
+ let(:default_options){ {:server => 'test.com'} }
35
+
36
+ its(:openshift_server){ should == 'test.com' }
37
+ it do
38
+ subject.should_receive(:ask).with("Login to test.com: ").and_return(user)
39
+ subject.send(:ask_username).should == user
40
+ end
41
+ end
42
+
43
+ context "with --noprompt" do
44
+ let(:default_options){ {:noprompt => true} }
45
+
46
+ its(:ask_username){ should be_false }
47
+ its(:ask_password){ should be_false }
48
+ its(:username?){ should be_false }
49
+ it("should not retry") do
50
+ subject.should_not_receive(:ask_username)
51
+ subject.retry_auth?(mock(:status => 401)).should be_false
52
+ end
53
+ end
54
+ end
55
+
56
+ context "when initialized with a hash" do
57
+ subject{ described_class.new({:rhlogin => user, :password => password}) }
58
+ its(:username){ should == user }
59
+ its(:password){ should == password }
60
+ end
61
+
62
+
63
+ describe "#ask_username" do
64
+ before{ subject.should_receive(:openshift_server).and_return('test.com') }
65
+ before{ subject.should_receive(:ask).with("Login to test.com: ").and_return(user) }
66
+
67
+ it do
68
+ subject.send(:ask_username).should == user
69
+ subject.send(:username).should == user
70
+ end
71
+
72
+ context "with a different user" do
73
+ subject{ described_class.new('other', nil) }
74
+ it do
75
+ subject.send(:ask_username).should == user
76
+ subject.send(:username).should == user
77
+ end
78
+ end
79
+ end
80
+
81
+ describe "#ask_password" do
82
+ before{ subject.should_receive(:ask).with("Password: ").and_return(password) }
83
+ it do
84
+ subject.send(:ask_password).should == password
85
+ subject.send(:password).should == password
86
+ end
87
+
88
+ context "with a different password" do
89
+ subject{ described_class.new(user, 'other') }
90
+ it do
91
+ subject.send(:ask_password).should == password
92
+ subject.send(:password).should == password
93
+ end
94
+ end
95
+ end
96
+
97
+ describe "#to_request" do
98
+ let(:request){ {} }
99
+
100
+ context "when the request is lazy" do
101
+ let(:request){ {:lazy_auth => true} }
102
+ before{ subject.should_receive(:ask_username).never }
103
+ before{ subject.should_receive(:ask_password).never }
104
+
105
+ it { subject.to_request(request).should == request }
106
+ end
107
+
108
+ context "when password and user are provided" do
109
+ subject{ described_class.new(user, password) }
110
+
111
+ it { subject.to_request(request).should equal(request) }
112
+ it { subject.to_request(request).should == auth_hash }
113
+
114
+ context "it should remember cookies" do
115
+ let(:response){ mock(:cookies => [mock(:name => 'rh_sso', :value => '1')], :status => 200) }
116
+ it{ subject.retry_auth?(response); subject.to_request(request)[:cookies].should == {:rh_sso => '1'} }
117
+ end
118
+
119
+ context "when the request is lazy" do
120
+ let(:request){ {:lazy_auth => true} }
121
+
122
+ it { subject.to_request(request).should == auth_hash.merge(request) }
123
+ end
124
+ end
125
+
126
+ context "when password is not provided" do
127
+ subject{ described_class.new(user, nil) }
128
+
129
+ its(:password){ should be_nil }
130
+ it "should ask for the password" do
131
+ subject.should_receive(:ask_password).and_return(password)
132
+ subject.to_request(request).should == auth_hash
133
+ end
134
+ it "should remember the password" do
135
+ subject.should_receive(:ask_password).and_return(password)
136
+ subject.to_request(request)
137
+ subject.to_request(request).should == auth_hash
138
+ end
139
+
140
+ context "when the request is lazy" do
141
+ let(:request){ {:lazy_auth => true} }
142
+ before{ subject.should_receive(:ask_password).never }
143
+
144
+ it { subject.to_request(request).should == auth_hash.merge(request) }
145
+ end
146
+ end
147
+
148
+ context "when user is not provided" do
149
+ subject{ described_class.new(nil, password) }
150
+
151
+ its(:username){ should be_nil }
152
+ it "should ask for the username" do
153
+ subject.should_receive(:ask_username).and_return(user)
154
+ subject.to_request(request).should == auth_hash
155
+ end
156
+ it "should remember the username" do
157
+ subject.should_receive(:ask_username).and_return(user)
158
+ subject.to_request(request)
159
+ subject.to_request(request).should == auth_hash
160
+ end
161
+
162
+ context "when the request is lazy" do
163
+ let(:request){ {:lazy_auth => true} }
164
+ before{ subject.should_receive(:ask_username).never }
165
+
166
+ it { subject.to_request(request).should == auth_hash.merge(request) }
167
+ end
168
+ end
169
+ end
170
+
171
+ describe "#retry_auth?" do
172
+ context "when the response succeeds" do
173
+ let(:response){ mock(:cookies => {}, :status => 200) }
174
+
175
+ it{ subject.retry_auth?(response).should be_false }
176
+ after{ subject.cookie.should be_nil }
177
+ end
178
+ context "when the response succeeds with a cookie" do
179
+ let(:response){ mock(:cookies => [mock(:name => 'rh_sso', :value => '1')], :status => 200) }
180
+ it{ subject.retry_auth?(response).should be_false }
181
+ after{ subject.cookie.should == '1' }
182
+ end
183
+ context "when the response requires authentication" do
184
+ let(:response){ mock(:status => 401) }
185
+ after{ subject.cookie.should be_nil }
186
+
187
+ context "with no user and no password" do
188
+ subject{ described_class.new(nil, nil) }
189
+ it("should ask for user and password") do
190
+ subject.should_receive(:ask_username).and_return(user)
191
+ subject.should_receive(:ask_password).and_return(password)
192
+ subject.retry_auth?(response).should be_true
193
+ end
194
+ end
195
+
196
+ context "with user and no password" do
197
+ subject{ described_class.new(user, nil) }
198
+ it("should ask for password only") do
199
+ subject.should_receive(:ask_password).and_return(password)
200
+ subject.retry_auth?(response).should be_true
201
+ end
202
+ it("should ask for password twice") do
203
+ subject.should_receive(:ask_password).twice.and_return(password)
204
+ subject.retry_auth?(response).should be_true
205
+ subject.retry_auth?(response).should be_true
206
+ end
207
+ end
208
+
209
+ context "with user and password" do
210
+ subject{ described_class.new(user, password) }
211
+ it("should not prompt for reauthentication") do
212
+ subject.should_not_receive(:ask_password)
213
+ subject.should_receive(:error).with("Username or password is not correct")
214
+ subject.retry_auth?(response).should be_false
215
+ end
216
+
217
+ it "should forget a saved cookie" do
218
+ subject.instance_variable_set(:@cookie, '1')
219
+ subject.should_not_receive(:ask_password)
220
+ subject.should_receive(:error).with("Username or password is not correct")
221
+ subject.retry_auth?(response).should be_false
222
+ end
223
+ end
224
+ end
225
+ end
226
+ end
@@ -2,6 +2,15 @@ require 'spec_helper'
2
2
 
3
3
  describe RHC::CLI do
4
4
 
5
+ shared_examples_for 'a global help page' do
6
+ let(:arguments) { @arguments or raise "no arguments" }
7
+ it('should contain the program description') { run_output.should =~ /Command line interface for OpenShift/ }
8
+ it('should describe getting started') { run_output.should =~ /Getting started:/ }
9
+ it('should describe basic command') { run_output.should =~ /Working with apps:/ }
10
+ it('should mention the help command') { run_output.should =~ /See 'rhc help <command>'/ }
11
+ it('should mention the help options command') { run_output.should =~ /rhc help options/ }
12
+ end
13
+
5
14
  shared_examples_for 'a help page' do
6
15
  let(:arguments) { @arguments or raise "no arguments" }
7
16
  it('should contain the program description') { run_output.should =~ /Command line interface for OpenShift/ }
@@ -9,20 +18,30 @@ describe RHC::CLI do
9
18
  it('should provide a --config switch') { run_output.should =~ /\-\-config FILE/ }
10
19
  end
11
20
 
21
+ shared_examples_for 'a command-line options help page' do
22
+ let(:arguments) { @arguments or raise "no arguments" }
23
+ it('should contain an introduction') { run_output.should =~ /The following options can be passed to any/ }
24
+ it('should reference the configuration') { run_output.should match(".openshift/express.conf") }
25
+ it('should describe the --config switch') { run_output.should =~ /\-\-config FILE/ }
26
+ it('should describe the --ssl-version switch') { run_output.should =~ /\-\-ssl\-version VERSION/ }
27
+ end
28
+
12
29
  shared_examples_for 'an invalid command' do
13
30
  let(:arguments) { @arguments }
14
31
  it('should contain the invalid command message') { run_output.should =~ /is not recognized/ }
15
32
  it('should contain the arguments') { run_output.should include(@arguments[0]) }
16
33
  it('should reference --help') { run_output.should =~ / help\b/ }
17
34
  end
18
-
35
+
19
36
  shared_examples_for 'version output' do
20
37
  let(:arguments) { @arguments }
21
38
  it 'should contain version output' do
22
39
  run_output.should =~ /rhc \d+\.\d+(:?\.d+)?/
23
40
  end
24
41
  end
25
-
42
+
43
+ before{ base_config }
44
+
26
45
  describe "--version" do
27
46
  context "by itself" do
28
47
  before :each do
@@ -30,19 +49,17 @@ describe RHC::CLI do
30
49
  end
31
50
  it_should_behave_like 'version output'
32
51
  end
33
-
34
- context 'given as "-v"' do
35
- before :each do
36
- @arguments = ['-v']
37
- end
38
- it_should_behave_like 'version output'
39
- end
40
52
  end
41
53
 
42
54
  describe '#start' do
43
55
  context 'with no arguments' do
44
56
  before(:each) { @arguments = [] }
45
- it_should_behave_like 'a help page'
57
+ it_should_behave_like 'a global help page'
58
+ end
59
+
60
+ context 'with an ambiguous option' do
61
+ let(:arguments){ ['help', '-s'] }
62
+ it('should describe an ambiguous error'){ run_output.should match("The option -s is ambiguous. You will need to specify the entire option.") }
46
63
  end
47
64
 
48
65
  context 'with an invalid command' do
@@ -62,27 +79,37 @@ describe RHC::CLI do
62
79
 
63
80
  context 'with --help' do
64
81
  before(:each){ @arguments = ['--help'] }
65
- it_should_behave_like 'a help page'
82
+ it_should_behave_like 'a global help page'
66
83
  end
67
84
 
68
85
  context 'with -h' do
69
86
  before(:each){ @arguments = ['-h'] }
70
- it_should_behave_like 'a help page'
87
+ it_should_behave_like 'a global help page'
71
88
  end
72
89
 
73
90
  context 'with help' do
74
91
  before(:each){ @arguments = ['help'] }
75
- it_should_behave_like 'a help page'
92
+ it_should_behave_like 'a global help page'
93
+ end
94
+
95
+ context 'with help options' do
96
+ before(:each){ @arguments = ['help', 'options'] }
97
+ it_should_behave_like 'a command-line options help page'
76
98
  end
77
99
  end
78
100
 
79
101
  describe '#set_terminal' do
80
102
  before(:each) { mock_terminal }
81
103
  it('should update $terminal.wrap_at') do
82
- $stdin.should_receive(:tty?).and_return(true)
104
+ $stdin.should_receive(:tty?).twice.and_return(true)
83
105
  HighLine::SystemExtensions.should_receive(:terminal_size).and_return([5])
84
106
  expect { RHC::CLI.set_terminal }.to change($terminal, :wrap_at)
85
107
  end
108
+ it('should update $terminal.page_at') do
109
+ $stdin.should_receive(:tty?).twice.and_return(true)
110
+ $stdout.should_receive(:tty?).twice.and_return(true)
111
+ expect { RHC::CLI.set_terminal }.to change($terminal, :page_at)
112
+ end
86
113
  end
87
114
 
88
115
  end
@@ -3,6 +3,9 @@ require 'rhc/commands/base'
3
3
  require 'rhc/exceptions'
4
4
 
5
5
  describe RHC::Commands::Base do
6
+
7
+ before{ base_config }
8
+
6
9
  describe '#object_name' do
7
10
  subject { described_class }
8
11
  its(:object_name) { should == 'base' }
@@ -45,7 +48,6 @@ describe RHC::Commands::Base do
45
48
  it("should have an object name") { subject.object_name.should == 'test' }
46
49
  it("should run with wizard") do
47
50
  FakeFS do
48
- RHC::Config.set_defaults
49
51
  wizard_run = false
50
52
  RHC::Wizard.stub!(:new) do |config|
51
53
  RHC::Wizard.unstub!(:new)
@@ -80,6 +82,22 @@ describe RHC::Commands::Base do
80
82
  it("invokes the right method") { expects_running('static').should call(:run).on(instance).with(no_args) }
81
83
  end
82
84
 
85
+ context 'when a command calls exit' do
86
+ subject do
87
+ Kernel.module_eval do
88
+ class Failing < RHC::Commands::Base
89
+ def run
90
+ exit 2
91
+ end
92
+ end
93
+ end
94
+ Failing
95
+ end
96
+
97
+ it("invokes the right method") { expects_running('failing').should call(:run).on(instance).with(no_args) }
98
+ it{ expects_running('failing').should exit_with_code(2) }
99
+ end
100
+
83
101
  context 'when statically defined with no default method' do
84
102
  subject do
85
103
  Kernel.module_eval do
@@ -93,7 +111,7 @@ describe RHC::Commands::Base do
93
111
  alias_action :exe, :deprecated => true
94
112
  def execute(testarg); 1; end
95
113
 
96
- argument :args, "Test arg list", [], :arg_type => :list
114
+ argument :args, "Test arg list", ['--tests'], :arg_type => :list
97
115
  summary "Test command execute-list"
98
116
  def execute_list(args); 1; end
99
117
 
@@ -125,6 +143,10 @@ describe RHC::Commands::Base do
125
143
  it { expects_running('statis', 'execute', 'duparg', '--testarg', 'duparg2').should exit_with_code(1) }
126
144
  end
127
145
 
146
+ context 'and when the provided option is ambiguous' do
147
+ it { expects_running('static', 'execute', '-t', '--trace').should raise_error(OptionParser::AmbiguousOption) }
148
+ end
149
+
128
150
  context 'and when execute is called with too many arguments' do
129
151
  it { expects_running('static', 'execute', 'arg1', 'arg2').should exit_with_code(1) }
130
152
  end
@@ -136,6 +158,8 @@ describe RHC::Commands::Base do
136
158
  context 'and when execute_list is called' do
137
159
  it { expects_running('static', 'execute-list', '--trace').should call(:execute_list).on(instance).with([]) }
138
160
  it { expects_running('static', 'execute-list', '1', '2', '3').should call(:execute_list).on(instance).with(['1', '2', '3']) }
161
+ it { expects_running('static', 'execute-list', '1', '2', '3').should call(:execute_list).on(instance).with(['1', '2', '3']) }
162
+ it('should make the option available') { command_for('static', 'execute-list', '1', '2', '3').send(:options).tests.should == ['1','2','3'] }
139
163
  end
140
164
 
141
165
  context 'and when an error is raised in a call' do
@@ -166,20 +190,25 @@ describe RHC::Commands::Base do
166
190
  end
167
191
 
168
192
  describe "rest_client" do
169
- before do
170
- mock_terminal
171
- RHC::Rest::Client.stub!(:new) { |openshift_rest_node, username, password, debug| @username = username; @password = password; true}
172
- end
193
+ let(:auth){ mock }
194
+ before{ RHC::Auth::Basic.should_receive(:new).once.with(subject.send(:options)).and_return(auth) }
173
195
 
174
- it "should ask for username" do
175
- FakeFS do
176
- $terminal.write_line("testuser@foo.bar")
177
- $terminal.write_line("password")
178
- subject.send(:rest_client).should be_true
179
- @username.should == "testuser@foo.bar"
180
- subject.send(:config)["default_rhlogin"].should == @username
181
- @password.should == "password"
182
- end
196
+ it do
197
+ subject.should_receive(:client_from_options).with(:auth => auth)
198
+ subject.send(:rest_client)
183
199
  end
200
+ it { subject.send(:rest_client).should be_a(RHC::Rest::Client) }
201
+ it { subject.send(:rest_client).should equal subject.send(:rest_client) }
184
202
  end
185
203
  end
204
+
205
+ describe Commander::Command::Options do
206
+ it{ subject.foo = 'bar'; subject.foo.should == 'bar' }
207
+ it{ subject.foo = lambda{ 'bar' }; subject.foo.should == 'bar' }
208
+ it{ subject.foo = lambda{ 'bar' }; subject[:foo].should == 'bar' }
209
+ it{ subject.foo = lambda{ 'bar' }; subject['foo'].should == 'bar' }
210
+ it{ subject.foo = lambda{ 'bar' }; subject.__hash__[:foo].should be_a Proc }
211
+ it{ subject[:foo] = lambda{ 'bar' }; subject.foo.should == 'bar' }
212
+ it{ subject['foo'] = lambda{ 'bar' }; subject.foo.should == 'bar' }
213
+ it{ Commander::Command::Options.new(:foo => 1).foo.should == 1 }
214
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+ require 'rest_spec_helper'
3
+ require 'rhc'
4
+ require 'rhc/commands/account'
5
+
6
+ describe RHC::Commands::Account do
7
+
8
+ describe 'run' do
9
+ let(:arguments) { ['account'] }
10
+ let(:username) { 'foo' }
11
+ let(:password) { 'pass' }
12
+ let(:server) { mock_uri }
13
+ before{ user_config }
14
+ before do
15
+ stub_api(true)
16
+ stub_user
17
+ end
18
+
19
+ it('should display the correct user') { run_output.should =~ /Login:\s*#{username}/ }
20
+ it('should not show') { run_output.should_not =~ /Plan:/ }
21
+ it('should show the gear capabilities') { run_output.should =~ /Allowed Gear Sizes:\s*small/ }
22
+ it('should show the consumed gears') { run_output.should =~ /Gears Used:\s*0/ }
23
+ it('should show the maximum gears') { run_output.should =~ /Gears Allowed:\s*3/ }
24
+ it { expect { run }.should exit_with_code(0) }
25
+
26
+ context 'with a freeshift plan' do
27
+ let(:user_plan_id){ 'freeshift' }
28
+ it('should show') { run_output.should =~ /Plan:\s*FreeShift/ }
29
+ end
30
+
31
+ context 'with a megashift plan' do
32
+ let(:user_plan_id){ 'megashift' }
33
+ it('should show') { run_output.should =~ /Plan:\s*MegaShift/ }
34
+ end
35
+
36
+ context 'with a arbitrary plan' do
37
+ let(:user_plan_id){ 'other' }
38
+ it('should show') { run_output.should =~ /Plan:\s*Other/ }
39
+ end
40
+ end
41
+ end