summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordanielsdeleo <dan@opscode.com>2013-01-24 15:54:48 -0800
committerdanielsdeleo <dan@opscode.com>2013-01-25 10:52:47 -0800
commit691d7a34e3b93cf214b3829af536ce24f7425ddc (patch)
tree5237f370894d0442244c386ebd0af81e71cc9ec9
parent9bd21a19a6e0d1d4b3a7a9bbb8f3f1ad14f99437 (diff)
downloadchef-691d7a34e3b93cf214b3829af536ce24f7425ddc.tar.gz
WIP tests for array-smashing merge
-rw-r--r--spec/unit/mixin/deep_merge_spec.rb25
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