require File.join(File.dirname(__FILE__), "..", "helper") class TestHashToXml < Test::Unit::TestCase context "Calling hash_to_xml" do setup do ApricotEatsGorilla.setup do |s| s.sort_keys = true s.disable_tag_names_to_lower_camel_case = false s.disable_hash_keys_to_snake_case = false s.disable_hash_keys_to_symbols = false s.nodes_to_namespace = nil end end context "with a Hash containing only a single key-value-pair" do should "return an XML String containing one node and a value" do hash = { "apricot" => "eats Gorilla" } expected = "eats Gorilla" result = ApricotEatsGorilla.hash_to_xml(hash) assert_equal expected, result end end context "with a Hash containing another Hash" do should "return an XML String representing the given structure" do hash = { "apricot" => { "eats" => "gorilla", "drinks" => "beer" } } expected = "beergorilla" result = ApricotEatsGorilla.hash_to_xml(hash) assert_equal expected, result end end context "with a Hash containing a Hash containing an Array" do should "return an XML String representing the given structure" do hash = { "apricot" => { "eats" => [ "gorilla", "snake" ] } } expected = "gorillasnake" result = ApricotEatsGorilla.hash_to_xml(hash) assert_equal expected, result end end context "with a Hash containing a Hash containing an Array containing a Hash" do should "return an XML String representing the given structure" do hash = { "apricot" => { "eats" => [ { "lotsOf" => "gorillas" }, { "justSome" => "snakes" } ] } } expected = "gorillas" << "snakes" result = ApricotEatsGorilla.hash_to_xml(hash) assert_equal expected, result end end context "with a Hash containing Symbols" do should "returns an XML String with Symbols converted into Strings" do hash = { :apricot => { :eats => [ :gorilla, "snake" ] } } expected = "gorillasnake" result = ApricotEatsGorilla.hash_to_xml(hash) assert_equal expected, result end end context "with a Hash containing snake_case keys" do should "convert snake_case Hash keys to lowerCamelCase" do hash = { :apricot => { :eats => { :lots_of => "gorillas" } } } expected = "gorillas" result = ApricotEatsGorilla.hash_to_xml(hash) assert_equal expected, result end context "and converting snake_case tag names to lowerCamelCase turned off" do setup { ApricotEatsGorilla.disable_tag_names_to_lower_camel_case = true } should "not convert snake_case tag names to lowerCamelCase" do hash = { :apricot => { :eats => { :lots_of => "gorillas" } } } expected = "gorillas" result = ApricotEatsGorilla.hash_to_xml(hash) assert_equal expected, result end end end context "with a Hash different types of values" do should "convert values responding to 'to_s' to Strings" do date_time = DateTime.now hash = { :apricot => { :at => date_time, :with => 100.01, :when => nil, :what => :gorillas } } expected = "#{date_time}gorillas" << "100.01" result = ApricotEatsGorilla.hash_to_xml(hash) assert_equal expected, result end end context "with some Hash and nodes to namespace" do setup { ApricotEatsGorilla.nodes_to_namespace = { :wsdl => [ :apricot ] } } should "apply the defined namespaces" do hash = { :apricot => { :eats => "Gorilla" } } expected = "Gorilla" result = ApricotEatsGorilla.hash_to_xml(hash) assert_equal expected, result end end end end