savon 0.9.6 → 0.9.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -198,6 +198,7 @@ describe Savon::Client do
198
198
  client.http.headers.expects(:[]=).with("Cookie", anything).never
199
199
  client.http.headers.stubs(:[]=).with("SOAPAction", '"authenticate"')
200
200
  client.http.headers.stubs(:[]=).with("Content-Type", "text/xml;charset=UTF-8")
201
+ client.http.headers.stubs(:[]=).with("Content-Length", "384")
201
202
 
202
203
  client.request :authenticate
203
204
  end
@@ -213,6 +214,7 @@ describe Savon::Client do
213
214
  client.http.headers.expects(:[]=).with("Cookie", "some-cookie")
214
215
  client.http.headers.stubs(:[]=).with("SOAPAction", '"authenticate"')
215
216
  client.http.headers.stubs(:[]=).with("Content-Type", "text/xml;charset=UTF-8")
217
+ client.http.headers.stubs(:[]=).with("Content-Length", "384")
216
218
 
217
219
  client.request :authenticate
218
220
  end
@@ -240,7 +242,7 @@ describe Savon::Client do
240
242
  end
241
243
 
242
244
  context "with a local WSDL document" do
243
- let(:client) { Savon::Client.new { wsdl.document = "spec/fixtures/wsdl/authentication.xml" } }
245
+ let(:client) { Savon::Client.new { wsdl.document = "spec/fixtures/wsdl/authentication.xml" } }
244
246
 
245
247
  before { HTTPI.expects(:get).never }
246
248
 
@@ -362,6 +364,32 @@ describe Savon::Client do
362
364
  end
363
365
  end
364
366
 
367
+ context "with an Array of namespaced items" do
368
+ let(:client) { Savon::Client.new { wsdl.document = "spec/fixtures/wsdl/taxcloud.xml" } }
369
+
370
+ before do
371
+ HTTPI.stubs(:get).returns(new_response(:body => Fixture.wsdl(:taxcloud)))
372
+ HTTPI.stubs(:post).returns(new_response)
373
+ end
374
+
375
+ it "should namespaces each Array item as expected" do
376
+ HTTPI::Request.any_instance.expects(:body=).with do |value|
377
+ value.include?("<ins0:cartItems><ins0:CartItem>") && value.include?("<wsdl:ItemID>SKU-TEST</wsdl:ItemID>")
378
+ end
379
+
380
+ address = { "Address1" => "888 6th Ave", "Address2" => nil, "City" => "New York", "State" => "NY", "Zip5" => "10001", "Zip4" => nil }
381
+ cart_item = { "Index" => 0, "ItemID" => "SKU-TEST", "TIC" => "00000", "Price" => 50.0, "Qty" => 1 }
382
+
383
+ client.request :lookup, :body => {
384
+ "customerID" => 123,
385
+ "cartID" => 456,
386
+ "cartItems" => { "CartItem" => [cart_item] },
387
+ "origin" => address,
388
+ "destination" => address
389
+ }
390
+ end
391
+ end
392
+
365
393
  context "without a WSDL document" do
366
394
  let(:client) do
367
395
  Savon::Client.new do
@@ -1,7 +1,7 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe Savon::SOAP::Request do
4
- let(:request) { Savon::SOAP::Request.new HTTPI::Request.new, soap }
4
+ let(:soap_request) { Savon::SOAP::Request.new HTTPI::Request.new, soap }
5
5
  let(:soap) { Savon::SOAP::XML.new Endpoint.soap, [nil, :get_user, {}], :id => 1 }
6
6
 
7
7
  it "contains the content type for each supported SOAP version" do
@@ -20,33 +20,37 @@ describe Savon::SOAP::Request do
20
20
 
21
21
  describe ".new" do
22
22
  it "uses the SOAP endpoint for the request" do
23
- request.request.url.should == URI(soap.endpoint)
23
+ soap_request.request.url.should == URI(soap.endpoint)
24
24
  end
25
25
 
26
26
  it "sets the SOAP body for the request" do
27
- request.request.body.should == soap.to_xml
27
+ soap_request.request.body.should == soap.to_xml
28
28
  end
29
29
 
30
- it "sets the 'Content-Type' header for SOAP 1.1" do
31
- request.request.headers["Content-Type"].should == Savon::SOAP::Request::ContentType[1]
30
+ it "sets the Content-Type header for SOAP 1.1" do
31
+ soap_request.request.headers["Content-Type"].should == Savon::SOAP::Request::ContentType[1]
32
32
  end
33
33
 
34
- it "sets the 'Content-Type' header for SOAP 1.2" do
34
+ it "sets the Content-Type header for SOAP 1.2" do
35
35
  soap.version = 2
36
- request.request.headers["Content-Type"].should == Savon::SOAP::Request::ContentType[2]
36
+ soap_request.request.headers["Content-Type"].should == Savon::SOAP::Request::ContentType[2]
37
37
  end
38
38
 
39
- it "does not set the 'Content-Type' header if it's already specified" do
39
+ it "does not set the Content-Type header if it's already specified" do
40
40
  headers = { "Content-Type" => "text/plain" }
41
- request = Savon::SOAP::Request.new HTTPI::Request.new(:headers => headers), soap
42
- request.request.headers["Content-Type"].should == headers["Content-Type"]
41
+ soap_request = Savon::SOAP::Request.new HTTPI::Request.new(:headers => headers), soap
42
+ soap_request.request.headers["Content-Type"].should == headers["Content-Type"]
43
+ end
44
+
45
+ it "sets the Content-Length header" do
46
+ soap_request.request.headers["Content-Length"].should == soap.to_xml.length.to_s
43
47
  end
44
48
  end
45
49
 
46
50
  describe "#response" do
47
51
  it "executes an HTTP POST request and returns a Savon::SOAP::Response" do
48
52
  HTTPI.expects(:post).returns(HTTPI::Response.new 200, {}, Fixture.response(:authentication))
49
- request.response.should be_a(Savon::SOAP::Response)
53
+ soap_request.response.should be_a(Savon::SOAP::Response)
50
54
  end
51
55
  end
52
56
 
@@ -187,6 +187,19 @@ describe Savon::SOAP::Response do
187
187
  end
188
188
  end
189
189
 
190
+ describe "#doc" do
191
+ it "returns a Nokogiri::XML::Document for the SOAP response XML" do
192
+ soap_response.doc.should be_a(Nokogiri::XML::Document)
193
+ end
194
+ end
195
+
196
+ describe "#xpath" do
197
+ it "permits XPath access to elements in the request" do
198
+ soap_response.xpath("//client").first.inner_text.should == "radclient"
199
+ soap_response.xpath("//ns2:authenticateResponse/return/success").first.inner_text.should == "true"
200
+ end
201
+ end
202
+
190
203
  describe "#http" do
191
204
  it "should return the HTTPI::Response" do
192
205
  soap_response.http.should be_an(HTTPI::Response)
@@ -110,10 +110,18 @@ describe Savon::SOAP::XML do
110
110
  xml.to_xml.should include("<id>1</id>")
111
111
  end
112
112
 
113
- it "should also accepts an XML String" do
113
+ it "should accepts an XML String" do
114
114
  xml.body = "<id>1</id>"
115
115
  xml.to_xml.should include("<id>1</id>")
116
116
  end
117
+
118
+ it "should accept a block" do
119
+ xml.body do |body|
120
+ body.user { body.id 1 }
121
+ end
122
+
123
+ xml.to_xml.should include("<authenticate><user><id>1</id></user></authenticate>")
124
+ end
117
125
  end
118
126
 
119
127
  describe "#xml" do
@@ -126,6 +134,19 @@ describe Savon::SOAP::XML do
126
134
  xml.xml { |xml| xml.using("Builder") }
127
135
  xml.to_xml.should == '<?xml version="1.0" encoding="UTF-8"?><using>Builder</using>'
128
136
  end
137
+
138
+ it "accepts options to pass to the Builder::XmlMarkup instruct!" do
139
+ xml.xml :xml, :aaa => :bbb do |xml|
140
+ xml.using("Builder")
141
+ end
142
+
143
+ xml.to_xml.should == '<?xml version="1.0" encoding="UTF-8" aaa="bbb"?><using>Builder</using>'
144
+ end
145
+
146
+ it "can change encoding to UTF-16" do
147
+ xml.xml(:xml, :encoding => "UTF-16") { |xml| xml.using("Builder") }
148
+ xml.to_xml.should == '<?xml version="1.0" encoding="UTF-16"?><using>Builder</using>'
149
+ end
129
150
  end
130
151
 
131
152
  describe "#to_xml" do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: savon
3
3
  version: !ruby/object:Gem::Version
4
- hash: 55
4
+ hash: 53
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
- - 6
10
- version: 0.9.6
9
+ - 7
10
+ version: 0.9.7
11
11
  platform: ruby
12
12
  authors:
13
13
  - Daniel Harrington
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-07 00:00:00 Z
18
+ date: 2011-08-25 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: builder
@@ -189,20 +189,6 @@ dependencies:
189
189
  version: 0.3.5
190
190
  type: :development
191
191
  version_requirements: *id011
192
- - !ruby/object:Gem::Dependency
193
- name: autotest
194
- prerelease: false
195
- requirement: &id012 !ruby/object:Gem::Requirement
196
- none: false
197
- requirements:
198
- - - ">="
199
- - !ruby/object:Gem::Version
200
- hash: 3
201
- segments:
202
- - 0
203
- version: "0"
204
- type: :development
205
- version_requirements: *id012
206
192
  description: Ruby's heavy metal SOAP client
207
193
  email: me@rubiii.com
208
194
  executables: []
@@ -244,10 +230,12 @@ files:
244
230
  - spec/fixtures/response/multi_ref.xml
245
231
  - spec/fixtures/response/soap_fault.xml
246
232
  - spec/fixtures/response/soap_fault12.xml
233
+ - spec/fixtures/response/taxcloud.xml
247
234
  - spec/fixtures/wsdl/authentication.xml
248
235
  - spec/fixtures/wsdl/lower_camel.xml
249
236
  - spec/fixtures/wsdl/multiple_namespaces.xml
250
237
  - spec/fixtures/wsdl/multiple_types.xml
238
+ - spec/fixtures/wsdl/taxcloud.xml
251
239
  - spec/savon/client_spec.rb
252
240
  - spec/savon/core_ext/object_spec.rb
253
241
  - spec/savon/core_ext/string_spec.rb
@@ -291,7 +279,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
291
279
  requirements: []
292
280
 
293
281
  rubyforge_project: savon
294
- rubygems_version: 1.8.5
282
+ rubygems_version: 1.8.6
295
283
  signing_key:
296
284
  specification_version: 3
297
285
  summary: Heavy metal Ruby SOAP client