spec/software_spec.rb in omnibus-1.3.0 vs spec/software_spec.rb in omnibus-2.0.0.rc1

- old
+ new

@@ -4,82 +4,103 @@ require 'spec_helper' describe Omnibus::Software do let(:project) do - p = double(Omnibus::Project) - p.stub(:install_path).and_return("monkeys") - p + double(Omnibus::Project, install_path: 'monkeys', overrides: {}) end - let(:software_name) { "erchef" } - let(:software_file){ software_path(software_name) } - let(:version_from_file){ "4b19a96d57bff9bbf4764d7323b92a0944009b9e" } - let(:software){ Omnibus::Software.load(software_file, project) } + let(:software_name) { 'erchef' } + let(:software_file) { software_path(software_name) } - before :each do - # We don't want to mess with any of this stuff for these - # tests... we're just looking at version info right now - Omnibus::Software.any_instance.stub(:render_tasks) + let(:software) do + Omnibus::Software.load(software_file, project) end - subject { software } + before do + allow_any_instance_of(Omnibus::Software).to receive(:render_tasks) + end - describe "#whitelist_file" do - - it "appends to the whitelist_files array" do - software.whitelist_files.size.should equal 0 + describe '#whitelist_file' do + it 'appends to the whitelist_files array' do + expect(software.whitelist_files.size).to eq(0) software.whitelist_file(/foo\/bar/) - software.whitelist_files.size.should equal 1 + expect(software.whitelist_files.size).to eq(1) end - it "converts Strings to Regexp instances" do - software.whitelist_file "foo/bar" - software.whitelist_files.size.should equal 1 - software.whitelist_files.first.should be_kind_of(Regexp) + it 'converts Strings to Regexp instances' do + software.whitelist_file 'foo/bar' + expect(software.whitelist_files.size).to eq(1) + expect(software.whitelist_files.first).to be_kind_of(Regexp) end end - context "testing version overrides" do + context 'testing repo-level version overrides' do + let(:software_name) { 'zlib' } + let(:default_version) { '1.2.6' } + let(:expected_version) { '1.2.6' } + let(:expected_override_version) { nil } + let(:expected_md5) { '618e944d7c7cd6521551e30b32322f4a' } + let(:expected_url) { 'http://downloads.sourceforge.net/project/libpng/zlib/1.2.6/zlib-1.2.6.tar.gz' } - context "without overrides" do - its(:name){should eq(software_name)} - its(:version){should eq(version_from_file)} - its(:given_version){should eq(software.version)} - its(:override_version){should be_nil} - end + shared_examples_for 'a software definition' do + it 'should have the same name' do + expect(software.name).to eq(software_name) + end - context "with overrides" do - let(:override_software_version){"6.6.6"} - let(:overrides) do - {override_software_name => override_software_version} + it 'should have the same version' do + expect(software.version).to eq(expected_version) end - let(:software){Omnibus::Software.load(software_file, project, overrides)} - context "but not for this software" do - let(:override_software_name){"chaos_monkey"} + it 'should have the right default_version' do + expect(software.default_version).to eq(default_version) + end - it "really should not have any overrides for this software" do - overrides.should_not have_key(software_name) - end + it 'should have nil for an override_version' do + expect(software.override_version).to eq(expected_override_version) + end - its(:version){should eq(version_from_file)} - its(:given_version){should eq(software.version)} - its(:override_version){should be_nil} + it 'should have the md5 of the default version' do + expect(software.source[:md5]).to eq(expected_md5) end - context "for this software" do - let(:override_software_name){software_name} + it 'should have the url of the default version' do + expect(software.source[:url]).to eq(expected_url) + end + end - it "really should have an override for this software" do - overrides.should have_key(software_name) - end + context 'without overrides' do + it_behaves_like 'a software definition' + end - its(:version){should eq(override_software_version)} - its(:override_version){should eq(software.version)} - its(:version){should_not eq(software.given_version)} - its(:given_version){should eq(version_from_file)} + context 'with overrides for different software' do + let(:overrides) { { 'chaos_monkey' => '1.2.8' } } + let(:software) { Omnibus::Software.load(software_file, project, overrides) } + + it_behaves_like 'a software definition' + end + + context 'with overrides for this software' do + let(:expected_version) { '1.2.8' } + let(:expected_override_version) { '1.2.8' } + let(:overrides) { { software_name => expected_override_version } } + let(:software) { Omnibus::Software.load(software_file, project, overrides) } + let(:expected_md5) { '44d667c142d7cda120332623eab69f40' } + let(:expected_url) { 'http://downloads.sourceforge.net/project/libpng/zlib/1.2.8/zlib-1.2.8.tar.gz' } + + it_behaves_like 'a software definition' + end + + context 'with an overide in the project' do + let(:project) do + double(Omnibus::Project, install_path: 'monkeys', overrides: { zlib: { version: '1.2.8' } }) end + let(:expected_version) { '1.2.8' } + let(:expected_override_version) { '1.2.8' } + let(:expected_md5) { '44d667c142d7cda120332623eab69f40' } + let(:expected_url) { 'http://downloads.sourceforge.net/project/libpng/zlib/1.2.8/zlib-1.2.8.tar.gz' } + + it_behaves_like 'a software definition' end end end