boxen 3.0.0.beta1 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +0 -1
  3. data/README.md +1 -1
  4. data/boxen.gemspec +13 -13
  5. data/lib/boxen/check.rb +39 -8
  6. data/lib/boxen/cli.rb +45 -19
  7. data/lib/boxen/config.rb +61 -43
  8. data/lib/boxen/flags.rb +282 -0
  9. data/lib/boxen/hook.rb +8 -15
  10. data/lib/boxen/hook/github_issue.rb +120 -0
  11. data/lib/boxen/hook/web.rb +56 -0
  12. data/lib/boxen/keychain.rb +1 -1
  13. data/lib/boxen/postflight/env.rb +1 -1
  14. data/lib/boxen/preflight.rb +7 -4
  15. data/lib/boxen/preflight/creds.rb +47 -8
  16. data/lib/boxen/preflight/identity.rb +0 -2
  17. data/lib/boxen/preflight/os.rb +6 -2
  18. data/lib/boxen/puppeteer.rb +121 -0
  19. data/lib/boxen/runner.rb +149 -0
  20. data/script/bootstrap +1 -1
  21. data/script/tests +0 -1
  22. data/test/boxen/test.rb +1 -1
  23. data/test/boxen_check_test.rb +55 -0
  24. data/test/boxen_cli_test.rb +31 -8
  25. data/test/boxen_config_test.rb +31 -1
  26. data/test/boxen_directories_test.rb +4 -4
  27. data/test/boxen_flags_test.rb +217 -0
  28. data/test/{postflight/boxen_postflight_github_issue_test.rb → boxen_hook_github_issue_test.rb} +82 -72
  29. data/test/{postflight/boxen_postflight_web_hook_test.rb → boxen_hook_web_test.rb} +11 -12
  30. data/test/{postflight/boxen_postflight_active_test.rb → boxen_postflight_active_test.rb} +3 -3
  31. data/test/{postflight/boxen_postflight_env_test.rb → boxen_postflight_env_test.rb} +0 -0
  32. data/test/boxen_preflight_creds_test.rb +177 -0
  33. data/test/{preflight/boxen_preflight_etc_my_cnf_test.rb → boxen_preflight_etc_my_cnf_test.rb} +1 -1
  34. data/test/{preflight/boxen_preflight_rvm_test.rb → boxen_preflight_rvm_test.rb} +1 -1
  35. data/test/boxen_puppeteer_test.rb +101 -0
  36. data/test/boxen_runner_test.rb +171 -0
  37. metadata +172 -251
  38. data/lib/boxen/command.rb +0 -142
  39. data/lib/boxen/command/help.rb +0 -40
  40. data/lib/boxen/command/preflight.rb +0 -38
  41. data/lib/boxen/command/project.rb +0 -49
  42. data/lib/boxen/command/project/install.rb +0 -33
  43. data/lib/boxen/command/run.rb +0 -199
  44. data/lib/boxen/command/service.rb +0 -61
  45. data/lib/boxen/command/service/disable.rb +0 -15
  46. data/lib/boxen/command/service/enable.rb +0 -15
  47. data/lib/boxen/command/service/restart.rb +0 -24
  48. data/lib/boxen/command/version.rb +0 -29
  49. data/lib/boxen/command_status.rb +0 -15
  50. data/lib/boxen/postflight/github_issue.rb +0 -124
  51. data/lib/boxen/postflight/hooks.rb +0 -16
  52. data/lib/boxen/postflight/web_hook.rb +0 -63
  53. data/lib/boxen/preflight/facts.rb +0 -36
  54. data/lib/boxen/preflight/homebrew.rb +0 -13
  55. data/lib/boxen/preflight/offline.rb +0 -33
  56. data/lib/boxen/preflight/update.rb +0 -109
  57. data/lib/boxen/util/logging.rb +0 -59
  58. data/lib/boxen/version.rb +0 -3
  59. data/lib/system_timer.rb +0 -13
  60. data/test/boxen_command_test.rb +0 -93
  61. data/test/boxen_hook_test.rb +0 -25
  62. data/test/command/help_test.rb +0 -49
  63. data/test/command/project/install_test.rb +0 -34
  64. data/test/command/project_test.rb +0 -32
  65. data/test/command/run_test.rb +0 -21
  66. data/test/command/service/disable_test.rb +0 -49
  67. data/test/command/service/enable_test.rb +0 -49
  68. data/test/command/service/restart_test.rb +0 -53
  69. data/test/command/service_test.rb +0 -55
  70. data/test/command/version_test.rb +0 -15
  71. data/test/preflight/boxen_preflight_creds_test.rb +0 -82
  72. data/test/preflight/boxen_preflight_homebrew_test.rb +0 -10
  73. data/test/system_timer.rb +0 -10
@@ -1,18 +1,17 @@
1
- require 'boxen/test'
2
- require 'boxen/postflight'
3
- require 'boxen/postflight/web_hook'
1
+ require "boxen/test"
2
+ require "boxen/hook/web"
4
3
 
5
4
  class Boxen::Config
6
5
  attr_writer :api
7
6
  end
8
7
 
9
- class BoxenPostflightWebHookTest < Boxen::Test
8
+ class BoxenHookWebTest < Boxen::Test
10
9
  def setup
11
10
  @config = Boxen::Config.new
12
11
  @checkout = Boxen::Checkout.new(@config)
13
- @command = stub 'command', :success? => true
14
- @hook = Boxen::Postflight::WebHook.new @config, @command
15
- @hook.checkout = @checkout
12
+ @puppet = mock 'puppeteer'
13
+ @result = stub 'result', :success? => true
14
+ @hook = Boxen::Hook::Web.new @config, @checkout, @puppet, @result
16
15
  end
17
16
 
18
17
  def test_enabled
@@ -30,18 +29,18 @@ class BoxenPostflightWebHookTest < Boxen::Test
30
29
  ENV['BOXEN_WEB_HOOK_URL'] = original
31
30
  end
32
31
 
33
- def test_ok
32
+ def test_perform
34
33
  @hook.stubs(:enabled?).returns(false)
35
- assert @hook.ok?
34
+ refute @hook.perform?
36
35
 
37
36
  @hook.stubs(:enabled?).returns(true)
38
- refute @hook.ok?
37
+ assert @hook.perform?
39
38
  end
40
39
 
41
40
  def test_run
42
41
  @config.stubs(:user).returns('fred')
43
42
  @checkout.stubs(:sha).returns('87dbag3')
44
- @command.stubs(:success?).returns(false)
43
+ @result.stubs(:success?).returns(false)
45
44
  now = Time.now
46
45
  Time.stubs(:now).returns(now)
47
46
 
@@ -56,4 +55,4 @@ class BoxenPostflightWebHookTest < Boxen::Test
56
55
 
57
56
  @hook.run
58
57
  end
59
- end
58
+ end
@@ -3,7 +3,7 @@ require "boxen/postflight"
3
3
 
4
4
  class BoxenPostflightActiveTest < Boxen::Test
5
5
  def setup
6
- @check = Boxen::Postflight::Active.new :config, :command
6
+ @check = Boxen::Postflight::Active.new :config
7
7
  end
8
8
 
9
9
  def test_ok?
@@ -18,9 +18,9 @@ class BoxenPostflightActiveTest < Boxen::Test
18
18
 
19
19
  def test_run
20
20
  config = stub :envfile => "foo"
21
- @check = Boxen::Postflight::Active.new config, :command
21
+ @check = Boxen::Postflight::Active.new config
22
22
 
23
- _, stderr = capture_io do
23
+ stdout, stderr = capture_io do
24
24
  @check.run
25
25
  end
26
26
 
@@ -0,0 +1,177 @@
1
+ require 'boxen/test'
2
+ require 'boxen/config'
3
+ require 'boxen/preflight/creds'
4
+
5
+ class BoxenPreflightCredsTest < Boxen::Test
6
+ # Make a struct to use for stubbing out authorization objects.
7
+ Struct.new("Authorization", :id, :note, :fingerprint, :token)
8
+
9
+ def setup
10
+ @config = Boxen::Config.new do |c|
11
+ c.user = 'mojombo'
12
+ c.token = 'sekr3t!'
13
+ end
14
+ ENV.delete("BOXEN_GITHUB_LOGIN")
15
+ ENV.delete("BOXEN_GITHUB_PASSWORD")
16
+ end
17
+
18
+ def test_basic
19
+ preflight = Boxen::Preflight::Creds.new @config
20
+
21
+ error = Octokit::Unauthorized.new
22
+ @config.api.stubs(:user).raises(error)
23
+
24
+ refute preflight.ok?
25
+ end
26
+
27
+ def test_basic_with_otp_challenge
28
+ preflight = Boxen::Preflight::Creds.new @config
29
+
30
+ blank_opt = {:headers => {}}
31
+ good_otp = {:headers => {"X-GitHub-OTP" => "123456"}}
32
+
33
+ error = Octokit::OneTimePasswordRequired.new
34
+ error.stubs(:message).returns("OTP")
35
+
36
+ preflight.tmp_api.expects(:authorizations).with(blank_opt).raises(error)
37
+ preflight.tmp_api.expects(:authorizations).with(good_otp).returns([])
38
+ preflight.tmp_api.expects(:create_authorization).raises(error)
39
+
40
+ preflight.expects(:warn)
41
+ HighLine.any_instance.expects(:ask).returns("123456")
42
+
43
+ preflight.get_tokens
44
+ assert_equal "123456", preflight.otp
45
+ end
46
+
47
+ def test_fetch_login_and_password_when_nothing_is_given_in_env
48
+ # fetches login and password by asking
49
+ preflight = Boxen::Preflight::Creds.new @config
50
+ HighLine.any_instance.expects(:ask).with("GitHub login: ").returns "l"
51
+ HighLine.any_instance.expects(:ask).with("GitHub password: ").returns "p"
52
+ preflight.send(:fetch_login_and_password)
53
+
54
+ assert_equal "l", @config.login
55
+ assert_equal "p", preflight.instance_variable_get(:@password)
56
+ end
57
+
58
+ def test_fetch_password_when_login_is_given_in_env
59
+ # fetches only password by asking
60
+ ENV["BOXEN_GITHUB_LOGIN"] = "l"
61
+ preflight = Boxen::Preflight::Creds.new @config
62
+ preflight.expects(:warn)
63
+ HighLine.any_instance.expects(:ask).with("GitHub login: ").never
64
+ HighLine.any_instance.expects(:ask).with("GitHub password: ").returns "p"
65
+ preflight.send(:fetch_login_and_password)
66
+
67
+ assert_equal "l", @config.login
68
+ assert_equal "p", preflight.instance_variable_get(:@password)
69
+ end
70
+
71
+ def test_fetch_login_when_password_is_given_in_env
72
+ # fetches only login by asking
73
+ ENV["BOXEN_GITHUB_PASSWORD"] = "p"
74
+ preflight = Boxen::Preflight::Creds.new @config
75
+ preflight.expects(:warn)
76
+ HighLine.any_instance.expects(:ask).with("GitHub login: ").returns "l"
77
+ HighLine.any_instance.expects(:ask).with("GitHub password: ").never
78
+ preflight.send(:fetch_login_and_password)
79
+
80
+ assert_equal "l", @config.login
81
+ assert_equal "p", preflight.instance_variable_get(:@password)
82
+ end
83
+
84
+ def test_run_with_existing_token
85
+ preflight = Boxen::Preflight::Creds.new @config
86
+ note = "App1"
87
+ fingerprint = "Fingerprint1"
88
+ existing_token = Struct::Authorization.new(1, note, fingerprint, "Token1")
89
+
90
+ preflight.stubs(:fetch_login_and_password).returns("")
91
+ preflight.stubs(:get_tokens).returns([existing_token])
92
+ preflight.stubs(:note).returns(note)
93
+ preflight.stubs(:fingerprint).returns(fingerprint)
94
+ preflight.stubs(:ok?).returns(true)
95
+ preflight.tmp_api.expects(:delete_authorization).with(existing_token.id, :headers => {})
96
+ preflight.tmp_api.expects(:create_authorization).with(
97
+ :note => note,
98
+ :fingerprint => fingerprint,
99
+ :scopes => %w(repo user),
100
+ :headers => {}
101
+ ).returns(existing_token)
102
+
103
+ preflight.run
104
+ end
105
+
106
+ def test_run_with_no_existing_token
107
+ preflight = Boxen::Preflight::Creds.new @config
108
+ note = "App1"
109
+ fingerprint = "Fingerprint1"
110
+ new_token = Struct::Authorization.new(1, note, fingerprint, "Token1")
111
+
112
+ preflight.stubs(:fetch_login_and_password).returns("")
113
+ preflight.stubs(:get_tokens).returns([])
114
+ preflight.stubs(:note).returns(note)
115
+ preflight.stubs(:fingerprint).returns(fingerprint)
116
+ preflight.stubs(:ok?).returns(true)
117
+ preflight.tmp_api.expects(:delete_authorization).never
118
+ preflight.tmp_api.expects(:create_authorization).with(
119
+ :note => note,
120
+ :fingerprint => fingerprint,
121
+ :scopes => %w(repo user),
122
+ :headers => {}
123
+ ).returns(new_token)
124
+
125
+ preflight.run
126
+ end
127
+
128
+ def test_run_does_not_delete_unrelated_tokens
129
+ preflight = Boxen::Preflight::Creds.new @config
130
+ note = "App1"
131
+ fingerprint = "Fingerprint1"
132
+ new_token = Struct::Authorization.new(1, note, fingerprint, "Token1")
133
+ unrelated_token = Struct::Authorization.new(2, "App2", fingerprint, "Token2")
134
+ unrelated_token_with_fingerprint = Struct::Authorization.new(3, "App3", "Fingerprint3", "Token3")
135
+
136
+ preflight.stubs(:fetch_login_and_password).returns("")
137
+ preflight.stubs(:get_tokens).returns(
138
+ [unrelated_token, unrelated_token_with_fingerprint]
139
+ )
140
+ preflight.stubs(:note).returns(note)
141
+ preflight.stubs(:fingerprint).returns(fingerprint)
142
+ preflight.stubs(:ok?).returns(true)
143
+ preflight.tmp_api.expects(:delete_authorization).never
144
+ preflight.tmp_api.expects(:create_authorization).with(
145
+ :note => note,
146
+ :fingerprint => fingerprint,
147
+ :scopes => %w(repo user),
148
+ :headers => {}
149
+ ).returns(new_token)
150
+
151
+ preflight.run
152
+ end
153
+
154
+ def test_run_does_delete_legacy_token
155
+ preflight = Boxen::Preflight::Creds.new @config
156
+ note = "App1"
157
+ fingerprint = "Fingerprint1"
158
+ existing_token = Struct::Authorization.new(1, note, fingerprint, "Token1")
159
+ legacy_token = Struct::Authorization.new(2, "Boxen", nil, "Token2")
160
+
161
+ preflight.stubs(:fetch_login_and_password).returns("")
162
+ preflight.stubs(:get_tokens).returns([existing_token, legacy_token])
163
+ preflight.stubs(:note).returns(note)
164
+ preflight.stubs(:fingerprint).returns(fingerprint)
165
+ preflight.stubs(:ok?).returns(true)
166
+ preflight.tmp_api.expects(:delete_authorization).with(2, :headers => {})
167
+ preflight.tmp_api.expects(:delete_authorization).with(1, :headers => {})
168
+ preflight.tmp_api.expects(:create_authorization).with(
169
+ :note => note,
170
+ :fingerprint => fingerprint,
171
+ :scopes => %w(repo user),
172
+ :headers => {}
173
+ ).returns(existing_token)
174
+
175
+ preflight.run
176
+ end
177
+ end
@@ -3,7 +3,7 @@ require 'boxen/preflight/etc_my_cnf'
3
3
 
4
4
  class BoxenPreflightEtcMyCnfTest < Boxen::Test
5
5
  def test_file_check
6
- preflight = Boxen::Preflight::EtcMyCnf.new(mock('config'), mock('command'))
6
+ preflight = Boxen::Preflight::EtcMyCnf.new(mock('config'))
7
7
  File.expects(:file?).with("/etc/my.cnf").returns(false)
8
8
  assert preflight.ok?
9
9
  end
@@ -3,7 +3,7 @@ require 'boxen/preflight/rvm'
3
3
 
4
4
  class BoxenPreflightRVMTest < Boxen::Test
5
5
  def test_directory_check
6
- preflight = Boxen::Preflight::RVM.new(mock('config'), mock('command'))
6
+ preflight = Boxen::Preflight::RVM.new(mock('config'))
7
7
  File.expects(:exist?).with("#{ENV['HOME']}/.rvm").returns(false)
8
8
  assert preflight.ok?
9
9
  end
@@ -0,0 +1,101 @@
1
+ require "boxen/test"
2
+ require "boxen/puppeteer"
3
+
4
+ class BoxenPuppeteerTest < Boxen::Test
5
+ def test_initialize
6
+ puppet = Boxen::Puppeteer.new :config
7
+ assert_equal :config, puppet.config
8
+ end
9
+
10
+ def test_flags
11
+ config = stub do
12
+ stubs(:homedir).returns "homedir"
13
+ stubs(:logfile).returns "logfile"
14
+ stubs(:profile?).returns true
15
+ stubs(:future_parser?).returns true
16
+ stubs(:puppetdir).returns "puppetdir"
17
+ stubs(:repodir).returns "repodir"
18
+ stubs(:debug?).returns true
19
+ stubs(:pretend?).returns true
20
+ stubs(:report?).returns false
21
+ stubs(:graph?).returns false
22
+ stubs(:color?).returns false
23
+ end
24
+
25
+ puppet = Boxen::Puppeteer.new config
26
+ flags = puppet.flags
27
+
28
+ assert_flag "--debug", flags
29
+ assert_flag "--detailed-exitcodes", flags
30
+ assert_flag "--evaltrace", flags
31
+ assert_flag "--no-report", flags
32
+ assert_flag "--noop", flags
33
+ assert_flag "--summarize", flags
34
+ assert_flag "--color=false", flags
35
+ assert_flag "--parser=future", flags
36
+
37
+ assert_flag_value "--confdir", :anything, flags
38
+ assert_flag_value "--group", "admin", flags
39
+ assert_flag_value "--vardir", :anything, flags
40
+ assert_flag_value "--libdir", :anything, flags
41
+ assert_flag_value "--manifestdir", :anything, flags
42
+ assert_flag_value "--modulepath", :anything, flags
43
+
44
+ assert_flag_value "--hiera_config", "/dev/null", flags
45
+
46
+ assert_flag_value "--logdest", "logfile", flags
47
+ assert_flag_value "--logdest", "console", flags
48
+ end
49
+
50
+ def test_run
51
+ config = stub do
52
+ stubs(:debug?).returns false
53
+ stubs(:homedir).returns "homedir"
54
+ stubs(:logfile).returns "logfile"
55
+ stubs(:pretend?).returns false
56
+ stubs(:profile?).returns false
57
+ stubs(:future_parser?).returns false
58
+ stubs(:report?).returns false
59
+ stubs(:graph?).returns false
60
+ stubs(:puppetdir).returns "puppetdir"
61
+ stubs(:repodir).returns "test/fixtures/repo"
62
+ stubs(:color?).returns true
63
+ end
64
+
65
+ puppet = Boxen::Puppeteer.new config
66
+
67
+ FileUtils.expects(:rm_f).with config.logfile
68
+ FileUtils.expects(:touch).with config.logfile
69
+ FileUtils.expects(:mkdir_p).with File.dirname(config.logfile)
70
+ FileUtils.expects(:mkdir_p).with config.puppetdir
71
+ Boxen::Util.expects(:sudo).with *puppet.command
72
+
73
+ puppet.run
74
+ end
75
+
76
+ def assert_flag(flag, flags)
77
+ assert flags.include?(flag), "Flags must include #{flag}."
78
+ end
79
+
80
+ def assert_flag_value(flag, value, flags)
81
+ pair = [flag, value]
82
+
83
+ found = (0..flags.size).detect do |i|
84
+ candidate = flags[i, pair.size]
85
+ value == :anything ? candidate.size == pair.size : candidate == pair
86
+ end
87
+
88
+ assert found, "Flags must include #{flag} #{value}."
89
+ end
90
+
91
+ def test_status
92
+ status = Boxen::Puppeteer::Status.new(0)
93
+ assert status.success?
94
+
95
+ status = Boxen::Puppeteer::Status.new(2)
96
+ assert status.success?
97
+
98
+ status = Boxen::Puppeteer::Status.new(1)
99
+ refute status.success?
100
+ end
101
+ end
@@ -0,0 +1,171 @@
1
+ require "boxen/test"
2
+ require "boxen/runner"
3
+
4
+ class BoxenRunnerTest < Boxen::Test
5
+ def setup
6
+ @config = Boxen::Config.new
7
+ @flags = Boxen::Flags.new
8
+ @runner = Boxen::Runner.new(@config, @flags)
9
+
10
+ $stdout.stubs(:puts).returns(true)
11
+ $stdout.stubs(:write).returns(true)
12
+ end
13
+
14
+ def test_initialize
15
+ config = Boxen::Config.new
16
+ flags = Boxen::Flags.new
17
+
18
+ runner = Boxen::Runner.new(config, flags)
19
+
20
+ assert_equal config, runner.config
21
+ assert_equal flags, runner.flags
22
+ assert_equal config, runner.puppet.config
23
+ end
24
+
25
+ HookYes = Struct.new(:config, :checkout, :puppet, :result)
26
+ HookNo = Struct.new(:config, :checkout, :puppet, :result)
27
+ def test_report
28
+ runner = Boxen::Runner.new(@config, @flags)
29
+ runner.stubs(:hooks).returns([HookYes, HookNo])
30
+
31
+ hook_yes = stub('HookYes')
32
+ hook_no = stub('HookNo')
33
+
34
+ HookYes.stubs(:new).returns(hook_yes)
35
+ HookNo.stubs(:new).returns(hook_no)
36
+
37
+ hook_yes.expects(:run).once
38
+ hook_no.expects(:run).once
39
+
40
+ runner.report(stub('result'))
41
+ end
42
+
43
+ def test_disable_service
44
+ config = Boxen::Config.new
45
+ flags = Boxen::Flags.new('--disable-service', 'test')
46
+ runner = Boxen::Runner.new config, flags
47
+
48
+ service = mock('service', :disable => true)
49
+ Boxen::Service.stubs(:new).returns(service)
50
+
51
+ assert_raises(SystemExit) do
52
+ runner.process
53
+ end
54
+ end
55
+
56
+ def test_enable_service
57
+ config = Boxen::Config.new
58
+ flags = Boxen::Flags.new('--enable-service', 'test')
59
+ runner = Boxen::Runner.new config, flags
60
+
61
+ service = mock('service', :enable => true)
62
+ Boxen::Service.stubs(:new).returns(service)
63
+
64
+ assert_raises(SystemExit) do
65
+ runner.process
66
+ end
67
+ end
68
+
69
+ def test_restart_service
70
+ config = Boxen::Config.new
71
+ flags = Boxen::Flags.new('--restart-service', 'test')
72
+ runner = Boxen::Runner.new config, flags
73
+
74
+ service = mock('service')
75
+ service.expects(:disable).once
76
+ service.expects(:enable).once
77
+
78
+ Boxen::Service.stubs(:new).returns(service)
79
+
80
+ assert_raises(SystemExit) do
81
+ runner.process
82
+ end
83
+ end
84
+
85
+ def test_disable_services
86
+ config = Boxen::Config.new
87
+ flags = Boxen::Flags.new('--disable-services')
88
+ runner = Boxen::Runner.new config, flags
89
+
90
+ services = Array.new(3) { mock('service', :disable => true) }
91
+ Boxen::Service.stubs(:list).returns(services)
92
+
93
+ assert_raises(SystemExit) do
94
+ runner.process
95
+ end
96
+ end
97
+
98
+ def test_enable_services
99
+ config = Boxen::Config.new
100
+ flags = Boxen::Flags.new('--enable-services')
101
+ runner = Boxen::Runner.new config, flags
102
+
103
+ services = Array.new(3) { mock('service', :enable => true) }
104
+ Boxen::Service.stubs(:list).returns(services)
105
+
106
+ assert_raises(SystemExit) do
107
+ runner.process
108
+ end
109
+ end
110
+
111
+ def test_restart_services
112
+ config = Boxen::Config.new
113
+ flags = Boxen::Flags.new('--restart-services')
114
+ runner = Boxen::Runner.new config, flags
115
+
116
+ services = Array.new(3) { mock('service') }
117
+ services.each do |service|
118
+ service.expects(:disable).once
119
+ service.expects(:enable).once
120
+ end
121
+ Boxen::Service.stubs(:list_enabled).returns(services)
122
+
123
+ assert_raises(SystemExit) do
124
+ runner.process
125
+ end
126
+ end
127
+
128
+ def test_list_services
129
+ config = Boxen::Config.new
130
+ flags = Boxen::Flags.new('--list-services')
131
+ runner = Boxen::Runner.new config, flags
132
+
133
+ Boxen::Service.expects(:list).returns(%w[a list of services])
134
+
135
+ assert_raises(SystemExit) do
136
+ runner.process
137
+ end
138
+ end
139
+
140
+ def test_specify_project
141
+ skip "busted and probably due to be replaced if @jbarnette can fix it"
142
+ fact = 'cli_boxen_projects'
143
+ refute Facter.value(fact)
144
+
145
+ project = 'some_project'
146
+ flags = Boxen::Flags.new(project)
147
+
148
+ runner = Boxen::Runner.new(@config, flags)
149
+ runner.puppet.expects(:run).with().returns(true)
150
+ runner.process
151
+ assert_equal project, Facter.value(fact)
152
+
153
+
154
+ project = 'other_project'
155
+ flags = Boxen::Flags.new('--debug', project)
156
+
157
+ runner = Boxen::Runner.new(@config, flags)
158
+ runner.puppet.expects(:run).with().returns(true)
159
+ runner.process
160
+ assert_equal project, Facter.value(fact)
161
+
162
+
163
+ projects = %w[my cool projects]
164
+ flags = Boxen::Flags.new('--noop', *projects)
165
+
166
+ runner = Boxen::Runner.new(@config, flags)
167
+ runner.puppet.expects(:run).with().returns(true)
168
+ runner.process
169
+ assert_equal projects.join(','), Facter.value(fact)
170
+ end
171
+ end