boxen23 3.1.3a

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.travis.yml +6 -0
  4. data/Gemfile +2 -0
  5. data/LICENSE +20 -0
  6. data/README.md +50 -0
  7. data/boxen.gemspec +29 -0
  8. data/lib/boxen/check.rb +72 -0
  9. data/lib/boxen/checkout.rb +25 -0
  10. data/lib/boxen/cli.rb +61 -0
  11. data/lib/boxen/config.rb +345 -0
  12. data/lib/boxen/error.rb +4 -0
  13. data/lib/boxen/flags.rb +291 -0
  14. data/lib/boxen/hook.rb +47 -0
  15. data/lib/boxen/hook/github_issue.rb +120 -0
  16. data/lib/boxen/hook/web.rb +56 -0
  17. data/lib/boxen/keychain.rb +61 -0
  18. data/lib/boxen/postflight.rb +13 -0
  19. data/lib/boxen/postflight/active.rb +16 -0
  20. data/lib/boxen/postflight/env.rb +29 -0
  21. data/lib/boxen/preflight.rb +13 -0
  22. data/lib/boxen/preflight/creds.rb +149 -0
  23. data/lib/boxen/preflight/directories.rb +32 -0
  24. data/lib/boxen/preflight/etc_my_cnf.rb +12 -0
  25. data/lib/boxen/preflight/identity.rb +16 -0
  26. data/lib/boxen/preflight/os.rb +33 -0
  27. data/lib/boxen/preflight/rbenv.rb +12 -0
  28. data/lib/boxen/preflight/rvm.rb +12 -0
  29. data/lib/boxen/project.rb +20 -0
  30. data/lib/boxen/puppeteer.rb +122 -0
  31. data/lib/boxen/runner.rb +149 -0
  32. data/lib/boxen/service.rb +58 -0
  33. data/lib/boxen/util.rb +19 -0
  34. data/lib/facter/boxen.rb +34 -0
  35. data/script/Boxen +0 -0
  36. data/script/bootstrap +7 -0
  37. data/script/build-keychain-helper +6 -0
  38. data/script/release +38 -0
  39. data/script/tests +10 -0
  40. data/src/keychain-helper.c +85 -0
  41. data/test/boxen/test.rb +7 -0
  42. data/test/boxen_check_test.rb +55 -0
  43. data/test/boxen_checkout_test.rb +42 -0
  44. data/test/boxen_cli_test.rb +39 -0
  45. data/test/boxen_config_test.rb +400 -0
  46. data/test/boxen_directories_test.rb +40 -0
  47. data/test/boxen_flags_test.rb +223 -0
  48. data/test/boxen_hook_github_issue_test.rb +294 -0
  49. data/test/boxen_hook_web_test.rb +58 -0
  50. data/test/boxen_keychain_test.rb +21 -0
  51. data/test/boxen_postflight_active_test.rb +29 -0
  52. data/test/boxen_postflight_env_test.rb +6 -0
  53. data/test/boxen_preflight_creds_test.rb +177 -0
  54. data/test/boxen_preflight_etc_my_cnf_test.rb +10 -0
  55. data/test/boxen_preflight_rvm_test.rb +10 -0
  56. data/test/boxen_project_test.rb +14 -0
  57. data/test/boxen_puppeteer_test.rb +101 -0
  58. data/test/boxen_runner_test.rb +171 -0
  59. data/test/boxen_service_test.rb +39 -0
  60. data/test/boxen_util_test.rb +21 -0
  61. data/test/fixtures/repo/modules/projects/manifests/first-project.pp +0 -0
  62. data/test/fixtures/repo/modules/projects/manifests/second-project.pp +0 -0
  63. metadata +257 -0
@@ -0,0 +1,58 @@
1
+ require "boxen/test"
2
+ require "boxen/hook/web"
3
+
4
+ class Boxen::Config
5
+ attr_writer :api
6
+ end
7
+
8
+ class BoxenHookWebTest < Boxen::Test
9
+ def setup
10
+ @config = Boxen::Config.new
11
+ @checkout = Boxen::Checkout.new(@config)
12
+ @puppet = mock 'puppeteer'
13
+ @result = stub 'result', :success? => true
14
+ @hook = Boxen::Hook::Web.new @config, @checkout, @puppet, @result
15
+ end
16
+
17
+ def test_enabled
18
+ original = ENV['BOXEN_WEB_HOOK_URL']
19
+
20
+ ENV['BOXEN_WEB_HOOK_URL'] = nil
21
+ refute @hook.enabled?
22
+
23
+ ENV['BOXEN_WEB_HOOK_URL'] = ''
24
+ refute @hook.enabled?
25
+
26
+ ENV['BOXEN_WEB_HOOK_URL'] = '1'
27
+ assert @hook.enabled?
28
+
29
+ ENV['BOXEN_WEB_HOOK_URL'] = original
30
+ end
31
+
32
+ def test_perform
33
+ @hook.stubs(:enabled?).returns(false)
34
+ refute @hook.perform?
35
+
36
+ @hook.stubs(:enabled?).returns(true)
37
+ assert @hook.perform?
38
+ end
39
+
40
+ def test_run
41
+ @config.stubs(:user).returns('fred')
42
+ @checkout.stubs(:sha).returns('87dbag3')
43
+ @result.stubs(:success?).returns(false)
44
+ now = Time.now
45
+ Time.stubs(:now).returns(now)
46
+
47
+ @hook.stubs(:enabled?).returns(true)
48
+
49
+ @hook.expects(:post_web_hook).with({
50
+ :login => 'fred',
51
+ :sha => '87dbag3',
52
+ :status => 'failure',
53
+ :time => "#{now.utc.to_i}"
54
+ })
55
+
56
+ @hook.run
57
+ end
58
+ end
@@ -0,0 +1,21 @@
1
+ require 'boxen/test'
2
+ require "boxen/util"
3
+ require 'boxen/keychain'
4
+
5
+ class BoxenKeychainTest < Boxen::Test
6
+ def setup
7
+ @keychain = Boxen::Keychain.new('test') if Boxen::Util.osx?
8
+ end
9
+
10
+ def test_get_token
11
+ return skip('Keychain helper is OSX only') unless Boxen::Util.osx?
12
+ @keychain.expects(:get).with('GitHub API Token').returns('foobar')
13
+ assert_equal 'foobar', @keychain.token
14
+ end
15
+
16
+ def test_set_token
17
+ return skip('Keychain helper is OSX only') unless Boxen::Util.osx?
18
+ @keychain.expects(:set).with('GitHub API Token', 'foobar').returns('foobar')
19
+ assert_equal 'foobar', @keychain.token=('foobar')
20
+ end
21
+ end
@@ -0,0 +1,29 @@
1
+ require "boxen/test"
2
+ require "boxen/postflight"
3
+
4
+ class BoxenPostflightActiveTest < Boxen::Test
5
+ def setup
6
+ @check = Boxen::Postflight::Active.new :config
7
+ end
8
+
9
+ def test_ok?
10
+ Boxen::Util.expects(:active?).returns true
11
+ assert @check.ok?
12
+ end
13
+
14
+ def test_ok_bad
15
+ Boxen::Util.expects(:active?).returns false
16
+ refute @check.ok?
17
+ end
18
+
19
+ def test_run
20
+ config = stub :envfile => "foo"
21
+ @check = Boxen::Postflight::Active.new config
22
+
23
+ stdout, stderr = capture_io do
24
+ @check.run
25
+ end
26
+
27
+ assert_match "loaded", stderr
28
+ end
29
+ end
@@ -0,0 +1,6 @@
1
+ require "boxen/test"
2
+ require "boxen/postflight"
3
+
4
+ class BoxenPostflightEnvTest < Boxen::Test
5
+
6
+ end
@@ -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
@@ -0,0 +1,10 @@
1
+ require 'boxen/test'
2
+ require 'boxen/preflight/etc_my_cnf'
3
+
4
+ class BoxenPreflightEtcMyCnfTest < Boxen::Test
5
+ def test_file_check
6
+ preflight = Boxen::Preflight::EtcMyCnf.new(mock('config'))
7
+ File.expects(:file?).with("/etc/my.cnf").returns(false)
8
+ assert preflight.ok?
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'boxen/test'
2
+ require 'boxen/preflight/rvm'
3
+
4
+ class BoxenPreflightRVMTest < Boxen::Test
5
+ def test_directory_check
6
+ preflight = Boxen::Preflight::RVM.new(mock('config'))
7
+ File.expects(:exist?).with("#{ENV['HOME']}/.rvm").returns(false)
8
+ assert preflight.ok?
9
+ end
10
+ end
@@ -0,0 +1,14 @@
1
+ require "boxen/test"
2
+ require "boxen/project"
3
+
4
+ class BoxenProjectTest < Boxen::Test
5
+ def test_initialize
6
+ project = Boxen::Project.new "foo"
7
+ assert_equal "foo", project.dir
8
+ end
9
+
10
+ def test_name
11
+ project = Boxen::Project.new "foo/bar/baz"
12
+ assert_equal "baz", project.name
13
+ end
14
+ 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