sabredav_client 0.2.0 → 0.2.1

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.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -3
  3. data/.rspec +1 -1
  4. data/CHANGELOG.rdoc +8 -8
  5. data/Gemfile +3 -3
  6. data/Gemfile.lock +39 -38
  7. data/README.md +49 -49
  8. data/Rakefile +5 -5
  9. data/lib/sabredav_client.rb +10 -10
  10. data/lib/sabredav_client/calendar.rb +171 -171
  11. data/lib/sabredav_client/client.rb +57 -57
  12. data/lib/sabredav_client/errors/errors.rb +41 -41
  13. data/lib/sabredav_client/events.rb +106 -105
  14. data/lib/sabredav_client/net.rb +15 -15
  15. data/lib/sabredav_client/principal.rb +51 -51
  16. data/lib/sabredav_client/request.rb +97 -97
  17. data/lib/sabredav_client/version.rb +3 -3
  18. data/lib/sabredav_client/xml_request_builder.rb +7 -7
  19. data/lib/sabredav_client/xml_request_builder/base.rb +17 -17
  20. data/lib/sabredav_client/xml_request_builder/mkcalendar.rb +25 -25
  21. data/lib/sabredav_client/xml_request_builder/mkcol_principal.rb +28 -28
  22. data/lib/sabredav_client/xml_request_builder/post_sharing.rb +41 -41
  23. data/lib/sabredav_client/xml_request_builder/propfind_calendar.rb +41 -41
  24. data/lib/sabredav_client/xml_request_builder/propfind_invite.rb +19 -19
  25. data/lib/sabredav_client/xml_request_builder/propfind_owner.rb +19 -19
  26. data/lib/sabredav_client/xml_request_builder/proppatch_calendar.rb +25 -25
  27. data/lib/sabredav_client/xml_request_builder/proppatch_events_owner.rb +23 -23
  28. data/lib/sabredav_client/xml_request_builder/proppatch_principal.rb +25 -25
  29. data/lib/sabredav_client/xml_request_builder/report_event_changes.rb +22 -22
  30. data/lib/sabredav_client/xml_request_builder/report_vevent.rb +30 -30
  31. data/lib/sabredav_client/xml_request_builder/report_vtodo.rb +20 -20
  32. data/sabredav_client.gemspec +31 -31
  33. data/spec/fixtures/calendar_fetch_changes.xml +26 -26
  34. data/spec/fixtures/calendar_info.xml +14 -14
  35. data/spec/fixtures/calendar_sharees.xml +35 -35
  36. data/spec/fixtures/calendar_sharees_without_common_name.xml +26 -26
  37. data/spec/fixtures/event.ics +23 -23
  38. data/spec/fixtures/events_find_multiple.xml +51 -51
  39. data/spec/fixtures/events_owner.xml +12 -12
  40. data/spec/fixtures/xml_request_builder/mkcalendar.xml +9 -9
  41. data/spec/fixtures/xml_request_builder/mkcol_principal.xml +12 -12
  42. data/spec/fixtures/xml_request_builder/post_sharing.xml +18 -18
  43. data/spec/fixtures/xml_request_builder/propfind_calendar/all_properties.xml +8 -8
  44. data/spec/fixtures/xml_request_builder/propfind_invite.xml +6 -6
  45. data/spec/fixtures/xml_request_builder/propfind_owner.xml +6 -6
  46. data/spec/fixtures/xml_request_builder/proppatch_calendar.xml +9 -9
  47. data/spec/fixtures/xml_request_builder/proppatch_events_owner.xml +8 -8
  48. data/spec/fixtures/xml_request_builder/proppatch_principal.xml +9 -9
  49. data/spec/fixtures/xml_request_builder/report_event_changes.xml +8 -8
  50. data/spec/sabredav_client/calendar_spec.rb +142 -142
  51. data/spec/sabredav_client/client_spec.rb +41 -41
  52. data/spec/sabredav_client/events_spec.rb +119 -119
  53. data/spec/sabredav_client/principal_spec.rb +51 -51
  54. data/spec/sabredav_client/request_spec.rb +55 -55
  55. data/spec/sabredav_client/xml_request_builder_specs/base_spec.rb +30 -30
  56. data/spec/sabredav_client/xml_request_builder_specs/mkcalendar_spec.rb +13 -13
  57. data/spec/sabredav_client/xml_request_builder_specs/mkcol_principal_spec.rb +13 -13
  58. data/spec/sabredav_client/xml_request_builder_specs/post_sharing_spec.rb +15 -15
  59. data/spec/sabredav_client/xml_request_builder_specs/propfind_calendar_spec.rb +24 -24
  60. data/spec/sabredav_client/xml_request_builder_specs/propfind_invite_spec.rb +14 -14
  61. data/spec/sabredav_client/xml_request_builder_specs/propfind_owner_spec.rb +14 -14
  62. data/spec/sabredav_client/xml_request_builder_specs/proppatch_calendar.rb +15 -15
  63. data/spec/sabredav_client/xml_request_builder_specs/proppatch_events_owner_spec.rb +14 -14
  64. data/spec/sabredav_client/xml_request_builder_specs/proppatch_principal_spec.rb +24 -24
  65. data/spec/sabredav_client/xml_request_builder_specs/report_event_changes_spec.rb +15 -15
  66. data/spec/spec.opts +4 -4
  67. data/spec/spec_helper.rb +8 -8
  68. metadata +5 -5
@@ -1,6 +1,6 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <d:propfind xmlns:d="DAV:" xmlns:cs="http://calendarserver.org/ns/">
3
- <d:prop>
4
- <cs:objectOwner/>
5
- </d:prop>
6
- </d:propfind>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <d:propfind xmlns:d="DAV:" xmlns:cs="http://calendarserver.org/ns/">
3
+ <d:prop>
4
+ <cs:objectOwner/>
5
+ </d:prop>
6
+ </d:propfind>
@@ -1,9 +1,9 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <d:propertyupdate xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav">
3
- <d:set>
4
- <d:prop>
5
- <d:displayname>name</d:displayname>
6
- <c:calendar-description>description</c:calendar-description>
7
- </d:prop>
8
- </d:set>
9
- </d:propertyupdate>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <d:propertyupdate xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav">
3
+ <d:set>
4
+ <d:prop>
5
+ <d:displayname>name</d:displayname>
6
+ <c:calendar-description>description</c:calendar-description>
7
+ </d:prop>
8
+ </d:set>
9
+ </d:propertyupdate>
@@ -1,8 +1,8 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <d:propertyupdate xmlns:d="DAV:" xmlns:cs="http://calendarserver.org/ns/">
3
- <d:set>
4
- <d:prop>
5
- <cs:objectOwner>principals/usertest</cs:objectOwner>
6
- </d:prop>
7
- </d:set>
8
- </d:propertyupdate>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <d:propertyupdate xmlns:d="DAV:" xmlns:cs="http://calendarserver.org/ns/">
3
+ <d:set>
4
+ <d:prop>
5
+ <cs:objectOwner>principals/usertest</cs:objectOwner>
6
+ </d:prop>
7
+ </d:set>
8
+ </d:propertyupdate>
@@ -1,9 +1,9 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <d:propertyupdate xmlns:d="DAV:" xmlns:sb="http://sabredav.org/ns">
3
- <d:set>
4
- <d:prop>
5
- <sb:email-address>update@test.de</sb:email-address>
6
- <d:displayname>David B.</d:displayname>
7
- </d:prop>
8
- </d:set>
9
- </d:propertyupdate>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <d:propertyupdate xmlns:d="DAV:" xmlns:sb="http://sabredav.org/ns">
3
+ <d:set>
4
+ <d:prop>
5
+ <sb:email-address>update@test.de</sb:email-address>
6
+ <d:displayname>David B.</d:displayname>
7
+ </d:prop>
8
+ </d:set>
9
+ </d:propertyupdate>
@@ -1,8 +1,8 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <d:sync-collection xmlns:d="DAV:">
3
- <d:sync-token>token-1234</d:sync-token>
4
- <d:sync-level>1</d:sync-level>
5
- <d:prop>
6
- <d:getetag/>
7
- </d:prop>
8
- </d:sync-collection>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <d:sync-collection xmlns:d="DAV:">
3
+ <d:sync-token>token-1234</d:sync-token>
4
+ <d:sync-level>1</d:sync-level>
5
+ <d:prop>
6
+ <d:getetag/>
7
+ </d:prop>
8
+ </d:sync-collection>
@@ -1,142 +1,142 @@
1
- require 'spec_helper'
2
-
3
- describe SabredavClient::Calendar do
4
-
5
- let(:calendar) { SabredavClient::Calendar.new(:uri => "http://localhost:5232/user/calendar", :user => "user" , :password => "") }
6
-
7
- describe "initialization" do
8
-
9
- it "check Class of new calendar" do
10
- expect(calendar).to be_a(SabredavClient::Calendar)
11
- end
12
-
13
- it "request configuration is available" do
14
- expect(calendar.client).to be_a(SabredavClient::Client)
15
- end
16
-
17
- end
18
-
19
- describe "events" do
20
-
21
- it "events returns Events class" do
22
- expect(calendar.events).to be_a(SabredavClient::Events)
23
- end
24
- end
25
-
26
- describe "calendar" do
27
-
28
- it "create" do
29
- displayname = "Test Calendar"
30
- ctag = "http://sabre.io/ns/sync/15"
31
- sync_token = ctag
32
-
33
- FakeWeb.register_uri(:mkcalendar, %r{http://user@localhost:5232/user/calendar}, status: ["201", "Created"])
34
- FakeWeb.register_uri(:propfind, %r{http://user@localhost:5232/user/calendar}, status: ["200", "OK"], body: File.open("spec/fixtures/calendar_info.xml"))
35
-
36
- r = calendar.create(displayname: displayname)
37
-
38
- expect(r[:displayname]).to eq(displayname)
39
- expect(r[:ctag]).to eq(ctag)
40
- expect(r[:sync_token]).to eq(sync_token)
41
- end
42
-
43
- it "update" do
44
- description = "a example description"
45
- displayname = "example discription"
46
- body = SabredavClient::XmlRequestBuilder::ProppatchCalendar.new(displayname, description).to_xml
47
- header = {content_type: "application/xml"}
48
-
49
- FakeWeb.register_uri(:proppatch, "http://user@localhost:5232/user/calendar/", status: ["207", "Multi-Staus"])
50
-
51
- expect(calendar.client).to receive(:create_request).with(:proppatch, header: header, body: body).and_call_original
52
-
53
- r = calendar.update(displayname: displayname, description: description)
54
- expect(r).to be
55
-
56
- end
57
-
58
- it "delete" do
59
- FakeWeb.register_uri(:delete, "http://user@localhost:5232/user/calendar/",
60
- [{status: ["204", "No Content"]}, {status: ["404", "Not Found"]}])
61
- r = calendar.delete
62
- expect(r).to be(true)
63
-
64
- expect {
65
- calendar.delete
66
- }.to raise_error(SabredavClient::Errors::NotFoundError)
67
- end
68
- end
69
-
70
- describe "sharing" do
71
- FakeWeb.register_uri(:post, "http://user@localhost:5232/user/calendar/", [{status: ["200", "OK"]},
72
- {status: ["200", "OK"]}])
73
- it "is type email" do
74
- type = :email
75
- r = calendar.share adds: ["test@test.de"], privilege: "write-read"
76
- expect(r).to be(true)
77
- end
78
-
79
- it "is not type email" do
80
- type = :other
81
- expect {
82
- calendar.share adds: ["test@test.de"], privilege: "write-read", type: type
83
- }.to raise_error(SabredavClient::Errors::ShareeTypeNotSupportedError)
84
- end
85
-
86
- it "add one share" do
87
- r = calendar.share(adds: ["test@test.de"], privilege: "write-read")
88
- expect(r).to be(true)
89
- end
90
-
91
- it "fetch_sharees" do
92
- FakeWeb.register_uri(:propfind, "http://user@localhost:5232/user/calendar/", body: File.open('spec/fixtures/calendar_sharees.xml') )
93
-
94
- organizer = {href: "/caldav/server.php/principals/user", uri: "D8D498E2-4A98-4DC7-B421-BC49261168AF"}
95
- sharees =
96
- [{href: "mailto:sharee1@njiuko.com", common_name: "sharee1", access: "read", status: :accepted, uri: "5bffa09e-7220-4688-a13f-088714a98783", principal: nil},
97
- {href: "mailto:sharee2@protonet.info", common_name: "sharee2", access: "write-read", status: :accepted, uri: "f176b400-f0e4-4a57-bd92-0c307810ce12", principal: nil}]
98
- expected_result = {sharees: sharees, organizer: organizer}
99
-
100
- r = calendar.fetch_sharees
101
- expect(r).to eq(expected_result)
102
- end
103
-
104
- context "errors" do
105
- it "deals with missing common name" do
106
- FakeWeb.register_uri(:propfind, "http://user@localhost:5232/user/calendar/", body: File.open('spec/fixtures/calendar_sharees_without_common_name.xml') )
107
-
108
- organizer = {href: "/caldav/server.php/principals/user", uri: "D8D498E2-4A98-4DC7-B421-BC49261168AF"}
109
- sharees = [{href: "mailto:sharee2@protonet.info", common_name: nil, access: "write-read", status: :accepted, uri: "f176b400-f0e4-4a57-bd92-0c307810ce12", principal: "principal/user99"}]
110
- expected_result = {sharees: sharees, organizer: organizer}
111
-
112
- r = calendar.fetch_sharees
113
- expect(r).to eq(expected_result)
114
- end
115
- end
116
- end
117
-
118
- describe "info" do
119
- it "fetches the calendar info" do
120
- FakeWeb.register_uri(:propfind, "http://user@localhost:5232/user/calendar/", body: File.open('spec/fixtures/calendar_info.xml') )
121
- info = calendar.info
122
-
123
- expect(info[:displayname]).to eq("Test Calendar")
124
- expect(info[:ctag]).to eq("http://sabre.io/ns/sync/15")
125
- end
126
- end
127
-
128
- describe "fetch changes" do
129
- new_sync_token = "http://sabredav.org/ns/sync/5001"
130
- deletions = [ "deletedevent.ics" ]
131
- changes = [ {uri: "newevent.ics", etag: "\"1\""}, {uri: "updatedevent.ics", etag: "\"2\""}]
132
-
133
- it "got two changes and one deletion" do
134
- FakeWeb.register_uri(:report, "http://user@localhost:5232/user/calendar/", body: File.open('spec/fixtures/calendar_fetch_changes.xml') )
135
- result = calendar.fetch_changes("random_token")
136
- expect(result[:deletions]).to eq deletions
137
- expect(result[:changes]).to eq changes
138
- expect(result[:sync_token]).to eq new_sync_token
139
- end
140
- end
141
-
142
- end
1
+ require 'spec_helper'
2
+
3
+ describe SabredavClient::Calendar do
4
+
5
+ let(:calendar) { SabredavClient::Calendar.new(:uri => "http://localhost:5232/user/calendar", :user => "user" , :password => "") }
6
+
7
+ describe "initialization" do
8
+
9
+ it "check Class of new calendar" do
10
+ expect(calendar).to be_a(SabredavClient::Calendar)
11
+ end
12
+
13
+ it "request configuration is available" do
14
+ expect(calendar.client).to be_a(SabredavClient::Client)
15
+ end
16
+
17
+ end
18
+
19
+ describe "events" do
20
+
21
+ it "events returns Events class" do
22
+ expect(calendar.events).to be_a(SabredavClient::Events)
23
+ end
24
+ end
25
+
26
+ describe "calendar" do
27
+
28
+ it "create" do
29
+ displayname = "Test Calendar"
30
+ ctag = "http://sabre.io/ns/sync/15"
31
+ sync_token = ctag
32
+
33
+ FakeWeb.register_uri(:mkcalendar, %r{http://user@localhost:5232/user/calendar}, status: ["201", "Created"])
34
+ FakeWeb.register_uri(:propfind, %r{http://user@localhost:5232/user/calendar}, status: ["200", "OK"], body: File.open("spec/fixtures/calendar_info.xml"))
35
+
36
+ r = calendar.create(displayname: displayname)
37
+
38
+ expect(r[:displayname]).to eq(displayname)
39
+ expect(r[:ctag]).to eq(ctag)
40
+ expect(r[:sync_token]).to eq(sync_token)
41
+ end
42
+
43
+ it "update" do
44
+ description = "a example description"
45
+ displayname = "example discription"
46
+ body = SabredavClient::XmlRequestBuilder::ProppatchCalendar.new(displayname, description).to_xml
47
+ header = {content_type: "application/xml"}
48
+
49
+ FakeWeb.register_uri(:proppatch, "http://user@localhost:5232/user/calendar/", status: ["207", "Multi-Staus"])
50
+
51
+ expect(calendar.client).to receive(:create_request).with(:proppatch, header: header, body: body).and_call_original
52
+
53
+ r = calendar.update(displayname: displayname, description: description)
54
+ expect(r).to be
55
+
56
+ end
57
+
58
+ it "delete" do
59
+ FakeWeb.register_uri(:delete, "http://user@localhost:5232/user/calendar/",
60
+ [{status: ["204", "No Content"]}, {status: ["404", "Not Found"]}])
61
+ r = calendar.delete
62
+ expect(r).to be(true)
63
+
64
+ expect {
65
+ calendar.delete
66
+ }.to raise_error(SabredavClient::Errors::NotFoundError)
67
+ end
68
+ end
69
+
70
+ describe "sharing" do
71
+ FakeWeb.register_uri(:post, "http://user@localhost:5232/user/calendar/", [{status: ["200", "OK"]},
72
+ {status: ["200", "OK"]}])
73
+ it "is type email" do
74
+ type = :email
75
+ r = calendar.share adds: ["test@test.de"], privilege: "write-read"
76
+ expect(r).to be(true)
77
+ end
78
+
79
+ it "is not type email" do
80
+ type = :other
81
+ expect {
82
+ calendar.share adds: ["test@test.de"], privilege: "write-read", type: type
83
+ }.to raise_error(SabredavClient::Errors::ShareeTypeNotSupportedError)
84
+ end
85
+
86
+ it "add one share" do
87
+ r = calendar.share(adds: ["test@test.de"], privilege: "write-read")
88
+ expect(r).to be(true)
89
+ end
90
+
91
+ it "fetch_sharees" do
92
+ FakeWeb.register_uri(:propfind, "http://user@localhost:5232/user/calendar/", body: File.open('spec/fixtures/calendar_sharees.xml') )
93
+
94
+ organizer = {href: "/caldav/server.php/principals/user", uri: "D8D498E2-4A98-4DC7-B421-BC49261168AF"}
95
+ sharees =
96
+ [{href: "mailto:sharee1@njiuko.com", common_name: "sharee1", access: "read", status: :accepted, uri: "5bffa09e-7220-4688-a13f-088714a98783", principal: nil},
97
+ {href: "mailto:sharee2@protonet.info", common_name: "sharee2", access: "write-read", status: :accepted, uri: "f176b400-f0e4-4a57-bd92-0c307810ce12", principal: nil}]
98
+ expected_result = {sharees: sharees, organizer: organizer}
99
+
100
+ r = calendar.fetch_sharees
101
+ expect(r).to eq(expected_result)
102
+ end
103
+
104
+ context "errors" do
105
+ it "deals with missing common name" do
106
+ FakeWeb.register_uri(:propfind, "http://user@localhost:5232/user/calendar/", body: File.open('spec/fixtures/calendar_sharees_without_common_name.xml') )
107
+
108
+ organizer = {href: "/caldav/server.php/principals/user", uri: "D8D498E2-4A98-4DC7-B421-BC49261168AF"}
109
+ sharees = [{href: "mailto:sharee2@protonet.info", common_name: nil, access: "write-read", status: :accepted, uri: "f176b400-f0e4-4a57-bd92-0c307810ce12", principal: "principal/user99"}]
110
+ expected_result = {sharees: sharees, organizer: organizer}
111
+
112
+ r = calendar.fetch_sharees
113
+ expect(r).to eq(expected_result)
114
+ end
115
+ end
116
+ end
117
+
118
+ describe "info" do
119
+ it "fetches the calendar info" do
120
+ FakeWeb.register_uri(:propfind, "http://user@localhost:5232/user/calendar/", body: File.open('spec/fixtures/calendar_info.xml') )
121
+ info = calendar.info
122
+
123
+ expect(info[:displayname]).to eq("Test Calendar")
124
+ expect(info[:ctag]).to eq("http://sabre.io/ns/sync/15")
125
+ end
126
+ end
127
+
128
+ describe "fetch changes" do
129
+ new_sync_token = "http://sabredav.org/ns/sync/5001"
130
+ deletions = [ "deletedevent.ics" ]
131
+ changes = [ {uri: "newevent.ics", etag: "\"1\""}, {uri: "updatedevent.ics", etag: "\"2\""}]
132
+
133
+ it "got two changes and one deletion" do
134
+ FakeWeb.register_uri(:report, "http://user@localhost:5232/user/calendar/", body: File.open('spec/fixtures/calendar_fetch_changes.xml') )
135
+ result = calendar.fetch_changes("random_token")
136
+ expect(result[:deletions]).to eq deletions
137
+ expect(result[:changes]).to eq changes
138
+ expect(result[:sync_token]).to eq new_sync_token
139
+ end
140
+ end
141
+
142
+ end
@@ -1,41 +1,41 @@
1
- require 'spec_helper'
2
-
3
- describe SabredavClient::Client do
4
-
5
- let!(:client) { SabredavClient::Client.new(:uri => "http://localhost:5232/user/principals/user", :user => "user" , :password => "" ) }
6
-
7
- describe "initialization" do
8
-
9
- it "no encryption and basic_auth" do
10
- #TODO
11
- end
12
-
13
- it "with ssl and basic authentification" do
14
- client = SabredavClient::Client.new(:uri => "https://localhost:5232/user/principals/user", :user => "user" , :password => "" )
15
-
16
- expect(client.host).to be
17
- expect(client.port).to be
18
- expect(client.user).to be
19
- expect(client.base_path).to be
20
- expect(client.ssl).to be
21
- expect(client.password).to be
22
- expect(client.authtype).to eq("basic")
23
- end
24
-
25
- it "proxy usage" do
26
- #TODO
27
- end
28
- end
29
-
30
- describe "create_request" do
31
-
32
- it " with header and body" do
33
- method = :report
34
- body = "xml_file"
35
- header = {content_type: "application/xml"}
36
- res = client.create_request(method, header: header, body: body)
37
- expect(res.request.body).to eq(body)
38
- expect(res.request.to_hash).to include("content-type" => ["application/xml"])
39
- end
40
- end
41
- end
1
+ require 'spec_helper'
2
+
3
+ describe SabredavClient::Client do
4
+
5
+ let!(:client) { SabredavClient::Client.new(:uri => "http://localhost:5232/user/principals/user", :user => "user" , :password => "" ) }
6
+
7
+ describe "initialization" do
8
+
9
+ it "no encryption and basic_auth" do
10
+ #TODO
11
+ end
12
+
13
+ it "with ssl and basic authentification" do
14
+ client = SabredavClient::Client.new(:uri => "https://localhost:5232/user/principals/user", :user => "user" , :password => "" )
15
+
16
+ expect(client.host).to be
17
+ expect(client.port).to be
18
+ expect(client.user).to be
19
+ expect(client.base_path).to be
20
+ expect(client.ssl).to be
21
+ expect(client.password).to be
22
+ expect(client.authtype).to eq("basic")
23
+ end
24
+
25
+ it "proxy usage" do
26
+ #TODO
27
+ end
28
+ end
29
+
30
+ describe "create_request" do
31
+
32
+ it " with header and body" do
33
+ method = :report
34
+ body = "xml_file"
35
+ header = {content_type: "application/xml"}
36
+ res = client.create_request(method, header: header, body: body)
37
+ expect(res.request.body).to eq(body)
38
+ expect(res.request.to_hash).to include("content-type" => ["application/xml"])
39
+ end
40
+ end
41
+ end