require 'spec_helper' class TestResponder include ::ResponseConverter end describe ResponseConverter do before do @responder = TestResponder.new end context "#CONVERTER" do it "snakecase" do ResponseConverter::TAG_CONVERTER.call('TestSnake').should eq(:test_snake) end it "remove @" do ResponseConverter::TAG_CONVERTER.call('@test').should eq(:test) end it "remove unified_" do ResponseConverter::TAG_CONVERTER.call('unified_test').should eq(:test) end it "remove current_" do ResponseConverter::TAG_CONVERTER.call('current_test').should eq(:test) end it "all together" do ResponseConverter::TAG_CONVERTER.call('@CurrentUnifiedTest').should eq(:test) end end context "#convert_value" do it "convert lower boolean string" do @responder.convert_value('true').should eq(true) @responder.convert_value('false').should eq(false) end it "convert title boolean string" do @responder.convert_value('True').should eq(true) @responder.convert_value('false').should eq(false) end it "convert upper boolean string" do @responder.convert_value('TRUE').should eq(true) @responder.convert_value('FALSE').should eq(false) end it "convert float string" do value = @responder.convert_value('-1.0') value.class.should eq(Float) value.should eq(-1.0) value = @responder.convert_value('9.09') value.class.should eq(Float) value.should eq(9.09) end it "convert integer string" do value = @responder.convert_value('-324') value.class.should eq(Fixnum) value.should eq(-324) value = @responder.convert_value('537') value.class.should eq(Fixnum) value.should eq(537) end it "otherwise return same" do @responder.convert_value('unknown').should eq('unknown') end end context "#convert_response" do it "convert each Hash value" do @responder.convert_response({ :a => '-1', :b => '2.0', :c => 'True', :d => 'other' }).should eq({ :a => -1, :b => 2.0, :c => true, :d => 'other' }) end it "convert each nested Array value" do @responder.convert_response({ :a => '-1', :b => ['2.0', 'True', 'other'] }).should eq({ :a => -1, :b => [2.0, true, 'other' ] }) end it "convert each nested Hash value" do @responder.convert_response({ :a => '-1', :b => { :aa => '2.0', :bb => 'True', :cc => 'other' } }).should eq({ :a => -1, :b => { :aa => 2.0, :bb => true, :cc => 'other' } }) end it "convert each Hash value in each Array entry" do @responder.convert_response([{ :a => '-1', :b => '2.0', :c => 'True' }, { :a => 'False', :b => '5.4', :c => '-332.78' }]).should eq([{ :a => -1, :b => 2.0, :c => true }, { :a => false, :b => 5.4, :c => -332.78 }]) end it "otherwise return same" do @responder.convert_response('unknown').should eq('unknown') end end end