summaryrefslogtreecommitdiff
path: root/spec/unit/provider/template/content_spec.rb
blob: 946549238c1a44c91473dda9930a60cdd3424349 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#
# Author:: Lamont Granquist (<lamont@opscode.com>)
# Copyright:: Copyright (c) 2013 Opscode, 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'

describe Chef::Provider::Template::Content do

  let(:new_resource) do
    mock("Chef::Resource::Template (new)", :cookbook_name => 'openldap', :source => 'openldap_stuff.conf.erb', :local => false, :cookbook => nil, :variables => {})
  end

  let(:rendered_file_location) { Dir.tmpdir + '/openldap_stuff.conf' }

  let(:run_context) do
    cookbook_repo = File.expand_path(File.join(CHEF_SPEC_DATA, "cookbooks"))
    Chef::Cookbook::FileVendor.on_create { |manifest| Chef::Cookbook::FileSystemFileVendor.new(manifest, cookbook_repo) }
    cl = Chef::CookbookLoader.new(cookbook_repo)
    cl.load_cookbooks
    cookbook_collection = Chef::CookbookCollection.new(cl)
    node = Chef::Node.new
    mock("Chef::Resource::RunContext", :node => node, :cookbook_collection => cookbook_collection)
  end

  let(:content) do
    current_resource = mock("Chef::Resource::Template (current)")
    Chef::Provider::Template::Content.new(new_resource, current_resource, run_context)
  end

  after do
    FileUtils.rm(rendered_file_location) if ::File.exist?(rendered_file_location)
  end

  it "finds the template file in the cookbook cache if it isn't local" do
    content.template_location.should == CHEF_SPEC_DATA + '/cookbooks/openldap/templates/default/openldap_stuff.conf.erb'
  end

  it "finds the template file locally if it is local" do
    new_resource.stub!(:local).and_return(true)
    new_resource.stub!(:source).and_return('/tmp/its_on_disk.erb')
    content.template_location.should == '/tmp/its_on_disk.erb'
  end

  it "should use the cookbook name if defined in the template resource" do
    new_resource.stub!(:cookbook_name).and_return('apache2')
    new_resource.stub!(:cookbook).and_return('openldap')
    new_resource.stub!(:source).and_return("test.erb")
    content.template_location.should == CHEF_SPEC_DATA + '/cookbooks/openldap/templates/default/test.erb'
  end

  it "creates the template with the rendered content" do
    run_context.node.normal[:slappiness] = "a warm gun"
    IO.read(content.tempfile.path).should == "slappiness is a warm gun"
  end

end