]> git.donarmstrong.com Git - dsa-puppet.git/blob - modules/stdlib/spec/unit/puppet/parser/functions/merge_spec.rb
upgrade to concat 2.0.0
[dsa-puppet.git] / modules / stdlib / spec / unit / puppet / parser / functions / merge_spec.rb
1 require 'puppet'
2 require 'mocha'
3 describe Puppet::Parser::Functions.function(:merge) do
4
5   # Pulled from Dan's create_resources function
6   # TODO - these let statements should be moved somewhere
7   # where they can be resued
8   let(:compiler) {
9     topscope = Puppet::Parser::Scope.new
10     # This is necessary so we don't try to use the compiler to discover our parent.
11     topscope.parent = nil
12     my_scope = Puppet::Parser::Scope.new
13     my_scope.compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("floppy", :environment => 'production'))
14     my_scope.parent = topscope
15     compiler = my_scope.compiler
16   }
17   let(:scope) {
18     scope = Puppet::Parser::Scope.new
19     scope.stubs(:environment).returns(Puppet::Node::Environment.new('production'))
20     scope
21   }
22
23   describe 'when calling merge from puppet' do
24     it "should not compile when no arguments are passed" do
25       Puppet[:code] = 'merge()'
26       expect { compiler.compile }.should raise_error(Puppet::ParseError, /wrong number of arguments/)
27     end
28     it "should not compile when 1 argument is passed" do
29       Puppet[:code] = "$my_hash={'one' => 1}\nmerge($my_hash)"
30       expect { compiler.compile }.should raise_error(Puppet::ParseError, /wrong number of arguments/)
31     end
32   end
33   describe 'when calling merge on the scope instance' do
34     it 'should require all parameters are hashes' do
35       expect { new_hash = scope.function_merge([{}, '2'])}.should raise_error(Puppet::ParseError, /unexpected argument type String/)
36
37     end
38     it 'should be able to merge two hashes' do
39       new_hash = scope.function_merge([{'one' => '1', 'two' => '1'}, {'two' => '2', 'three' => '2'}])
40       new_hash['one'].should   == '1'
41       new_hash['two'].should   == '2'
42       new_hash['three'].should == '2'
43     end
44     it 'should merge multiple hashes' do
45       hash = scope.function_merge([{'one' => 1}, {'one' => '2'}, {'one' => '3'}])
46       hash['one'].should == '3'
47     end
48     it 'should accept empty hashes' do
49       scope.function_merge([{},{},{}]).should == {}
50     end
51
52   end
53
54 end