require File.join(File.dirname(__FILE__), "..", "spec_helper") describe ApricotEatsGorilla do include SpecHelper # hash_to_xml describe "hash_to_xml" do before { reset_library_options } it "converts Hash key Symbols into Strings" do hash = { :apricot => { :eats => [ :gorilla, "snake" ] } } ApricotEatsGorilla.hash_to_xml(hash).should == "gorillasnake" end it "converts lowerCamelCase Hash keys to snake_case" do hash = { :apricot => { :eats => { :lots_of => "gorillas" } } } ApricotEatsGorilla.hash_to_xml(hash).should == "gorillas" end it "does not convert lowerCamelCase Hash keys to snake_case if this was disabled" do ApricotEatsGorilla.disable_tag_names_to_lower_camel_case = true hash = { :apricot => { :eats => { :lots_of => "gorillas" } } } ApricotEatsGorilla.hash_to_xml(hash).should == "gorillas" end it "converts values responding to to_s into Strings" do hash = { :apricot => { :with => 100.01, :when => nil, :what => :gorillas } } ApricotEatsGorilla.hash_to_xml(hash).should == "gorillas" << "100.01" end it "converts DateTime objects into xsd:dateTime Strings" do date = DateTime.new(y=2009, m=9, d=1, h=12, min=0, s=8) hash = { :apricot => { :eats => { :at => date } } } ApricotEatsGorilla.hash_to_xml(hash).should == "2009-09-01T12:00:08" end it "converts objects responding to 'to_datetime' into xsd:dateTime Strings" do TestObject = Struct.new(:whatever) do def to_datetime DateTime.new(y=2009, m=9, d=1, h=12, min=0, s=8) end end hash = { :apricot => { :eats => { :at => TestObject.new } } } ApricotEatsGorilla.hash_to_xml(hash).should == "2009-09-01T12:00:08" end it "applies namespaces nodes defined via nodes_to_namespace" do ApricotEatsGorilla.nodes_to_namespace = { :wsdl => [ :apricot ] } hash = { :apricot => { :eats => "Gorilla" } } ApricotEatsGorilla.hash_to_xml(hash).should == "Gorilla" end it "converts a Hash containing only one key and a value into one node with content" do hash = { "apricot" => "eats Gorilla" } ApricotEatsGorilla.hash_to_xml(hash).should == "eats Gorilla" end it "converts a nested Hash into nested nodes" do hash = { "apricot" => { "eats" => "gorilla", "drinks" => "beer" } } ApricotEatsGorilla.hash_to_xml(hash).should == "beergorilla" end it "converts a Hash containing an Array into multiple nodes" do hash = { "apricot" => { "eats" => [ "gorilla", "snake" ] } } ApricotEatsGorilla.hash_to_xml(hash).should == "gorillasnake" end end end