your_membership 1.1.5 → 1.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/httparty/ym_xml_parser.rb +29 -0
- data/lib/your_membership.rb +0 -2
- data/lib/your_membership/base.rb +11 -0
- data/lib/your_membership/version.rb +1 -1
- data/spec/lib/httparty/ym_xml_parser_spec.rb +29 -0
- data/spec/lib/your_membership/base_spec.rb +21 -0
- data/spec/lib/your_membership/profile_spec.rb +1 -0
- data/spec/spec_helper.rb +1 -1
- data/your_membership.gemspec +3 -3
- metadata +16 -21
- data/lib/httparty/patch.rb +0 -33
- data/spec/fixtures/vcr_cassettes/no_body_response.yml +0 -48
- data/spec/fixtures/vcr_cassettes/sa_members_cdata.yml +0 -51
- data/spec/fixtures/vcr_cassettes/sa_members_no_body.yml +0 -43
- data/spec/lib/httparty/patch_spec.rb +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0414125b59ee2d25c40031650648bc7c0b7cafe877f40df5509a49ea0b05f7d9
|
4
|
+
data.tar.gz: f72d79722d4dae7e6b1d93e2301a076ebba515ad7c2e50cc454fff04d22305a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7b76af5088d8cf1d24f09f041252efff15453112c1ef60559a53a570c67591c2bd4501fbc238570ca1ae9b2e7ee1aeff53c1fe207ea5fbde3ad0c285221b52a
|
7
|
+
data.tar.gz: 58ca1793293a33e92625f237c9480b72ce901d09863fa0dc43f82433a1a240dce653e9520f13138ea8682a23c4c9690ceb3d9d681b653bb7a935689824230915
|
data/CHANGELOG.md
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'httparty/parser'
|
2
|
+
|
3
|
+
module HTTParty
|
4
|
+
# Bug Fix for HTML encoded < and > in XML body. In order to parse the HTML
|
5
|
+
# encoded documents returned by the YourMembership API we need to HTML decode
|
6
|
+
# the <![CDATA[ tags.
|
7
|
+
#
|
8
|
+
# @api private
|
9
|
+
class YMXMLParser < HTTParty::Parser
|
10
|
+
# @api private
|
11
|
+
# @override
|
12
|
+
def body
|
13
|
+
decode(@body)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
# @api private
|
19
|
+
def decode(body)
|
20
|
+
# <![CDATA[ = <![CDATA[
|
21
|
+
# ]]> = ]]>
|
22
|
+
if !body.nil? && body.include?('<![CDATA[')
|
23
|
+
body.gsub! '<![CDATA[', '<![CDATA['
|
24
|
+
body.gsub! ']]>', ']]>'
|
25
|
+
end
|
26
|
+
body
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/your_membership.rb
CHANGED
data/lib/your_membership/base.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'httparty/ym_xml_parser'
|
2
|
+
|
1
3
|
module YourMembership
|
2
4
|
# Base Class inherited by all Your Membership SDK Classes.
|
3
5
|
class Base
|
@@ -22,6 +24,15 @@ module YourMembership
|
|
22
24
|
end
|
23
25
|
# rubocop:enable Style/ClassVars
|
24
26
|
|
27
|
+
# Fix bad XML from YM API by using custom parser.
|
28
|
+
# @api private
|
29
|
+
# @override HTTParty::ClassMethods#post
|
30
|
+
# @return [HTTParty::Response]
|
31
|
+
def self.post(path, options = {}, &block)
|
32
|
+
opt = options.merge(parser: ::HTTParty::YMXMLParser)
|
33
|
+
super(path, opt, &block)
|
34
|
+
end
|
35
|
+
|
25
36
|
# A Guard Method that returns true if the response from the API can be processed and raises an exception if not.
|
26
37
|
# @param [Hash] response
|
27
38
|
# @return [Boolean] true if no errors found.
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module HTTParty
|
4
|
+
RSpec.describe YMXMLParser do
|
5
|
+
it 'decodes HTML entities, eg. less-than, greater-than signs' do
|
6
|
+
body = <<~XML
|
7
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
8
|
+
<YourMembership_Response>
|
9
|
+
<ErrCode>0</ErrCode>
|
10
|
+
<ExtendedErrorInfo><![CDATA[Text information here]]></ExtendedErrorInfo>
|
11
|
+
<Sa.Members.All.GetIDs>
|
12
|
+
<ServerGmtBias>-5</ServerGmtBias>
|
13
|
+
<ServerTime>2015-12-16 15:54:12</ServerTime>
|
14
|
+
<Members>
|
15
|
+
<ID>57EEB598-CB44-4D85-B0D6-377F393AF5B4</ID>
|
16
|
+
<ID>1C0CE647-FAA5-4EB0-ADF0-5B669B36378E</ID>
|
17
|
+
</Members>
|
18
|
+
</Sa.Members.All.GetIDs>
|
19
|
+
</YourMembership_Response>
|
20
|
+
XML
|
21
|
+
parser = described_class.new(body, :xml)
|
22
|
+
parsed = parser.parse
|
23
|
+
expect(parsed).to be_a(Hash)
|
24
|
+
ymr = parsed['YourMembership_Response']
|
25
|
+
expect(ymr['ErrCode']).to eq('0')
|
26
|
+
expect(ymr['ExtendedErrorInfo']).to eq('Text information here')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module YourMembership
|
4
|
+
RSpec.describe Base do
|
5
|
+
describe '.post' do
|
6
|
+
it 'uses YMXMLParser' do
|
7
|
+
mock_parser = instance_double(
|
8
|
+
::HTTParty::YMXMLParser,
|
9
|
+
parse: { 'YourMembership_Response' => { 'ErrCode' => 999 } }
|
10
|
+
)
|
11
|
+
allow(::HTTParty::YMXMLParser).to receive(:new).and_return(mock_parser)
|
12
|
+
# It doesn't matter which cassette we use for this test.
|
13
|
+
VCR.use_cassette 'sa_members_all_getids_timestamp_single' do
|
14
|
+
response = described_class.post('/')
|
15
|
+
expect(response).to be_an(::HTTParty::Response)
|
16
|
+
expect(response['YourMembership_Response']).to eq('ErrCode' => 999)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -77,6 +77,7 @@ describe YourMembership::Profile do
|
|
77
77
|
}
|
78
78
|
}
|
79
79
|
end
|
80
|
+
|
80
81
|
it "accepts and sets required parameters for new profiles" do
|
81
82
|
profile = YourMembership::Profile.create_new('afirstname', 'alastname', 'amembertypecode', 'aemail', 'ausername', 'apassword', {})
|
82
83
|
profile.data['FirstName'].should == 'afirstname'
|
data/spec/spec_helper.rb
CHANGED
data/your_membership.gemspec
CHANGED
@@ -21,12 +21,12 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
|
-
spec.add_dependency "httparty", ">=0.13.1", "<0.
|
24
|
+
spec.add_dependency "httparty", ">=0.13.1", "<0.19"
|
25
25
|
spec.add_dependency "nokogiri", "~>1.6"
|
26
26
|
|
27
|
-
spec.add_development_dependency "bundler", "
|
27
|
+
spec.add_development_dependency "bundler", "<3"
|
28
|
+
spec.add_development_dependency "byebug"
|
28
29
|
spec.add_development_dependency "dotenv"
|
29
|
-
spec.add_development_dependency "pry"
|
30
30
|
spec.add_development_dependency "rake"
|
31
31
|
spec.add_development_dependency "rspec"
|
32
32
|
spec.add_development_dependency "vcr"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: your_membership
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nate Flood
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: 0.13.1
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '0.
|
22
|
+
version: '0.19'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: 0.13.1
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '0.
|
32
|
+
version: '0.19'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: nokogiri
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -48,18 +48,18 @@ dependencies:
|
|
48
48
|
name: bundler
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- - "
|
51
|
+
- - "<"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
53
|
+
version: '3'
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
|
-
- - "
|
58
|
+
- - "<"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
60
|
+
version: '3'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
|
-
name:
|
62
|
+
name: byebug
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
65
|
- - ">="
|
@@ -73,7 +73,7 @@ dependencies:
|
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '0'
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
|
-
name:
|
76
|
+
name: dotenv
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
79
|
- - ">="
|
@@ -161,7 +161,7 @@ files:
|
|
161
161
|
- LICENSE.txt
|
162
162
|
- README.md
|
163
163
|
- Rakefile
|
164
|
-
- lib/httparty/
|
164
|
+
- lib/httparty/ym_xml_parser.rb
|
165
165
|
- lib/your_membership.rb
|
166
166
|
- lib/your_membership/base.rb
|
167
167
|
- lib/your_membership/commerce.rb
|
@@ -187,13 +187,11 @@ files:
|
|
187
187
|
- lib/your_membership/sa_people.rb
|
188
188
|
- lib/your_membership/session.rb
|
189
189
|
- lib/your_membership/version.rb
|
190
|
-
- spec/fixtures/vcr_cassettes/no_body_response.yml
|
191
190
|
- spec/fixtures/vcr_cassettes/sa_members_all_getids_timestamp_multiple.yml
|
192
191
|
- spec/fixtures/vcr_cassettes/sa_members_all_getids_timestamp_none.yml
|
193
192
|
- spec/fixtures/vcr_cassettes/sa_members_all_getids_timestamp_single.yml
|
194
|
-
- spec/
|
195
|
-
- spec/
|
196
|
-
- spec/lib/httparty/patch_spec.rb
|
193
|
+
- spec/lib/httparty/ym_xml_parser_spec.rb
|
194
|
+
- spec/lib/your_membership/base_spec.rb
|
197
195
|
- spec/lib/your_membership/profile_spec.rb
|
198
196
|
- spec/lib/your_membership/sa_members_spec.rb
|
199
197
|
- spec/spec_helper.rb
|
@@ -217,19 +215,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
217
215
|
- !ruby/object:Gem::Version
|
218
216
|
version: '0'
|
219
217
|
requirements: []
|
220
|
-
|
221
|
-
rubygems_version: 2.7.6
|
218
|
+
rubygems_version: 3.0.3
|
222
219
|
signing_key:
|
223
220
|
specification_version: 4
|
224
221
|
summary: Ruby SDK for interfacing with the YourMembership.com XML API
|
225
222
|
test_files:
|
226
|
-
- spec/fixtures/vcr_cassettes/no_body_response.yml
|
227
223
|
- spec/fixtures/vcr_cassettes/sa_members_all_getids_timestamp_multiple.yml
|
228
224
|
- spec/fixtures/vcr_cassettes/sa_members_all_getids_timestamp_none.yml
|
229
225
|
- spec/fixtures/vcr_cassettes/sa_members_all_getids_timestamp_single.yml
|
230
|
-
- spec/
|
231
|
-
- spec/
|
232
|
-
- spec/lib/httparty/patch_spec.rb
|
226
|
+
- spec/lib/httparty/ym_xml_parser_spec.rb
|
227
|
+
- spec/lib/your_membership/base_spec.rb
|
233
228
|
- spec/lib/your_membership/profile_spec.rb
|
234
229
|
- spec/lib/your_membership/sa_members_spec.rb
|
235
230
|
- spec/spec_helper.rb
|
data/lib/httparty/patch.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'cgi'
|
2
|
-
|
3
|
-
# Monkey Patch for the HTTParty Gem
|
4
|
-
module HTTParty
|
5
|
-
# In order to parse the HTML encoded documents returned by the YourMembership
|
6
|
-
# API we need to HTML decode the <![CDATA[ tags. This is a bug workaround.
|
7
|
-
class Request
|
8
|
-
# This is the encode_body method from HTTParty's Request Class adding an additional method call to fix
|
9
|
-
# the CDATA elements that are improperly formatted in the YourMembership API's XML. This is done here to ensure that
|
10
|
-
# the fix is in place before the data is parsed.
|
11
|
-
def encode_body(body)
|
12
|
-
body = fix_cdata body
|
13
|
-
if ''.respond_to?(:encoding)
|
14
|
-
_encode_body(body)
|
15
|
-
else
|
16
|
-
body
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
# Bug Fix for HTML encoded < and > in XML body.
|
21
|
-
# @param body [String] an XML document that needs to be checked for this specific issue.
|
22
|
-
# @return [String] If the HTML encoding issue is found it is repaired and the document is returned.
|
23
|
-
def fix_cdata(body)
|
24
|
-
# <![CDATA[ = <![CDATA[
|
25
|
-
# ]]> = ]]>
|
26
|
-
if !body.nil? && body.include?('<![CDATA[')
|
27
|
-
body.gsub! '<![CDATA[', '<![CDATA['
|
28
|
-
body.gsub! ']]>', ']]>'
|
29
|
-
end
|
30
|
-
body
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
---
|
2
|
-
http_interactions:
|
3
|
-
- request:
|
4
|
-
method: post
|
5
|
-
uri: https://api.yourmembership.com/
|
6
|
-
body:
|
7
|
-
encoding: UTF-8
|
8
|
-
string: |
|
9
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
10
|
-
<YourMembership>
|
11
|
-
<Version>2.00</Version>
|
12
|
-
<ApiKey><PRIVATE_KEY></ApiKey>
|
13
|
-
<SaPasscode><SA_PASSCODE></SaPasscode>
|
14
|
-
<CallID>10000</CallID>
|
15
|
-
<Call Method="Sa.Members.All.GetIDs">
|
16
|
-
<Timestamp>2015-12-02 15:54:11</Timestamp>
|
17
|
-
</Call>
|
18
|
-
</YourMembership>
|
19
|
-
headers:
|
20
|
-
Accept-Encoding:
|
21
|
-
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
22
|
-
Accept:
|
23
|
-
- "*/*"
|
24
|
-
User-Agent:
|
25
|
-
- Ruby
|
26
|
-
response:
|
27
|
-
status:
|
28
|
-
code: 200
|
29
|
-
message: OK
|
30
|
-
headers:
|
31
|
-
Cache-Control:
|
32
|
-
- private
|
33
|
-
Content-Length:
|
34
|
-
- '24051'
|
35
|
-
Content-Type:
|
36
|
-
- text/xml; Charset=utf-8
|
37
|
-
Set-Cookie:
|
38
|
-
- "<ASP_SESSION_ID>"
|
39
|
-
X-Powered-By:
|
40
|
-
- ASP.NET
|
41
|
-
Date:
|
42
|
-
- Wed, 16 Dec 2015 20:54:12 GMT
|
43
|
-
Connection:
|
44
|
-
- Keep-alive
|
45
|
-
string: null
|
46
|
-
http_version:
|
47
|
-
recorded_at: Wed, 16 Dec 2015 20:54:12 GMT
|
48
|
-
recorded_with: VCR 3.0.0
|
@@ -1,51 +0,0 @@
|
|
1
|
-
---
|
2
|
-
http_interactions:
|
3
|
-
- request:
|
4
|
-
method: post
|
5
|
-
uri: https://api.yourmembership.com/
|
6
|
-
body:
|
7
|
-
encoding: UTF-8
|
8
|
-
string: |
|
9
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
10
|
-
<YourMembership>
|
11
|
-
<Version>2.00</Version>
|
12
|
-
<ApiKey><PRIVATE_KEY></ApiKey>
|
13
|
-
<SaPasscode><SA_PASSCODE></SaPasscode>
|
14
|
-
<CallID>10000</CallID>
|
15
|
-
<Call Method="Sa.Members.All.GetIDs">
|
16
|
-
<Timestamp>2015-12-02 15:54:11</Timestamp>
|
17
|
-
</Call>
|
18
|
-
</YourMembership>
|
19
|
-
headers:
|
20
|
-
Accept-Encoding:
|
21
|
-
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
22
|
-
Accept:
|
23
|
-
- "*/*"
|
24
|
-
User-Agent:
|
25
|
-
- Ruby
|
26
|
-
response:
|
27
|
-
status:
|
28
|
-
code: 200
|
29
|
-
message: OK
|
30
|
-
headers:
|
31
|
-
Cache-Control:
|
32
|
-
- private
|
33
|
-
Content-Length:
|
34
|
-
- '24051'
|
35
|
-
Content-Type:
|
36
|
-
- text/xml; Charset=utf-8
|
37
|
-
Set-Cookie:
|
38
|
-
- "<ASP_SESSION_ID>"
|
39
|
-
X-Powered-By:
|
40
|
-
- ASP.NET
|
41
|
-
Date:
|
42
|
-
- Wed, 16 Dec 2015 20:54:12 GMT
|
43
|
-
Connection:
|
44
|
-
- Keep-alive
|
45
|
-
body:
|
46
|
-
encoding: UTF-8
|
47
|
-
string: "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n\r\n<YourMembership_Response>\r\n<ErrCode>0</ErrCode>\r\n<ExtendedErrorInfo><![CDATA[Text information here]]></ExtendedErrorInfo>\r\n<Sa.Members.All.GetIDs>\r\n<ServerGmtBias>-5</ServerGmtBias>\r\n<ServerTime>2015-12-16
|
48
|
-
15:54:12</ServerTime>\r\n<Members>\r\n<ID>57EEB598-CB44-4D85-B0D6-377F393AF5B4</ID>\r\n<ID>1C0CE647-FAA5-4EB0-ADF0-5B669B36378E</ID>\r\n</Members>\r\n</Sa.Members.All.GetIDs>\r\n</YourMembership_Response>\r\n"
|
49
|
-
http_version:
|
50
|
-
recorded_at: Wed, 16 Dec 2015 20:54:12 GMT
|
51
|
-
recorded_with: VCR 3.0.0
|
@@ -1,43 +0,0 @@
|
|
1
|
-
---
|
2
|
-
http_interactions:
|
3
|
-
- request:
|
4
|
-
method: post
|
5
|
-
uri: https://api.yourmembership.com/
|
6
|
-
body:
|
7
|
-
encoding: UTF-8
|
8
|
-
string: ''
|
9
|
-
headers:
|
10
|
-
Accept-Encoding:
|
11
|
-
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
-
Accept:
|
13
|
-
- "*/*"
|
14
|
-
User-Agent:
|
15
|
-
- Ruby
|
16
|
-
response:
|
17
|
-
status:
|
18
|
-
code: 200
|
19
|
-
message: OK
|
20
|
-
headers:
|
21
|
-
Cache-Control:
|
22
|
-
- private
|
23
|
-
Content-Type:
|
24
|
-
- text/xml; Charset=utf-8
|
25
|
-
Vary:
|
26
|
-
- Accept-Encoding
|
27
|
-
Server:
|
28
|
-
- Microsoft-IIS/8.5
|
29
|
-
Set-Cookie:
|
30
|
-
- "<ASP_SESSION_ID>"
|
31
|
-
X-Powered-By:
|
32
|
-
- ASP.NET
|
33
|
-
Date:
|
34
|
-
- Thu, 17 Aug 2017 20:18:09 GMT
|
35
|
-
Content-Length:
|
36
|
-
- '301'
|
37
|
-
body:
|
38
|
-
encoding: ASCII-8BIT
|
39
|
-
string: "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n\r\n<YourMembership_Response>\r\n<ErrCode>902</ErrCode>\r\n<ExtendedErrorInfo></ExtendedErrorInfo>\r\n<ErrDesc>XML
|
40
|
-
packet is malformed or otherwise unreadable.</ErrDesc>\r\n<XmlRequest>\r\n<unnamed></unnamed>\r\n</XmlRequest>\r\n</YourMembership_Response>\r\n"
|
41
|
-
http_version:
|
42
|
-
recorded_at: Thu, 17 Aug 2017 20:18:09 GMT
|
43
|
-
recorded_with: VCR 3.0.3
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'FixCdata' do
|
4
|
-
it 'string returned' do
|
5
|
-
VCR.use_cassette 'sa_members_all_getids_timestamp_single' do
|
6
|
-
response = HTTParty.post("https://api.yourmembership.com/")
|
7
|
-
expect(response.body).to be_a(String)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'replace <![CDATA' do
|
12
|
-
VCR.use_cassette 'sa_members_cdata' do
|
13
|
-
response = HTTParty.post("https://api.yourmembership.com/")
|
14
|
-
expect(response.body).to include("<![CDATA[")
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'replace ]]>' do
|
19
|
-
VCR.use_cassette 'sa_members_cdata' do
|
20
|
-
response = HTTParty.post("https://api.yourmembership.com/")
|
21
|
-
expect(response.body).to include("]]>")
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'handle nil body response' do
|
26
|
-
VCR.use_cassette 'no_body_response' do
|
27
|
-
# The `null` in the cassette is being turned into a body of "" instead of a nil body. Stub it to be nil.
|
28
|
-
expect_any_instance_of(HTTParty::Response).to receive_messages(body: nil)
|
29
|
-
# Note that a nil body is unlikely (never) to occur within YM, but other non-YM APIs may respond with a nil body,
|
30
|
-
# so we need to ensure that our patch can handle that.
|
31
|
-
response = HTTParty.post("https://api.yourmembership.com/")
|
32
|
-
expect(response.body).to be nil
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|