sage_pay 0.2.5 → 0.2.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.
- data/CHANGELOG.md +4 -0
- data/lib/sage_pay.rb +9 -5
- data/lib/sage_pay/server.rb +22 -1
- data/lib/sage_pay/server/command.rb +98 -0
- data/lib/sage_pay/server/{transaction_notification.rb → notification.rb} +3 -3
- data/lib/sage_pay/server/{transaction_notification_response.rb → notification_response.rb} +1 -1
- data/lib/sage_pay/server/{transaction_registration.rb → registration.rb} +22 -79
- data/lib/sage_pay/server/registration_response.rb +35 -0
- data/lib/sage_pay/server/release.rb +48 -0
- data/lib/sage_pay/server/{transaction_registration_response.rb → response.rb} +18 -42
- data/sage_pay.gemspec +12 -9
- data/spec/integration/sage_pay/server_spec.rb +62 -15
- data/spec/sage_pay/server/notification_response_spec.rb +75 -0
- data/spec/sage_pay/server/{transaction_notification_spec.rb → notification_spec.rb} +66 -28
- data/spec/sage_pay/server/{transaction_registration_response_spec.rb → registration_response_spec.rb} +10 -10
- data/spec/sage_pay/server/registration_spec.rb +609 -0
- data/spec/sage_pay_spec.rb +2 -2
- data/spec/support/factories.rb +8 -8
- metadata +17 -14
- data/spec/sage_pay/server/transaction_notification_response_spec.rb +0 -75
- data/spec/sage_pay/server/transaction_registration_spec.rb +0 -609
@@ -1,28 +1,28 @@
|
|
1
1
|
module SagePay
|
2
2
|
module Server
|
3
|
-
class
|
4
|
-
|
3
|
+
class Response
|
4
|
+
class_inheritable_hash :key_converter, :value_converter, :instance_writer => false
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
"VPSTxId" => :vps_tx_id,
|
12
|
-
"SecurityKey" => :security_key,
|
13
|
-
"NextURL" => :next_url
|
14
|
-
}
|
6
|
+
self.key_converter = {
|
7
|
+
"VPSProtocol" => :vps_protocol,
|
8
|
+
"Status" => :status,
|
9
|
+
"StatusDetail" => :status_detail,
|
10
|
+
}
|
15
11
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
}
|
12
|
+
self.value_converter = {
|
13
|
+
:status => {
|
14
|
+
"OK" => :ok,
|
15
|
+
"MALFORMED" => :malformed,
|
16
|
+
"INVALID" => :invalid,
|
17
|
+
"ERROR" => :error
|
23
18
|
}
|
19
|
+
}
|
20
|
+
|
21
|
+
attr_reader :vps_protocol, :status, :status_detail
|
24
22
|
|
23
|
+
def self.from_response_body(response_body)
|
25
24
|
attributes = {}
|
25
|
+
|
26
26
|
response_body.each_line do |line|
|
27
27
|
key, value = line.split('=', 2)
|
28
28
|
unless key.nil? || value.nil?
|
@@ -65,30 +65,6 @@ module SagePay
|
|
65
65
|
def error?
|
66
66
|
status == :error
|
67
67
|
end
|
68
|
-
|
69
|
-
def vps_tx_id
|
70
|
-
if ok?
|
71
|
-
@vps_tx_id
|
72
|
-
else
|
73
|
-
raise RuntimeError, "Unable to retrieve the transaction id as the status was not OK."
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
def security_key
|
78
|
-
if ok?
|
79
|
-
@security_key
|
80
|
-
else
|
81
|
-
raise RuntimeError, "Unable to retrieve the security key as the status was not OK."
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def next_url
|
86
|
-
if ok?
|
87
|
-
@next_url
|
88
|
-
else
|
89
|
-
raise RuntimeError, "Unable to retrieve the next URL as the status was not OK."
|
90
|
-
end
|
91
|
-
end
|
92
68
|
end
|
93
69
|
end
|
94
70
|
end
|
data/sage_pay.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
## If your rubyforge_project name is different, then edit it and comment out
|
8
8
|
## the sub! line in the Rakefile
|
9
9
|
s.name = 'sage_pay'
|
10
|
-
s.version = '0.2.
|
10
|
+
s.version = '0.2.6'
|
11
11
|
s.date = '2010-04-25'
|
12
12
|
s.rubyforge_project = 'sage_pay'
|
13
13
|
|
@@ -56,24 +56,27 @@ gateway for accepting credit card payments through your web app.
|
|
56
56
|
lib/sage_pay.rb
|
57
57
|
lib/sage_pay/server.rb
|
58
58
|
lib/sage_pay/server/address.rb
|
59
|
+
lib/sage_pay/server/command.rb
|
60
|
+
lib/sage_pay/server/notification.rb
|
61
|
+
lib/sage_pay/server/notification_response.rb
|
62
|
+
lib/sage_pay/server/registration.rb
|
63
|
+
lib/sage_pay/server/registration_response.rb
|
64
|
+
lib/sage_pay/server/release.rb
|
65
|
+
lib/sage_pay/server/response.rb
|
59
66
|
lib/sage_pay/server/signature_verification_details.rb
|
60
67
|
lib/sage_pay/server/transaction_code.rb
|
61
|
-
lib/sage_pay/server/transaction_notification.rb
|
62
|
-
lib/sage_pay/server/transaction_notification_response.rb
|
63
|
-
lib/sage_pay/server/transaction_registration.rb
|
64
|
-
lib/sage_pay/server/transaction_registration_response.rb
|
65
68
|
lib/sage_pay/uri_fixups.rb
|
66
69
|
lib/validatable-ext.rb
|
67
70
|
lib/validations/validates_inclusion_of.rb
|
68
71
|
sage_pay.gemspec
|
69
72
|
spec/integration/sage_pay/server_spec.rb
|
70
73
|
spec/sage_pay/server/address_spec.rb
|
74
|
+
spec/sage_pay/server/notification_response_spec.rb
|
75
|
+
spec/sage_pay/server/notification_spec.rb
|
76
|
+
spec/sage_pay/server/registration_response_spec.rb
|
77
|
+
spec/sage_pay/server/registration_spec.rb
|
71
78
|
spec/sage_pay/server/signature_verification_details_spec.rb
|
72
79
|
spec/sage_pay/server/transaction_code_spec.rb
|
73
|
-
spec/sage_pay/server/transaction_notification_response_spec.rb
|
74
|
-
spec/sage_pay/server/transaction_notification_spec.rb
|
75
|
-
spec/sage_pay/server/transaction_registration_response_spec.rb
|
76
|
-
spec/sage_pay/server/transaction_registration_spec.rb
|
77
80
|
spec/sage_pay/server_spec.rb
|
78
81
|
spec/sage_pay_spec.rb
|
79
82
|
spec/spec_helper.rb
|
@@ -2,14 +2,20 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
if run_integration_specs?
|
4
4
|
describe SagePay::Server, "integration specs" do
|
5
|
+
before(:each) do
|
6
|
+
SagePay::Server.default_registration_options = {
|
7
|
+
:mode => :simulator,
|
8
|
+
:vendor => "rubaidh",
|
9
|
+
:notification_url => "http://test.host/notification"
|
10
|
+
}
|
11
|
+
end
|
12
|
+
|
13
|
+
after(:each) do
|
14
|
+
SagePay::Server.default_registration_options = {}
|
15
|
+
end
|
16
|
+
|
5
17
|
describe ".payment" do
|
6
18
|
before(:each) do
|
7
|
-
SagePay::Server.default_registration_options = {
|
8
|
-
:mode => :simulator,
|
9
|
-
:vendor => "rubaidh",
|
10
|
-
:notification_url => "http://test.host/notification"
|
11
|
-
}
|
12
|
-
|
13
19
|
@payment = SagePay::Server.payment(
|
14
20
|
:description => "Demo payment",
|
15
21
|
:amount => 12.34,
|
@@ -18,26 +24,67 @@ if run_integration_specs?
|
|
18
24
|
)
|
19
25
|
end
|
20
26
|
|
21
|
-
after(:each) do
|
22
|
-
SagePay::Server.default_registration_options = {}
|
23
|
-
end
|
24
|
-
|
25
27
|
it "should successfully register the payment with SagePay" do
|
26
|
-
@payment.
|
28
|
+
@payment.run!.should_not be_nil
|
27
29
|
end
|
28
30
|
|
29
31
|
it "should be a valid registered payment" do
|
30
|
-
registration = @payment.
|
32
|
+
registration = @payment.run!
|
33
|
+
registration.should be_ok
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should have a next URL" do
|
37
|
+
registration = @payment.run!
|
38
|
+
registration.next_url.should_not be_nil
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should allow us to follow the next URL and the response should be successful" do
|
42
|
+
registration = @payment.run!
|
43
|
+
uri = URI.parse(registration.next_url)
|
44
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
45
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
46
|
+
http.use_ssl = true if uri.scheme == "https"
|
47
|
+
http.start { |http|
|
48
|
+
http.request(request)
|
49
|
+
}
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should allow us to retrieve signature verification details" do
|
53
|
+
@payment.run!
|
54
|
+
sig_details = @payment.signature_verification_details
|
55
|
+
|
56
|
+
sig_details.should_not be_nil
|
57
|
+
sig_details.security_key.should_not be_nil
|
58
|
+
sig_details.vendor.should_not be_nil
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe ".deferred" do
|
63
|
+
before(:each) do
|
64
|
+
@payment = SagePay::Server.deferred(
|
65
|
+
:description => "Demo payment",
|
66
|
+
:amount => 12.34,
|
67
|
+
:currency => "GBP",
|
68
|
+
:billing_address => address_factory
|
69
|
+
)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should successfully register the deferred payment with SagePay" do
|
73
|
+
@payment.run!.should_not be_nil
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should be a valid deferred payment" do
|
77
|
+
registration = @payment.run!
|
31
78
|
registration.should be_ok
|
32
79
|
end
|
33
80
|
|
34
81
|
it "should have a next URL" do
|
35
|
-
registration = @payment.
|
82
|
+
registration = @payment.run!
|
36
83
|
registration.next_url.should_not be_nil
|
37
84
|
end
|
38
85
|
|
39
86
|
it "should allow us to follow the next URL and the response should be successful" do
|
40
|
-
registration = @payment.
|
87
|
+
registration = @payment.run!
|
41
88
|
uri = URI.parse(registration.next_url)
|
42
89
|
request = Net::HTTP::Get.new(uri.request_uri)
|
43
90
|
http = Net::HTTP.new(uri.host, uri.port)
|
@@ -48,7 +95,7 @@ if run_integration_specs?
|
|
48
95
|
end
|
49
96
|
|
50
97
|
it "should allow us to retrieve signature verification details" do
|
51
|
-
@payment.
|
98
|
+
@payment.run!
|
52
99
|
sig_details = @payment.signature_verification_details
|
53
100
|
|
54
101
|
sig_details.should_not be_nil
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
include SagePay::Server
|
4
|
+
|
5
|
+
describe NotificationResponse do
|
6
|
+
it "should work straight from the factory" do
|
7
|
+
lambda {
|
8
|
+
notification_response_factory.should be_valid
|
9
|
+
}.should_not raise_error
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "validations" do
|
13
|
+
it { validates_the_presence_of(:notification_response, :status) }
|
14
|
+
it { validates_the_presence_of(:notification_response, :redirect_url) }
|
15
|
+
|
16
|
+
it "validates the presence of the status_detail field only if the status is something other than OK" do
|
17
|
+
notification_response = notification_response_factory(:status => :ok, :status_detail => nil)
|
18
|
+
notification_response.should be_valid
|
19
|
+
|
20
|
+
notification_response = notification_response_factory(:status => :invalid, :status_detail => "Invalid request!")
|
21
|
+
notification_response.should be_valid
|
22
|
+
|
23
|
+
notification_response = notification_response_factory(:status => :invalid, :status_detail => "")
|
24
|
+
notification_response.should_not be_valid
|
25
|
+
notification_response.errors.on(:status_detail).should include("can't be empty")
|
26
|
+
end
|
27
|
+
|
28
|
+
it { validates_the_length_of(:notification_response, :redirect_url, :max => 255) }
|
29
|
+
it { validates_the_length_of(:notification_response, :status_detail, :max => 255) }
|
30
|
+
|
31
|
+
it "should allow the status to be one of :ok, :invalid or :error" do
|
32
|
+
notification_response = notification_response_factory(:status => :ok)
|
33
|
+
notification_response.should be_valid
|
34
|
+
|
35
|
+
notification_response = notification_response_factory(:status => :invalid)
|
36
|
+
notification_response.should be_valid
|
37
|
+
|
38
|
+
notification_response = notification_response_factory(:status => :error)
|
39
|
+
notification_response.should be_valid
|
40
|
+
|
41
|
+
notification_response = notification_response_factory(:status => :chickens)
|
42
|
+
notification_response.should_not be_valid
|
43
|
+
notification_response.errors.on(:status).should include("is not in the list")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "#response" do
|
48
|
+
it "should produce the expected response for an OK status" do
|
49
|
+
notification_response = notification_response_factory(
|
50
|
+
:status => :ok,
|
51
|
+
:redirect_url => "http://test.host/some/redirect",
|
52
|
+
:status_detail => nil
|
53
|
+
)
|
54
|
+
notification_response.response.should == <<-RESPONSE.chomp
|
55
|
+
Status=OK\r
|
56
|
+
RedirectURL=http://test.host/some/redirect
|
57
|
+
RESPONSE
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should produce the expected response for an invalid status" do
|
61
|
+
notification_response = notification_response_factory(
|
62
|
+
:status => :invalid,
|
63
|
+
:redirect_url => "http://test.host/some/redirect",
|
64
|
+
:status_detail => "Totally didn't expect that notification, dude."
|
65
|
+
)
|
66
|
+
# FIXME: I'm asserting here that I don't have to URI-encode the body
|
67
|
+
# here. OK?
|
68
|
+
notification_response.response.should == <<-RESPONSE.chomp
|
69
|
+
Status=INVALID\r
|
70
|
+
RedirectURL=http://test.host/some/redirect\r
|
71
|
+
StatusDetail=Totally didn't expect that notification, dude.\r
|
72
|
+
RESPONSE
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -2,14 +2,40 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
include SagePay::Server
|
4
4
|
|
5
|
-
describe
|
5
|
+
describe Notification do
|
6
6
|
it "should work straight from the factory" do
|
7
7
|
lambda {
|
8
|
-
|
8
|
+
notification_factory.should_not be_nil
|
9
9
|
}.should_not raise_error
|
10
10
|
end
|
11
11
|
|
12
12
|
describe ".from_params" do
|
13
|
+
before(:each) do
|
14
|
+
@params = {
|
15
|
+
"VPSProtocol" => "2.23",
|
16
|
+
"TxType" => "PAYMENT",
|
17
|
+
"VendorTxCode" => "unique-tx-code",
|
18
|
+
"VPSTxId" => "{728A5721-B45F-4570-937E-90A16B0A5000}",
|
19
|
+
"Status" => "OK",
|
20
|
+
"StatusDetail" => "2000 : Card processed successfully.", # FIXME: Make this match reality
|
21
|
+
"TxAuthNo" => "1234567890",
|
22
|
+
"AVSCV2" => "ALL MATCH",
|
23
|
+
"AddressResult" => "MATCHED",
|
24
|
+
"PostCodeResult" => "MATCHED",
|
25
|
+
"CV2Result" => "MATCHED",
|
26
|
+
"GiftAid" => "0",
|
27
|
+
"3DSecureStatus" => "OK",
|
28
|
+
"CAVV" => "Something?",
|
29
|
+
"AddressStatus" => "CONFIRMED",
|
30
|
+
"PayerStatus" => "VERIFIED",
|
31
|
+
"CardType" => "VISA",
|
32
|
+
"Last4Digits" => "1234",
|
33
|
+
# FIXME: Calculated manually using the information above. Should
|
34
|
+
# really get one from a sample transaction...
|
35
|
+
"VPSSignature" => "6AB7A7FFB5369AF953CD57A84D5C2979"
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
13
39
|
context "with an OK status" do
|
14
40
|
before(:each) do
|
15
41
|
signature_verification_details = mock("Signature verification details",
|
@@ -17,36 +43,12 @@ describe TransactionNotification do
|
|
17
43
|
:security_key => "17F13DCBD8"
|
18
44
|
)
|
19
45
|
|
20
|
-
@
|
21
|
-
"VPSProtocol" => "2.23",
|
22
|
-
"TxType" => "PAYMENT",
|
23
|
-
"VendorTxCode" => "unique-tx-code",
|
24
|
-
"VPSTxId" => "{728A5721-B45F-4570-937E-90A16B0A5000}",
|
25
|
-
"Status" => "OK",
|
26
|
-
"StatusDetail" => "2000 : Card processed successfully.", # FIXME: Make this match reality
|
27
|
-
"TxAuthNo" => "1234567890",
|
28
|
-
"AVSCV2" => "ALL MATCH",
|
29
|
-
"AddressResult" => "MATCHED",
|
30
|
-
"PostCodeResult" => "MATCHED",
|
31
|
-
"CV2Result" => "MATCHED",
|
32
|
-
"GiftAid" => "0",
|
33
|
-
"3DSecureStatus" => "OK",
|
34
|
-
"CAVV" => "Something?",
|
35
|
-
"AddressStatus" => "CONFIRMED",
|
36
|
-
"PayerStatus" => "VERIFIED",
|
37
|
-
"CardType" => "VISA",
|
38
|
-
"Last4Digits" => "1234",
|
39
|
-
# FIXME: Calculated manually using the information above. Should
|
40
|
-
# really get one from a sample transaction...
|
41
|
-
"VPSSignature" => "6AB7A7FFB5369AF953CD57A84D5C2979"
|
42
|
-
}
|
43
|
-
|
44
|
-
@notification = TransactionNotification.from_params(@params, signature_verification_details)
|
46
|
+
@notification = Notification.from_params(@params, signature_verification_details)
|
45
47
|
end
|
46
48
|
|
47
49
|
it "should successfully parse the params" do
|
48
50
|
lambda {
|
49
|
-
|
51
|
+
Notification.from_params(@params).should_not be_nil
|
50
52
|
}.should_not raise_error
|
51
53
|
end
|
52
54
|
|
@@ -149,6 +151,42 @@ describe TransactionNotification do
|
|
149
151
|
it "should report that the vps signature is valid" do
|
150
152
|
@notification.should be_valid_signature
|
151
153
|
end
|
154
|
+
|
155
|
+
it "should generate a successful response" do
|
156
|
+
mock_notification_response = mock(NotificationResponse, :response => "some response")
|
157
|
+
NotificationResponse.should_receive(:new).with(:status => :ok, :redirect_url => "mock redirect url").and_return(mock_notification_response)
|
158
|
+
@notification.response("mock redirect url").should == "some response"
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
context "with an invalid signature" do
|
163
|
+
before(:each) do
|
164
|
+
signature_verification_details = mock("Signature verification details",
|
165
|
+
:vendor => "rubaidh",
|
166
|
+
:security_key => "different security key"
|
167
|
+
)
|
168
|
+
|
169
|
+
@notification = Notification.from_params(@params, signature_verification_details)
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should generate a failed response" do
|
173
|
+
mock_notification_response = mock(NotificationResponse, :response => "can haz failure")
|
174
|
+
NotificationResponse.should_receive(:new).with(:status => :invalid, :redirect_url => "mock redirect url", :status_detail => "Signature did not match our expectations").and_return(mock_notification_response)
|
175
|
+
@notification.response("mock redirect url").should == "can haz failure"
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
context "with a block supplied for the signature verification details" do
|
180
|
+
it "should still validate the signature correctly" do
|
181
|
+
notification = Notification.from_params(@params) do |attributes|
|
182
|
+
mock("Signature verification details",
|
183
|
+
:vendor => "rubaidh",
|
184
|
+
:security_key => "17F13DCBD8"
|
185
|
+
)
|
186
|
+
end
|
187
|
+
|
188
|
+
notification.should be_valid_signature
|
189
|
+
end
|
152
190
|
end
|
153
191
|
end
|
154
192
|
end
|
@@ -2,10 +2,10 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
include SagePay::Server
|
4
4
|
|
5
|
-
describe
|
5
|
+
describe RegistrationResponse do
|
6
6
|
it "should work straight from the factory" do
|
7
7
|
lambda {
|
8
|
-
|
8
|
+
registration_response_factory.should_not be_nil
|
9
9
|
}.should_not raise_error
|
10
10
|
end
|
11
11
|
|
@@ -17,12 +17,12 @@ VPSProtocol=2.23
|
|
17
17
|
Status=INVALID
|
18
18
|
StatusDetail=4000 : The VendorName is invalid or the account is not active.
|
19
19
|
RESPONSE
|
20
|
-
@response =
|
20
|
+
@response = RegistrationResponse.from_response_body(@response_body)
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should successfully parse the body" do
|
24
24
|
lambda {
|
25
|
-
|
25
|
+
RegistrationResponse.from_response_body(@response_body)
|
26
26
|
}.should_not raise_error
|
27
27
|
end
|
28
28
|
|
@@ -72,12 +72,12 @@ VPSProtocol=2.23
|
|
72
72
|
Status=MALFORMED
|
73
73
|
StatusDetail=5000 : Your request had too many toes.
|
74
74
|
RESPONSE
|
75
|
-
@response =
|
75
|
+
@response = RegistrationResponse.from_response_body(@response_body)
|
76
76
|
end
|
77
77
|
|
78
78
|
it "should successfully parse the body" do
|
79
79
|
lambda {
|
80
|
-
|
80
|
+
RegistrationResponse.from_response_body(@response_body)
|
81
81
|
}.should_not raise_error
|
82
82
|
end
|
83
83
|
|
@@ -127,12 +127,12 @@ VPSProtocol=2.23
|
|
127
127
|
Status=ERROR
|
128
128
|
StatusDetail=5000 : SagePay blew up.
|
129
129
|
RESPONSE
|
130
|
-
@response =
|
130
|
+
@response = RegistrationResponse.from_response_body(@response_body)
|
131
131
|
end
|
132
132
|
|
133
133
|
it "should successfully parse the body" do
|
134
134
|
lambda {
|
135
|
-
|
135
|
+
RegistrationResponse.from_response_body(@response_body)
|
136
136
|
}.should_not raise_error
|
137
137
|
end
|
138
138
|
|
@@ -186,12 +186,12 @@ SecurityKey=17F13DCBD8
|
|
186
186
|
NextURL=https://test.sagepay.com/Simulator/VSPServerPaymentPage.asp?TransactionID={728A5721-B45F-4570-937E-90A16B0A5000}
|
187
187
|
RESPONSE
|
188
188
|
|
189
|
-
@response =
|
189
|
+
@response = RegistrationResponse.from_response_body(@response_body)
|
190
190
|
end
|
191
191
|
|
192
192
|
it "should successfully parse the body" do
|
193
193
|
lambda {
|
194
|
-
|
194
|
+
RegistrationResponse.from_response_body(@response_body)
|
195
195
|
}.should_not raise_error
|
196
196
|
end
|
197
197
|
|