vmc 0.5.0.beta.5 → 0.5.0.beta.6

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.
data/lib/vmc/cli.rb CHANGED
@@ -38,6 +38,9 @@ module VMC
38
38
  option :force, :desc => "Skip interaction when possible", :alias => "-f",
39
39
  :type => :boolean, :default => proc { input[:script] }
40
40
 
41
+ option :debug, :desc => "Print full stack trace (instead of crash log)",
42
+ :type => :boolean, :default => false
43
+
41
44
  option :quiet, :desc => "Simplify output format", :alias => "-q",
42
45
  :type => :boolean, :default => proc { input[:script] }
43
46
 
@@ -137,6 +140,7 @@ module VMC
137
140
  msg << ": #{e}" unless e.to_s.empty?
138
141
  msg << "\nFor more information, see #{VMC::CRASH_FILE}"
139
142
  err msg
143
+ raise if debug?
140
144
  end
141
145
 
142
146
  def log_error(e)
@@ -173,6 +177,10 @@ module VMC
173
177
  input[:force]
174
178
  end
175
179
 
180
+ def debug?
181
+ !!input[:debug]
182
+ end
183
+
176
184
  def color_enabled?
177
185
  input[:color]
178
186
  end
@@ -18,12 +18,21 @@ module VMC::Start
18
18
  fail "Passwords do not match."
19
19
  end
20
20
 
21
- with_progress("Creating user") do
22
- client.register(email, password)
23
- end
21
+ pw_strength = client.base.uaa.password_score(password)
22
+ msg = "Your password strength is: #{pw_strength}"
23
+
24
+ if pw_strength == :weak
25
+ fail msg
26
+ else
27
+ line msg
28
+
29
+ with_progress("Creating user") do
30
+ client.register(email, password)
31
+ end
24
32
 
25
- if input[:login]
26
- invoke :login, :username => email, :password => password
33
+ if input[:login]
34
+ invoke :login, :username => email, :password => password
35
+ end
27
36
  end
28
37
  end
29
38
 
@@ -23,15 +23,24 @@ module VMC::User
23
23
  verify = input[:verify]
24
24
 
25
25
  if new_password != verify
26
- fail "Passwords don't match."
26
+ fail "Passwords do not match."
27
27
  end
28
28
 
29
- with_progress("Changing password") do
30
- if v2?
31
- user.change_password!(new_password, password)
32
- else
33
- user.password = new_password
34
- user.update!
29
+ pw_strength = client.base.uaa.password_score(new_password)
30
+ msg = "Your password strength is: #{pw_strength}"
31
+
32
+ if pw_strength == :weak
33
+ fail msg
34
+ else
35
+ line msg
36
+
37
+ with_progress("Changing password") do
38
+ if v2?
39
+ user.change_password!(new_password, password)
40
+ else
41
+ user.password = new_password
42
+ user.update!
43
+ end
35
44
  end
36
45
  end
37
46
  end
data/lib/vmc/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module VMC
2
- VERSION = "0.5.0.beta.5".freeze
2
+ VERSION = "0.5.0.beta.6".freeze
3
3
  end
@@ -6,7 +6,7 @@ if ENV['VMC_TEST_USER'] && ENV['VMC_TEST_PASSWORD'] && ENV['VMC_TEST_TARGET']
6
6
  let(:username) { ENV['VMC_TEST_USER'] }
7
7
  let(:password) { ENV['VMC_TEST_PASSWORD'] }
8
8
  let(:output) { StringIO.new }
9
- let(:out) { output.string.gsub(/\. \x08([\x08\. ]+)/, "... ") } # trim animated dots
9
+ let(:out) { output.string.strip_progress_dots }
10
10
 
11
11
  let(:app) {
12
12
  fuzz =
data/spec/spec_helper.rb CHANGED
@@ -19,6 +19,10 @@ class String
19
19
  indent = min ? min.size : 0
20
20
  gsub(/^[ \t]{#{indent}}/, '')
21
21
  end
22
+
23
+ def strip_progress_dots
24
+ gsub(/\. \x08([\x08\. ]+)/, "... ")
25
+ end
22
26
  end
23
27
 
24
28
  def with_output_to(output = StringIO.new)
@@ -0,0 +1,14 @@
1
+ shared_examples_for 'inputs must have descriptions' do
2
+ describe 'inputs' do
3
+ subject { command.inputs }
4
+
5
+ it "is not missing any descriptions" do
6
+ subject.each do |_, attrs|
7
+ next if attrs[:hidden]
8
+
9
+ expect(attrs[:description]).to be
10
+ expect(attrs[:description].strip).to_not be_empty
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,7 +1,7 @@
1
1
  def vmc_ok(argv)
2
2
  with_output_to do |out|
3
3
  code = VMC::CLI.start(argv + ["--no-script"])
4
- yield strip_progress_dots(out.string) if block_given?
4
+ yield out.string.strip_progress_dots if block_given?
5
5
  expect(code).to eq 0
6
6
  end
7
7
  end
@@ -9,11 +9,7 @@ end
9
9
  def vmc_fail(argv)
10
10
  with_output_to do |out|
11
11
  code = VMC::CLI.start(argv + ["--no-script"])
12
- yield strip_progress_dots(out.string) if block_given?
12
+ yield out.string.strip_progress_dots if block_given?
13
13
  expect(code).to eq 1
14
14
  end
15
15
  end
16
-
17
- def strip_progress_dots(str)
18
- str.gsub(/\. \x08([\x08\. ]+)/, "... ")
19
- end
@@ -27,18 +27,7 @@ describe VMC::App::Delete do
27
27
  it { expect(Mothership::Help.group(:apps, :manage)).to include(subject) }
28
28
  end
29
29
 
30
- describe 'inputs' do
31
- subject { command.inputs }
32
-
33
- it "is not missing any descriptions" do
34
- subject.each do |input, attrs|
35
- next if attrs[:hidden]
36
-
37
- expect(attrs[:description]).to be
38
- expect(attrs[:description].strip).to_not be_empty
39
- end
40
- end
41
- end
30
+ include_examples 'inputs must have descriptions'
42
31
 
43
32
  describe 'arguments' do
44
33
  subject { command.arguments }
@@ -25,16 +25,7 @@ describe VMC::App::Push do
25
25
  it { expect(Mothership::Help.group(:apps, :manage)).to include(subject) }
26
26
  end
27
27
 
28
- describe 'inputs' do
29
- subject { command.inputs }
30
-
31
- it "is not missing any descriptions" do
32
- subject.each do |input, attrs|
33
- expect(attrs[:description]).to be
34
- expect(attrs[:description].strip).to_not be_empty
35
- end
36
- end
37
- end
28
+ include_examples 'inputs must have descriptions'
38
29
 
39
30
  describe 'arguments' do
40
31
  subject { command.arguments }
@@ -27,16 +27,7 @@ describe VMC::App::Rename do
27
27
  it { expect(Mothership::Help.group(:apps, :manage)).to include(subject) }
28
28
  end
29
29
 
30
- describe 'inputs' do
31
- subject { command.inputs }
32
-
33
- it "is not missing any descriptions" do
34
- subject.each do |input, attrs|
35
- expect(attrs[:description]).to be
36
- expect(attrs[:description].strip).to_not be_empty
37
- end
38
- end
39
- end
30
+ include_examples 'inputs must have descriptions'
40
31
 
41
32
  describe 'arguments' do
42
33
  subject { command.arguments }
@@ -34,16 +34,7 @@ describe VMC::Organization::Orgs do
34
34
  it { expect(Mothership::Help.group(:organizations)).to include(subject) }
35
35
  end
36
36
 
37
- describe 'inputs' do
38
- subject { command.inputs }
39
-
40
- it "is not missing any descriptions" do
41
- subject.each do |_, attrs|
42
- expect(attrs[:description]).to be
43
- expect(attrs[:description].strip).to_not be_empty
44
- end
45
- end
46
- end
37
+ include_examples 'inputs must have descriptions'
47
38
 
48
39
  describe 'arguments' do
49
40
  subject { command.arguments }
@@ -25,6 +25,8 @@ describe VMC::Route::Delete do
25
25
  it { expect(Mothership::Help.group(:routes)).to include(subject) }
26
26
  end
27
27
 
28
+ include_examples 'inputs must have descriptions'
29
+
28
30
  describe 'inputs' do
29
31
  subject { command.inputs }
30
32
  it { expect(subject[:route][:description]).to eq "Route to delete" }
@@ -10,16 +10,7 @@ describe VMC::Service::Bind do
10
10
  it { expect(Mothership::Help.group(:services, :manage)).to include(subject) }
11
11
  end
12
12
 
13
- describe 'inputs' do
14
- subject { command.inputs }
15
-
16
- it "is not missing any descriptions" do
17
- subject.each do |_, attrs|
18
- expect(attrs[:description]).to be
19
- expect(attrs[:description].strip).to_not be_empty
20
- end
21
- end
22
- end
13
+ include_examples 'inputs must have descriptions'
23
14
 
24
15
  describe 'arguments' do
25
16
  subject { command.arguments }
@@ -10,17 +10,7 @@ describe VMC::Service::Delete do
10
10
  it { expect(Mothership::Help.group(:services, :manage)).to include(subject) }
11
11
  end
12
12
 
13
- describe 'inputs' do
14
- subject { command.inputs }
15
-
16
- it "is not missing any descriptions" do
17
- subject.each do |_, attrs|
18
- next if attrs[:hidden]
19
- expect(attrs[:description]).to be
20
- expect(attrs[:description].strip).to_not be_empty
21
- end
22
- end
23
- end
13
+ include_examples 'inputs must have descriptions'
24
14
 
25
15
  describe 'arguments' do
26
16
  subject { command.arguments }
@@ -27,16 +27,7 @@ describe VMC::Service::Rename do
27
27
  it { expect(Mothership::Help.group(:services, :manage)).to include(subject) }
28
28
  end
29
29
 
30
- describe 'inputs' do
31
- subject { command.inputs }
32
-
33
- it "is not missing any descriptions" do
34
- subject.each do |input, attrs|
35
- expect(attrs[:description]).to be
36
- expect(attrs[:description].strip).to_not be_empty
37
- end
38
- end
39
- end
30
+ include_examples 'inputs must have descriptions'
40
31
 
41
32
  describe 'arguments' do
42
33
  subject { command.arguments }
@@ -10,16 +10,7 @@ describe VMC::Service::Service do
10
10
  it { expect(Mothership::Help.group(:services)).to include(subject) }
11
11
  end
12
12
 
13
- describe 'inputs' do
14
- subject { command.inputs }
15
-
16
- it "is not missing any descriptions" do
17
- subject.each do |_, attrs|
18
- expect(attrs[:description]).to be
19
- expect(attrs[:description].strip).to_not be_empty
20
- end
21
- end
22
- end
13
+ include_examples 'inputs must have descriptions'
23
14
 
24
15
  describe 'arguments' do
25
16
  subject { command.arguments }
@@ -10,16 +10,7 @@ describe VMC::Service::Unbind do
10
10
  it { expect(Mothership::Help.group(:services, :manage)).to include(subject) }
11
11
  end
12
12
 
13
- describe 'inputs' do
14
- subject { command.inputs }
15
-
16
- it "is not missing any descriptions" do
17
- subject.each do |input, attrs|
18
- expect(attrs[:description]).to be
19
- expect(attrs[:description].strip).to_not be_empty
20
- end
21
- end
22
- end
13
+ include_examples 'inputs must have descriptions'
23
14
 
24
15
  describe 'arguments' do
25
16
  subject { command.arguments }
@@ -28,16 +28,7 @@ describe VMC::Space::Rename do
28
28
  it { expect(Mothership::Help.group(:spaces)).to include(subject) }
29
29
  end
30
30
 
31
- describe 'inputs' do
32
- subject { command.inputs }
33
-
34
- it "is not missing any descriptions" do
35
- subject.each do |input, attrs|
36
- expect(attrs[:description]).to be
37
- expect(attrs[:description].strip).to_not be_empty
38
- end
39
- end
40
- end
31
+ include_examples 'inputs must have descriptions'
41
32
 
42
33
  describe 'arguments' do
43
34
  subject { command.arguments }
@@ -35,16 +35,7 @@ describe VMC::Space::Spaces do
35
35
  it { expect(Mothership::Help.group(:spaces)).to include(subject) }
36
36
  end
37
37
 
38
- describe 'inputs' do
39
- subject { command.inputs }
40
-
41
- it "is not missing any descriptions" do
42
- subject.each do |_, attrs|
43
- expect(attrs[:description]).to be
44
- expect(attrs[:description].strip).to_not be_empty
45
- end
46
- end
47
- end
38
+ include_examples 'inputs must have descriptions'
48
39
 
49
40
  describe 'arguments' do
50
41
  subject { command.arguments }
@@ -10,16 +10,7 @@ describe VMC::Start::Info do
10
10
  it { expect(Mothership::Help.group(:start)).to include(subject) }
11
11
  end
12
12
 
13
- describe 'inputs' do
14
- subject { command.inputs }
15
-
16
- it "is not missing any descriptions" do
17
- subject.each do |_, attrs|
18
- expect(attrs[:description]).to be
19
- expect(attrs[:description].strip).to_not be_empty
20
- end
21
- end
22
- end
13
+ include_examples 'inputs must have descriptions'
23
14
 
24
15
  describe 'flags' do
25
16
  subject { command.flags }
@@ -10,16 +10,7 @@ describe VMC::Start::Login do
10
10
  it { expect(Mothership::Help.group(:start)).to include(subject) }
11
11
  end
12
12
 
13
- describe 'inputs' do
14
- subject { command.inputs }
15
-
16
- it "is not missing any descriptions" do
17
- subject.each do |_, attrs|
18
- expect(attrs[:description]).to be
19
- expect(attrs[:description].strip).to_not be_empty
20
- end
21
- end
22
- end
13
+ include_examples 'inputs must have descriptions'
23
14
 
24
15
  describe 'flags' do
25
16
  subject { command.flags }
@@ -0,0 +1,144 @@
1
+ require 'spec_helper'
2
+
3
+ describe VMC::Start::Register do
4
+ describe 'metadata' do
5
+ let(:command) { Mothership.commands[:register] }
6
+
7
+ describe 'command' do
8
+ subject { command }
9
+ its(:description) { should eq "Create a user and log in" }
10
+ it { expect(Mothership::Help.group(:start)).to include(subject) }
11
+ end
12
+
13
+ include_examples 'inputs must have descriptions'
14
+
15
+ describe 'arguments' do
16
+ subject { command.arguments }
17
+ it 'have the correct commands' do
18
+ should eq [
19
+ {:type => :optional, :value => nil, :name => :email}
20
+ ]
21
+ end
22
+ end
23
+ end
24
+
25
+ describe '#register' do
26
+ let(:client) { FactoryGirl.build(:client) }
27
+ let(:output) { StringIO.new }
28
+ let(:out) { output.string }
29
+ let(:email) { "a@b.com" }
30
+ let(:password) { "password" }
31
+ let(:verify_password) { password }
32
+ let(:force) { false }
33
+ let(:login) { false }
34
+ let(:score) { :strong }
35
+
36
+ before do
37
+ stub(VMC::CLI).exit { |code| code }
38
+ any_instance_of(VMC::CLI) do |cli|
39
+ stub(cli).client { client }
40
+ stub(cli).precondition { nil }
41
+ end
42
+ stub(client).register
43
+ stub(client).base.stub!.uaa.stub!.password_score(password) { score }
44
+ end
45
+
46
+ subject do
47
+ with_output_to output do
48
+ VMC::CLI.start %W(register --email #{email} --password #{password} --verify #{verify_password} #{login ? '--login' : '--no-login'} #{force ? '--force' : '--no-force'} --debug)
49
+ end
50
+ end
51
+
52
+ context 'when the passwords dont match' do
53
+ let(:verify_password) { "other_password" }
54
+
55
+ it { should eq 1 }
56
+
57
+ it 'fails' do
58
+ subject
59
+ expect(out).to include "Passwords do not match."
60
+ end
61
+
62
+ it "doesn't print out the score" do
63
+ subject
64
+ expect(out).not_to include "strength"
65
+ end
66
+
67
+ it "doesn't log in or register" do
68
+ dont_allow(client).register
69
+ any_instance_of VMC::Start::Register do |register|
70
+ dont_allow(register).invoke
71
+ end
72
+ subject
73
+ end
74
+
75
+ context 'and the force flag is passed' do
76
+ let(:force) { true }
77
+
78
+ it "doesn't verify the password" do
79
+ mock(client).register(email, password)
80
+ subject
81
+ expect(out).not_to include "Passwords do not match."
82
+ end
83
+ end
84
+ end
85
+
86
+ context 'when the password is good or strong' do
87
+ it { should eq 0 }
88
+
89
+ it 'prints out the password score' do
90
+ subject
91
+ expect(out).to include "Your password strength is: strong"
92
+ end
93
+
94
+ it 'registers the user' do
95
+ mock(client).register(email, password)
96
+ subject
97
+ end
98
+
99
+ context 'and the login flag is true' do
100
+ let(:login) { true }
101
+
102
+ it 'logs in' do
103
+ any_instance_of VMC::Start::Register do |register|
104
+ mock(register).invoke(:login, :username => email, :password => password)
105
+ end
106
+ subject
107
+ end
108
+ end
109
+
110
+ context 'and the login flag is false' do
111
+ it "doesn't log in" do
112
+ any_instance_of VMC::Start::Register do |register|
113
+ dont_allow(register).invoke(:login, :username => email, :password => password)
114
+ end
115
+ subject
116
+ end
117
+ end
118
+ end
119
+
120
+ context 'when the password is weak' do
121
+ let(:score) { :weak }
122
+ let(:login) { true }
123
+
124
+ it { should eq 1 }
125
+
126
+ it 'prints out the password score' do
127
+ subject
128
+ expect(out).to include "Your password strength is: weak"
129
+ end
130
+
131
+ it "doesn't register" do
132
+ dont_allow(client).register(email, password)
133
+ subject
134
+ end
135
+
136
+ it "doesn't log in" do
137
+ any_instance_of VMC::Start::Register do |register|
138
+ dont_allow(register).invoke(:login, :username => email, :password => password)
139
+ end
140
+ subject
141
+ end
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,105 @@
1
+ require 'spec_helper'
2
+
3
+ describe VMC::User::Passwd do
4
+ describe 'metadata' do
5
+ let(:command) { Mothership.commands[:passwd] }
6
+
7
+ describe 'command' do
8
+ subject { command }
9
+ its(:description) { should eq "Update a user's password" }
10
+ it { expect(Mothership::Help.group(:admin, :user)).to include(subject) }
11
+ end
12
+
13
+ include_examples 'inputs must have descriptions'
14
+
15
+ describe 'arguments' do
16
+ subject { command.arguments }
17
+ it 'have the correct commands (with inconsistent user instead of email)' do
18
+ should eq [{:type => :optional, :value => nil, :name => :user}]
19
+ end
20
+ end
21
+ end
22
+
23
+ describe '#passwd' do
24
+ let(:client) { FactoryGirl.build(:client) }
25
+ let(:output) { StringIO.new }
26
+ let(:out) { output.string }
27
+ let(:old_password) { "old" }
28
+ let(:new_password) { "password" }
29
+ let(:verify_password) { new_password }
30
+ let(:score) { :strong }
31
+ let(:user) { FactoryGirl.build(:user) }
32
+
33
+ before do
34
+ stub(VMC::CLI).exit { |code| code }
35
+ any_instance_of(VMC::CLI) do |cli|
36
+ stub(cli).client { client }
37
+ stub(cli).precondition { nil }
38
+ end
39
+ stub(client).current_user { user }
40
+ stub(client).register
41
+ stub(client).base.stub!.uaa.stub!.password_score(new_password) { score }
42
+ end
43
+
44
+ subject do
45
+ with_output_to output do
46
+ VMC::CLI.start %W(passwd --password #{old_password} --new-password #{new_password} --verify #{verify_password} --force --debug)
47
+ end
48
+ end
49
+
50
+ context 'when the passwords dont match' do
51
+ let(:verify_password) { "other_password" }
52
+
53
+ it { should eq 1 }
54
+
55
+ it 'fails' do
56
+ subject
57
+ expect(out).to include "Passwords do not match."
58
+ end
59
+
60
+ it "doesn't print out the score" do
61
+ subject
62
+ expect(out).not_to include "strength"
63
+ end
64
+
65
+ it "doesn't log in or register" do
66
+ dont_allow(user).change_password!
67
+ subject
68
+ end
69
+ end
70
+
71
+ context 'when the password is good or strong' do
72
+ before do
73
+ stub(user).change_password!
74
+ end
75
+
76
+ it { should eq 0 }
77
+
78
+ it 'prints out the password score' do
79
+ subject
80
+ expect(out).to include "Your password strength is: strong"
81
+ end
82
+
83
+ it 'changes the password' do
84
+ mock(user).change_password!(new_password, old_password)
85
+ subject
86
+ end
87
+ end
88
+
89
+ context 'when the password is weak' do
90
+ let(:score) { :weak }
91
+
92
+ it { should eq 1 }
93
+
94
+ it 'prints out the password score' do
95
+ subject
96
+ expect(out).to include "Your password strength is: weak"
97
+ end
98
+
99
+ it "doesn't change the password" do
100
+ dont_allow(user).change_password!
101
+ subject
102
+ end
103
+ end
104
+ end
105
+ end
data/spec/vmc/cli_spec.rb CHANGED
@@ -4,9 +4,13 @@ describe VMC::CLI do
4
4
  let(:cmd) { Class.new(VMC::CLI).new }
5
5
 
6
6
  describe '#execute' do
7
+ let(:inputs) { {} }
8
+
7
9
  subject do
8
- stub(cmd).input { {} }
9
- cmd.execute(nil, [])
10
+ with_output_to do
11
+ stub(cmd).input { inputs }
12
+ cmd.execute(nil, [])
13
+ end
10
14
  end
11
15
 
12
16
  it 'wraps Timeout::Error with a more friendly message' do
@@ -15,6 +19,24 @@ describe VMC::CLI do
15
19
  mock(cmd).err "GET /foo timed out"
16
20
  subject
17
21
  end
22
+
23
+ context "when the debug flag is on" do
24
+ let(:inputs) { {:debug => true} }
25
+
26
+ it 'reraises' do
27
+ stub(cmd).precondition { raise StandardError.new }
28
+ expect { subject }.to raise_error(StandardError)
29
+ end
30
+ end
31
+
32
+ context "when the debug flag is off" do
33
+ it 'outputs the crash log message' do
34
+ stub(cmd).precondition { raise StandardError.new }
35
+ mock(cmd).err "StandardError: StandardError\nFor more information, see /Users/pivotal/workspace/vmc/vmc/spec/tmp/.vmc/crash"
36
+
37
+ expect { subject }.not_to raise_error(StandardError)
38
+ end
39
+ end
18
40
  end
19
41
  end
20
42
 
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vmc
3
3
  version: !ruby/object:Gem::Version
4
- hash: 244434823
4
+ hash: -504813842
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
9
  - 0
10
10
  - beta
11
- - 5
12
- version: 0.5.0.beta.5
11
+ - 6
12
+ version: 0.5.0.beta.6
13
13
  platform: ruby
14
14
  authors:
15
15
  - Alex Suraci
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2012-12-17 00:00:00 Z
20
+ date: 2012-12-19 00:00:00 Z
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
23
  name: json_pure
@@ -73,12 +73,12 @@ dependencies:
73
73
  requirements:
74
74
  - - ~>
75
75
  - !ruby/object:Gem::Version
76
- hash: 17
76
+ hash: 47
77
77
  segments:
78
78
  - 0
79
79
  - 4
80
- - 15
81
- version: 0.4.15
80
+ - 16
81
+ version: 0.4.16
82
82
  type: :runtime
83
83
  version_requirements: *id004
84
84
  - !ruby/object:Gem::Dependency
@@ -314,6 +314,7 @@ files:
314
314
  - spec/assets/hello-sinatra/main.rb
315
315
  - spec/features/new_user_flow_spec.rb
316
316
  - spec/spec_helper.rb
317
+ - spec/support/common_input_examples.rb
317
318
  - spec/support/feature_helpers.rb
318
319
  - spec/support/interact_helpers.rb
319
320
  - spec/vmc/cli/app/delete_spec.rb
@@ -332,6 +333,8 @@ files:
332
333
  - spec/vmc/cli/space/spaces_spec.rb
333
334
  - spec/vmc/cli/start/info_spec.rb
334
335
  - spec/vmc/cli/start/login_spec.rb
336
+ - spec/vmc/cli/start/register_spec.rb
337
+ - spec/vmc/cli/user/passwd_spec.rb
335
338
  - spec/vmc/cli_spec.rb
336
339
  - spec/vmc/detect_spec.rb
337
340
  - bin/vmc
@@ -375,6 +378,7 @@ test_files:
375
378
  - spec/assets/hello-sinatra/main.rb
376
379
  - spec/features/new_user_flow_spec.rb
377
380
  - spec/spec_helper.rb
381
+ - spec/support/common_input_examples.rb
378
382
  - spec/support/feature_helpers.rb
379
383
  - spec/support/interact_helpers.rb
380
384
  - spec/vmc/cli/app/delete_spec.rb
@@ -393,5 +397,7 @@ test_files:
393
397
  - spec/vmc/cli/space/spaces_spec.rb
394
398
  - spec/vmc/cli/start/info_spec.rb
395
399
  - spec/vmc/cli/start/login_spec.rb
400
+ - spec/vmc/cli/start/register_spec.rb
401
+ - spec/vmc/cli/user/passwd_spec.rb
396
402
  - spec/vmc/cli_spec.rb
397
403
  - spec/vmc/detect_spec.rb