|
| 1 | +#! /usr/bin/env ruby -S rspec |
| 2 | + |
| 3 | +require 'spec_helper' |
| 4 | + |
| 5 | +describe Puppet::Parser::Functions.function(:mysql_deepmerge) do |
| 6 | + let(:scope) { PuppetlabsSpec::PuppetInternals.scope } |
| 7 | + |
| 8 | + describe 'when calling mysql_deepmerge from puppet' do |
| 9 | + it "should not compile when no arguments are passed" do |
| 10 | + pending("Fails on 2.6.x, see bug #15912") if Puppet.version =~ /^2\.6\./ |
| 11 | + Puppet[:code] = '$x = mysql_deepmerge()' |
| 12 | + expect { |
| 13 | + scope.compiler.compile |
| 14 | + }.to raise_error(Puppet::ParseError, /wrong number of arguments/) |
| 15 | + end |
| 16 | + |
| 17 | + it "should not compile when 1 argument is passed" do |
| 18 | + pending("Fails on 2.6.x, see bug #15912") if Puppet.version =~ /^2\.6\./ |
| 19 | + Puppet[:code] = "$my_hash={'one' => 1}\n$x = mysql_deepmerge($my_hash)" |
| 20 | + expect { |
| 21 | + scope.compiler.compile |
| 22 | + }.to raise_error(Puppet::ParseError, /wrong number of arguments/) |
| 23 | + end |
| 24 | + end |
| 25 | + |
| 26 | + describe 'when calling mysql_deepmerge on the scope instance' do |
| 27 | + it 'should require all parameters are hashes' do |
| 28 | + expect { new_hash = scope.function_mysql_deepmerge([{}, '2'])}.to raise_error(Puppet::ParseError, /unexpected argument type String/) |
| 29 | + expect { new_hash = scope.function_mysql_deepmerge([{}, 2])}.to raise_error(Puppet::ParseError, /unexpected argument type Fixnum/) |
| 30 | + end |
| 31 | + |
| 32 | + it 'should accept empty strings as puppet undef' do |
| 33 | + expect { new_hash = scope.function_mysql_deepmerge([{}, ''])}.not_to raise_error(Puppet::ParseError, /unexpected argument type String/) |
| 34 | + end |
| 35 | + |
| 36 | + it 'should be able to mysql_deepmerge two hashes' do |
| 37 | + new_hash = scope.function_mysql_deepmerge([{'one' => '1', 'two' => '1'}, {'two' => '2', 'three' => '2'}]) |
| 38 | + new_hash['one'].should == '1' |
| 39 | + new_hash['two'].should == '2' |
| 40 | + new_hash['three'].should == '2' |
| 41 | + end |
| 42 | + |
| 43 | + it 'should mysql_deepmerge multiple hashes' do |
| 44 | + hash = scope.function_mysql_deepmerge([{'one' => 1}, {'one' => '2'}, {'one' => '3'}]) |
| 45 | + hash['one'].should == '3' |
| 46 | + end |
| 47 | + |
| 48 | + it 'should accept empty hashes' do |
| 49 | + scope.function_mysql_deepmerge([{},{},{}]).should == {} |
| 50 | + end |
| 51 | + |
| 52 | + it 'should mysql_deepmerge subhashes' do |
| 53 | + hash = scope.function_mysql_deepmerge([{'one' => 1}, {'two' => 2, 'three' => { 'four' => 4 } }]) |
| 54 | + hash['one'].should == 1 |
| 55 | + hash['two'].should == 2 |
| 56 | + hash['three'].should == { 'four' => 4 } |
| 57 | + end |
| 58 | + |
| 59 | + it 'should append to subhashes' do |
| 60 | + hash = scope.function_mysql_deepmerge([{'one' => { 'two' => 2 } }, { 'one' => { 'three' => 3 } }]) |
| 61 | + hash['one'].should == { 'two' => 2, 'three' => 3 } |
| 62 | + end |
| 63 | + |
| 64 | + it 'should append to subhashes 2' do |
| 65 | + hash = scope.function_mysql_deepmerge([{'one' => 1, 'two' => 2, 'three' => { 'four' => 4 } }, {'two' => 'dos', 'three' => { 'five' => 5 } }]) |
| 66 | + hash['one'].should == 1 |
| 67 | + hash['two'].should == 'dos' |
| 68 | + hash['three'].should == { 'four' => 4, 'five' => 5 } |
| 69 | + end |
| 70 | + |
| 71 | + it 'should append to subhashes 3' do |
| 72 | + hash = scope.function_mysql_deepmerge([{ 'key1' => { 'a' => 1, 'b' => 2 }, 'key2' => { 'c' => 3 } }, { 'key1' => { 'b' => 99 } }]) |
| 73 | + hash['key1'].should == { 'a' => 1, 'b' => 99 } |
| 74 | + hash['key2'].should == { 'c' => 3 } |
| 75 | + end |
| 76 | + end |
| 77 | +end |
0 commit comments