diff --git a/lib/boxen/cli.rb b/lib/boxen/cli.rb index a91ee9b..17a43aa 100644 --- a/lib/boxen/cli.rb +++ b/lib/boxen/cli.rb @@ -43,11 +43,6 @@ module Boxen Boxen::Preflight.run config - # Okay, we're gonna run Puppet. Let's make some dirs. - - Boxen::Util.sudo("/bin/mkdir", "-p", config.homedir) && - Boxen::Util.sudo("/usr/sbin/chown", "#{config.user}:staff", config.homedir) - # Save the config for Puppet (and next time). Boxen::Config.save config diff --git a/lib/boxen/preflight/directories.rb b/lib/boxen/preflight/directories.rb new file mode 100644 index 0000000..d063935 --- /dev/null +++ b/lib/boxen/preflight/directories.rb @@ -0,0 +1,32 @@ +require "boxen/preflight" +require "boxen/util" + +class Boxen::Preflight::Directories < Boxen::Preflight + def ok? + homedir_directory_exists? && + homedir_owner == config.user && + homedir_group == 'staff' + end + + def run + Boxen::Util.sudo("/bin/mkdir", "-p", config.homedir) && + Boxen::Util.sudo("/usr/sbin/chown", "#{config.user}:staff", config.homedir) + end + + private + def homedir_directory_exists? + File.directory?(config.homedir) + end + + def homedir_owner + Etc.getpwuid(homedir_stat.uid).name + end + + def homedir_group + Etc.getgrgid(homedir_stat.gid).name + end + + def homedir_stat + @homedir_stat ||= File.stat(config.homedir) + end +end diff --git a/test/boxen_directories_test.rb b/test/boxen_directories_test.rb new file mode 100644 index 0000000..2302d99 --- /dev/null +++ b/test/boxen_directories_test.rb @@ -0,0 +1,40 @@ +require 'boxen/test' +require 'boxen/preflight/directories' + +class BoxenPreflightDirectoriesTest < Boxen::Test + class TestConfig + def user; "foobar"; end + def homedir; "foobar"; end + end + + def setup + @config = TestConfig.new + end + + def test_not_okay_if_homedir_group_wrong + directories = Boxen::Preflight::Directories.new(@config) + directories.stubs(:homedir_group).returns(false) + refute directories.ok? + end + + def test_not_okay_if_homedir_owner_wrong + directories = Boxen::Preflight::Directories.new(@config) + directories.stubs(:homedir_owner).returns(false) + refute directories.ok? + end + + def test_not_okay_unless_homedir_exists + directories = Boxen::Preflight::Directories.new(@config) + directories.stubs(:homedir_directory_exists?).returns(false) + refute directories.ok? + end + + def test_okay_if_allchecks_fine + directories = Boxen::Preflight::Directories.new(@config) + directories.stubs(:homedir_directory_exists?).returns(true) + directories.stubs(:homedir_owner).returns("foobar") + directories.stubs(:homedir_group).returns("staff") + + assert directories.ok? + end +end