|
81 | 81 | END |
82 | 82 | expect(xml).to parse_to(:root => {:paypal_details => {:deets => [{:secret_code => "1234"}], :payer_email => "abc@test.com", :payment_id => "1234567890"}}) |
83 | 83 | end |
| 84 | + |
| 85 | + it "does not collapse nested structures with single-child elements" do |
| 86 | + xml = "<api-error-response><message>Test</message><errors><errors type=\"array\"></errors></errors></api-error-response>" |
| 87 | + expect(xml).to parse_to({:api_error_response=>{:message=>"Test", :errors=>{:errors=>[]}}}) |
| 88 | + end |
| 89 | + |
| 90 | + it "preserves hash structure when one key has array value" do |
| 91 | + xml = <<-END |
| 92 | + <root> |
| 93 | + <message>Error message</message> |
| 94 | + <items type="array"> |
| 95 | + <item>Value1</item> |
| 96 | + </items> |
| 97 | + </root> |
| 98 | + END |
| 99 | + expect(xml).to parse_to({:root => {:message => "Error message", :items => ["Value1"]}}) |
| 100 | + end |
| 101 | + |
| 102 | + it "handles error response with nested errors correctly" do |
| 103 | + xml = <<-END |
| 104 | + <api-error-response> |
| 105 | + <message>Validation failed</message> |
| 106 | + <errors> |
| 107 | + <errors type="array"> |
| 108 | + <error> |
| 109 | + <code>81234</code> |
| 110 | + <message>Field is required</message> |
| 111 | + </error> |
| 112 | + </errors> |
| 113 | + </errors> |
| 114 | + </api-error-response> |
| 115 | + END |
| 116 | + expect(xml).to parse_to({ |
| 117 | + :api_error_response => { |
| 118 | + :message => "Validation failed", |
| 119 | + :errors => { |
| 120 | + :errors => [{:code => "81234", :message => "Field is required"}] |
| 121 | + } |
| 122 | + } |
| 123 | + }) |
| 124 | + end |
| 125 | + |
| 126 | + it "handles client token error response structure" do |
| 127 | + xml = <<-END |
| 128 | + <api-error-response> |
| 129 | + <message>Invalid request</message> |
| 130 | + <errors> |
| 131 | + <errors type="array"></errors> |
| 132 | + </errors> |
| 133 | + </api-error-response> |
| 134 | + END |
| 135 | + result = Braintree::Xml::Parser.hash_from_xml(xml) |
| 136 | + expect(result[:api_error_response]).to be_a(Hash) |
| 137 | + expect(result[:api_error_response][:message]).to eq("Invalid request") |
| 138 | + expect(result[:api_error_response][:errors]).to be_a(Hash) |
| 139 | + expect(result[:api_error_response][:errors][:errors]).to eq([]) |
| 140 | + end |
84 | 141 | end |
85 | 142 | end |
0 commit comments