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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
require 'puppet'
require 'spec_helper'
require 'puppet_spec/compiler'
require 'shared_behaviours/iterative_functions'
describe 'the each method' do
include PuppetSpec::Compiler
context "should be callable as" do
it 'each on an array selecting each value' do
catalog = compile_to_catalog(<<-MANIFEST)
$a = [1,2,3]
$a.each |$v| {
file { "/file_$v": ensure => present }
}
MANIFEST
expect(catalog.resource(:file, "/file_1")['ensure']).to eq('present')
expect(catalog.resource(:file, "/file_2")['ensure']).to eq('present')
expect(catalog.resource(:file, "/file_3")['ensure']).to eq('present')
end
it 'each on an array selecting each value - function call style' do
catalog = compile_to_catalog(<<-MANIFEST)
$a = [1,2,3]
each ($a) |$index, $v| {
file { "/file_$v": ensure => present }
}
MANIFEST
expect(catalog.resource(:file, "/file_1")['ensure']).to eq('present')
expect(catalog.resource(:file, "/file_2")['ensure']).to eq('present')
expect(catalog.resource(:file, "/file_3")['ensure']).to eq('present')
end
it 'each on an array with index' do
catalog = compile_to_catalog(<<-MANIFEST)
$a = [present, absent, present]
$a.each |$k,$v| {
file { "/file_${$k+1}": ensure => $v }
}
MANIFEST
expect(catalog.resource(:file, "/file_1")['ensure']).to eq('present')
expect(catalog.resource(:file, "/file_2")['ensure']).to eq('absent')
expect(catalog.resource(:file, "/file_3")['ensure']).to eq('present')
end
it 'each on a hash selecting entries' do
catalog = compile_to_catalog(<<-MANIFEST)
$a = {'a'=>'present','b'=>'absent','c'=>'present'}
$a.each |$e| {
file { "/file_${e[0]}": ensure => $e[1] }
}
MANIFEST
expect(catalog.resource(:file, "/file_a")['ensure']).to eq('present')
expect(catalog.resource(:file, "/file_b")['ensure']).to eq('absent')
expect(catalog.resource(:file, "/file_c")['ensure']).to eq('present')
end
it 'each on a hash selecting key and value' do
catalog = compile_to_catalog(<<-MANIFEST)
$a = {'a'=>present,'b'=>absent,'c'=>present}
$a.each |$k, $v| {
file { "/file_$k": ensure => $v }
}
MANIFEST
expect(catalog.resource(:file, "/file_a")['ensure']).to eq('present')
expect(catalog.resource(:file, "/file_b")['ensure']).to eq('absent')
expect(catalog.resource(:file, "/file_c")['ensure']).to eq('present')
end
it 'each on a hash selecting key and value (using captures-last parameter)' do
catalog = compile_to_catalog(<<-MANIFEST)
$a = {'a'=>present,'b'=>absent,'c'=>present}
$a.each |*$kv| {
file { "/file_${kv[0]}": ensure => $kv[1] }
}
MANIFEST
expect(catalog.resource(:file, "/file_a")['ensure']).to eq('present')
expect(catalog.resource(:file, "/file_b")['ensure']).to eq('absent')
expect(catalog.resource(:file, "/file_c")['ensure']).to eq('present')
end
end
context "should produce receiver" do
it 'each checking produced value using single expression' do
catalog = compile_to_catalog(<<-MANIFEST)
$a = [1, 3, 2]
$b = $a.each |$x| { "unwanted" }
file { "/file_${b[1]}":
ensure => present
}
MANIFEST
expect(catalog.resource(:file, "/file_3")['ensure']).to eq('present')
end
end
it_should_behave_like 'all iterative functions argument checks', 'each'
it_should_behave_like 'all iterative functions hash handling', 'each'
end
|