require 'spec_helper'
describe Berkshelf::CookbookGenerator do
let(:name) { 'sparkle_motion' }
let(:target) { tmp_path.join(name) }
let(:kitchen_generator) { double('kitchen-generator', invoke_all: nil) }
before do
Kitchen::Generator::Init.stub(:new).with(any_args()).and_return(kitchen_generator)
end
context 'with default options' do
before do
capture(:stdout) { Berkshelf::CookbookGenerator.new([target, name]).invoke_all }
end
it "generates a new cookbook" do
expect(target).to have_structure {
directory 'attributes'
directory 'files' do
directory 'default'
end
directory 'libraries'
directory 'providers'
directory 'recipes' do
file 'default.rb' do
contains '# Cookbook Name:: sparkle_motion'
contains '# Recipe:: default'
contains "# Copyright (C) #{Time.now.year} YOUR_NAME"
contains '# All rights reserved - Do Not Redistribute'
end
end
directory 'resources'
directory 'templates' do
directory 'default'
end
file 'LICENSE' do
contains "Copyright (C) #{Time.now.year} YOUR_NAME"
contains 'All rights reserved - Do Not Redistribute'
end
file 'README.md' do
contains '# sparkle_motion-cookbook'
contains '### sparkle_motion::default'
contains "
['sparkle_motion']['bacon'] | "
contains "Include `sparkle_motion` in your node's `run_list`:"
contains ' "recipe[sparkle_motion::default]"'
contains 'Author:: YOUR_NAME ()'
end
file 'CHANGELOG.md' do
contains '# sparkle_motion cookbook CHANGELOG'
contains "## v0.1.0 (#{Time.now.strftime('%Y-%m-%d')})"
end
file 'metadata.rb' do
contains "name 'sparkle_motion'"
contains "maintainer 'YOUR_NAME'"
contains "maintainer_email 'YOUR_EMAIL'"
contains "license 'All rights reserved'"
contains "description 'Installs/Configures sparkle_motion'"
end
file 'Berksfile' do
contains 'source "https://api.berkshelf.com"'
contains 'metadata'
end
file 'Gemfile'
file 'chefignore'
}
end
end
context "given a 'maintainer_email' option" do
before do
Kitchen::Generator::Init.stub(:new).with(any_args()).and_return(kitchen_generator)
capture(:stdout) {
Berkshelf::CookbookGenerator.new([target, name], maintainer_email: 'jamie@vialstudios.com').invoke_all
}
end
it "generates a metadata.rb with the 'maintainer_email' value set" do
email = email
expect(target).to have_structure {
file 'metadata.rb' do
contains "maintainer_email 'jamie@vialstudios.com'"
end
}
end
end
context "given an invalid option for :license" do
subject(:run) do
capture(:stdout) { described_class.new([target, name], license: 'not-there').invoke_all }
end
it "raises a LicenseNotFound error" do
expect { run }.to raise_error(Berkshelf::LicenseNotFound)
end
end
end