Update puppetlabs/stdlib module
[mirror/dsa-puppet.git] / 3rdparty / modules / stdlib / spec / functions / delete_undef_values_spec.rb
1 require 'spec_helper'
2
3 describe 'delete_undef_values' do
4   let(:is_puppet_6) { Puppet::Util::Package.versioncmp(Puppet.version, '6.0.0') == 0 }
5
6   it { is_expected.not_to eq(nil) }
7   it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError) }
8   it { is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError) }
9   it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError) }
10   it { is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError) }
11
12   describe 'when deleting from an array' do
13     # Behavior is different in Puppet 6.0.0, and fixed in PUP-9180 in Puppet 6.0.1
14     [:undef, '', nil].each do |undef_value|
15       describe "when undef is represented by #{undef_value.inspect}" do
16         before(:each) do
17           pending("review behaviour when being passed undef as #{undef_value.inspect}") if undef_value == ''
18           pending("review behaviour when being passed undef as #{undef_value.inspect}") if undef_value == :undef && is_puppet_6
19         end
20         it { is_expected.to run.with_params([undef_value]).and_return([]) }
21         it { is_expected.to run.with_params(['one', undef_value, 'two', 'three']).and_return(['one', 'two', 'three']) }
22         it { is_expected.to run.with_params(['ớņέ', undef_value, 'ŧשּׁō', 'ŧħґëə']).and_return(['ớņέ', 'ŧשּׁō', 'ŧħґëə']) }
23       end
24
25       it 'leaves the original argument intact' do
26         argument = ['one', undef_value, 'two']
27         original = argument.dup
28         _result = subject.execute(argument, 2)
29         expect(argument).to eq(original)
30       end
31     end
32
33     it { is_expected.to run.with_params(['undef']).and_return(['undef']) }
34   end
35
36   describe 'when deleting from a hash' do
37     [:undef, '', nil].each do |undef_value|
38       describe "when undef is represented by #{undef_value.inspect}" do
39         before(:each) do
40           pending("review behaviour when being passed undef as #{undef_value.inspect}") if undef_value == ''
41           pending("review behaviour when being passed undef as #{undef_value.inspect}") if undef_value == :undef && is_puppet_6
42         end
43         it { is_expected.to run.with_params('key' => undef_value).and_return({}) }
44         it {
45           is_expected.to run \
46             .with_params('key1' => 'value1', 'undef_key' => undef_value, 'key2' => 'value2') \
47             .and_return('key1' => 'value1', 'key2' => 'value2')
48         }
49       end
50
51       it 'leaves the original argument intact' do
52         argument = { 'key1' => 'value1', 'key2' => undef_value }
53         original = argument.dup
54         _result = subject.execute(argument, 2)
55         expect(argument).to eq(original)
56       end
57     end
58
59     it { is_expected.to run.with_params('key' => 'undef').and_return('key' => 'undef') }
60   end
61 end