diff options
author | danielsdeleo <dan@opscode.com> | 2013-01-24 15:54:48 -0800 |
---|---|---|
committer | danielsdeleo <dan@opscode.com> | 2013-01-25 10:52:47 -0800 |
commit | 691d7a34e3b93cf214b3829af536ce24f7425ddc (patch) | |
tree | 5237f370894d0442244c386ebd0af81e71cc9ec9 | |
parent | 9bd21a19a6e0d1d4b3a7a9bbb8f3f1ad14f99437 (diff) | |
download | chef-691d7a34e3b93cf214b3829af536ce24f7425ddc.tar.gz |
WIP tests for array-smashing merge
-rw-r--r-- | spec/unit/mixin/deep_merge_spec.rb | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/spec/unit/mixin/deep_merge_spec.rb b/spec/unit/mixin/deep_merge_spec.rb index cbc9b1544f..30c858b0df 100644 --- a/spec/unit/mixin/deep_merge_spec.rb +++ b/spec/unit/mixin/deep_merge_spec.rb @@ -311,4 +311,29 @@ describe Chef::Mixin::DeepMerge do lambda {@dm.role_merge(hash_dst, hash_src)}.should raise_error(Chef::Mixin::DeepMerge::InvalidSubtractiveMerge) end end + + describe "hash-only merging" do + it "merges Hashes like normal deep merge" do + merge_ee_hash = {"top_level_a" => {"1_deep_a" => "1-a-merge-ee", "1_deep_b" => "1-deep-b-merge-ee"}, "top_level_b" => "top-level-b-merge-ee"} + merge_with_hash = {"top_level_a" => {"1_deep_b" => "1-deep-b-merged-onto", "1_deep_c" => "1-deep-c-merged-onto"}, "top_level_b" => "top-level-b-merged-onto" } + + merged_result = @dm.hash_only_merge(merge_ee_hash, merge_with_hash) + + merged_result["top_level_b"].should == "top-level-b-merged-onto" + merged_result["top_level_a"]["1_deep_a"].should == "1-a-merge-ee" + merged_result["top_level_a"]["1_deep_b"].should == "1-deep-b-merged-onto" + merged_result["top_level_a"]["1_deep_c"].should == "1-deep-c-merged-onto" + end + + it "replaces arrays rather than merging them" do + merge_ee_hash = {"top_level_a" => {"1_deep_a" => "1-a-merge-ee", "1_deep_b" => %w[A A A]}, "top_level_b" => "top-level-b-merge-ee"} + merge_with_hash = {"top_level_a" => {"1_deep_b" => %w[B B B], "1_deep_c" => "1-deep-c-merged-onto"}, "top_level_b" => "top-level-b-merged-onto" } + + merged_result = @dm.hash_only_merge(merge_ee_hash, merge_with_hash) + + merged_result["top_level_b"].should == "top-level-b-merged-onto" + merged_result["top_level_a"]["1_deep_a"].should == "1-a-merge-ee" + merged_result["top_level_a"]["1_deep_b"].should == %w[B B B] + end + end end |