Skip to content

Commit

Permalink
Fixes #52, Manage cask's install directories
Browse files Browse the repository at this point in the history
This commit adds directory resources for homebrew-cask, fixing #52.

* include the Homebrew::Mixin module only on the Chef::Resource class,
making this easier to test
* Use owner attribute otherwise fallback to the homebrew owner lookup
method
* Add ChefSpec scaffolding
* Add a delightful variety of ChefSpec tests for default and
non-default users
  • Loading branch information
jtimberman committed Jan 12, 2015
1 parent f7573fb commit 5185961
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 3 deletions.
15 changes: 12 additions & 3 deletions recipes/cask.rb
Expand Up @@ -16,15 +16,24 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
extend(Homebrew::Mixin)
owner = homebrew_owner
Chef::Resource.send(:include, Homebrew::Mixin)

homebrew_tap 'caskroom/cask'

package 'brew-cask'

execute 'update homebrew cask from github' do
user owner
user homebrew_owner
command '/usr/local/bin/brew upgrade brew-cask && /usr/local/bin/brew cask cleanup || true'
only_if { node['homebrew']['auto-update'] }
end

directory '/opt/homebrew-cask' do
owner node['homebrew']['owner'] || homebrew_owner
mode 00775
end

directory '/opt/homebrew-cask/Caskroom' do
owner node['homebrew']['owner'] || homebrew_owner
mode 00775
end
Empty file added spec/README.md
Empty file.
61 changes: 61 additions & 0 deletions spec/recipes/cask_spec.rb
@@ -0,0 +1,61 @@
require_relative '../spec_helper'

describe 'homebrew::cask' do
context 'default user' do
let(:chef_run) do
ChefSpec::SoloRunner.new.converge(described_recipe)
end

before(:each) do
allow_any_instance_of(Chef::Resource).to receive(:homebrew_owner).and_return('vagrant')
end

it 'updates homebrew cask as vagrant' do
expect(chef_run).to run_execute('update homebrew cask from github').with(
:user => 'vagrant'
)
end

it 'manages the homebrew-cask directory' do
expect(chef_run).to create_directory('/opt/homebrew-cask').with(
:user => 'vagrant',
:mode => 00775
)
end

it 'manages the Caskroom directory' do
expect(chef_run).to create_directory('/opt/homebrew-cask/Caskroom').with(
:user => 'vagrant',
:mode => 00775
)
end
end

context 'non-default, specified by attribute user' do
let(:chef_run) do
ChefSpec::SoloRunner.new do |node|
node.set['homebrew']['owner'] = 'alaska'
end.converge(described_recipe)
end

it 'updates homebrew cask as alaska' do
expect(chef_run).to run_execute('update homebrew cask from github').with(
:user => 'alaska'
)
end

it 'manages the homebrew-cask directory' do
expect(chef_run).to create_directory('/opt/homebrew-cask').with(
:user => 'alaska',
:mode => 00775
)
end

it 'manages the Caskroom directory' do
expect(chef_run).to create_directory('/opt/homebrew-cask/Caskroom').with(
:user => 'alaska',
:mode => 00775
)
end
end
end
12 changes: 12 additions & 0 deletions spec/spec_helper.rb
@@ -0,0 +1,12 @@
require 'chefspec'
require 'chefspec/berkshelf'

# Require all our libraries
Dir['libraries/*.rb'].each { |f| require File.expand_path(f) }

RSpec.configure do |config|
config.log_level = :fatal
config.order = 'random'
config.color = true
config.formatter = 'documentation'
end

0 comments on commit 5185961

Please sign in to comment.