mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
[vcloud_director] tests for #ensure_list!
This commit is contained in:
parent
353b50acfc
commit
7aed0f2d4d
2 changed files with 74 additions and 16 deletions
|
@ -414,6 +414,24 @@ module Fog
|
||||||
data[:id] = data[:href].split('/').last
|
data[:id] = data[:href].split('/').last
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Compensate for Fog::ToHashDocument shortcomings.
|
||||||
|
# @api private
|
||||||
|
# @param [Hash] hash
|
||||||
|
# @param [String,Symbol] key1
|
||||||
|
# @param [String,Symbol] key2
|
||||||
|
# @return [Hash]
|
||||||
|
def ensure_list!(hash, key1, key2=nil)
|
||||||
|
if key2.nil?
|
||||||
|
hash[key1] ||= []
|
||||||
|
hash[key1] = [hash[key1]] if hash[key1].is_a?(Hash)
|
||||||
|
else
|
||||||
|
hash[key1] ||= {key2 => []}
|
||||||
|
hash[key1] = {key2 => []} if hash[key1].empty?
|
||||||
|
hash[key1][key2] = [hash[key1][key2]] if hash[key1][key2].is_a?(Hash)
|
||||||
|
end
|
||||||
|
hash
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def login
|
def login
|
||||||
|
@ -433,22 +451,6 @@ module Fog
|
||||||
@org_name = nil
|
@org_name = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
# Compensate for Fog::ToHashDocument shortcomings.
|
|
||||||
# @param [Hash] hash
|
|
||||||
# @param [String,Symbol] key1
|
|
||||||
# @param [String,Symbol] key2
|
|
||||||
# @return [Hash]
|
|
||||||
def ensure_list!(hash, key1, key2=nil)
|
|
||||||
if key2.nil?
|
|
||||||
hash[key1] ||= []
|
|
||||||
hash[key1] = [hash[key1]] if hash[key1].is_a?(Hash)
|
|
||||||
else
|
|
||||||
hash[key1] ||= {key2 => []}
|
|
||||||
hash[key1] = {key2 => []} if hash[key1].empty?
|
|
||||||
hash[key1][key2] = [hash[key1][key2]] if hash[key1][key2].is_a?(Hash)
|
|
||||||
end
|
|
||||||
hash
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class Mock
|
class Mock
|
||||||
|
|
56
tests/vcloud_director/ensure_list_tests.rb
Normal file
56
tests/vcloud_director/ensure_list_tests.rb
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
Shindo.tests('Compute::VcloudDirector | ensure_list!', ['vclouddirector']) do
|
||||||
|
|
||||||
|
# ensure list is not available in mocking mode
|
||||||
|
unless Fog.mocking?
|
||||||
|
|
||||||
|
@service = Fog::Compute::VcloudDirector.new
|
||||||
|
|
||||||
|
tests('#ensure_list! for single key') do
|
||||||
|
tests('for key with a hash').returns(Array) do
|
||||||
|
testdata = {:k => {:A => '1'}}
|
||||||
|
@service.ensure_list!(testdata, :k)
|
||||||
|
testdata[:k].class
|
||||||
|
end
|
||||||
|
|
||||||
|
tests('for key with empty array').returns(Array) do
|
||||||
|
testdata = {:k => []}
|
||||||
|
@service.ensure_list!(testdata, :k)
|
||||||
|
testdata[:k].class
|
||||||
|
end
|
||||||
|
|
||||||
|
tests('for key with nothing').returns(Array) do
|
||||||
|
testdata = {}
|
||||||
|
@service.ensure_list!(testdata, :k)
|
||||||
|
testdata[:k].class
|
||||||
|
end
|
||||||
|
|
||||||
|
tests('for key with non-empty array').returns(Array) do
|
||||||
|
testdata = {:k => ['one', 'two']}
|
||||||
|
@service.ensure_list!(testdata, :k)
|
||||||
|
testdata[:k].class
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
tests ('#ensure_list! for nested keys') do
|
||||||
|
tests('with no key').returns(Array) do
|
||||||
|
testdata = {}
|
||||||
|
@service.ensure_list!(testdata, :keys, :key)
|
||||||
|
testdata[:keys][:key].class
|
||||||
|
end
|
||||||
|
|
||||||
|
tests('with empty string').returns(Array) do
|
||||||
|
testdata = {:keys => ''}
|
||||||
|
@service.ensure_list!(testdata, :keys, :key)
|
||||||
|
testdata[:keys][:key].class
|
||||||
|
end
|
||||||
|
|
||||||
|
tests('with nested hashes').returns(Array) do
|
||||||
|
testdata = {:keys => {:key => {:a => '1'}}}
|
||||||
|
@service.ensure_list!(testdata, :keys, :key)
|
||||||
|
testdata[:keys][:key].class
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
Loading…
Add table
Reference in a new issue