# # Copyright:: Copyright (c) 2014 Chef Software Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # require "spec_helper" require_relative "../../../tasks/helpers" class RakeMock end describe "Rake 'dependencies' task" do let(:rake_mock) { Class.new { include RakeDependenciesTaskHelpers }.new } let(:product_name) { "chef" } let(:gemfile_name) { "chef" } let(:gemfile) { 'gem "chef", github: "chef/chef", branch: "0.0.0"' } let(:expected_version) { "0.0.1" } before do allow(rake_mock).to receive(:puts) allow(rake_mock).to receive(:get_latest_version_for).with(product_name).and_return(expected_version) end describe "update_gemfile_from_stable" do context "when gemfile does not contain the expected string" do let(:gemfile) { "These are not the droids you are looking for." } it "raises an error" do expect { rake_mock.update_gemfile_from_stable(gemfile, product_name, gemfile_name) }.to raise_error(/Gemfile does not have a line of the form/) end end context "when gemfile does contain the expected string" do let(:prefix) { "" } let(:expected_output) { "gem \"chef\", github: \"chef/chef\", branch: \"#{prefix}#{expected_version}\"" } context "and the version string does not have a prefix" do it "updates the gemfile entry to the newer version" do expect(rake_mock.update_gemfile_from_stable(gemfile, product_name, gemfile_name)) .to eq(expected_output) end end context "and the version is the same" do let(:expected_version) { "0.0.0" } it "warns the user that the version is not being updated" do expect(rake_mock).to receive(:puts).with(/version in Gemfile already at latest stable/) expect(rake_mock.update_gemfile_from_stable(gemfile, product_name, gemfile_name)) .to eq(expected_output) end end context "and a prefix is specified" do let(:prefix) { "v" } it "updates the gemfile entry to the newer version" do expect(rake_mock.update_gemfile_from_stable(gemfile, product_name, gemfile_name, prefix)) .to eq(expected_output) end end end end end