your_membership 1.1.5 → 1.1.6
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.
- 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
|