cardconnect 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +11 -0
  3. data/.rubocop.yml +10 -0
  4. data/.travis.yml +7 -0
  5. data/README.md +2 -0
  6. data/Rakefile +70 -42
  7. data/cardconnect.gemspec +8 -8
  8. data/lib/cardconnect.rb +1 -4
  9. data/lib/cardconnect/configuration.rb +0 -1
  10. data/lib/cardconnect/connection.rb +12 -16
  11. data/lib/cardconnect/error.rb +1 -1
  12. data/lib/cardconnect/services/authorization/authorization.rb +1 -3
  13. data/lib/cardconnect/services/authorization/authorization_request.rb +6 -5
  14. data/lib/cardconnect/services/authorization/authorization_response.rb +7 -7
  15. data/lib/cardconnect/services/capture/capture.rb +0 -2
  16. data/lib/cardconnect/services/capture/capture_request.rb +4 -5
  17. data/lib/cardconnect/services/capture/capture_response.rb +3 -4
  18. data/lib/cardconnect/services/deposit/deposit.rb +1 -3
  19. data/lib/cardconnect/services/deposit/deposit_request.rb +8 -11
  20. data/lib/cardconnect/services/deposit/deposit_response.rb +4 -5
  21. data/lib/cardconnect/services/inquire/inquire.rb +0 -2
  22. data/lib/cardconnect/services/inquire/inquire_request.rb +3 -4
  23. data/lib/cardconnect/services/inquire/inquire_response.rb +3 -4
  24. data/lib/cardconnect/services/refund/refund.rb +1 -2
  25. data/lib/cardconnect/services/refund/refund_request.rb +5 -6
  26. data/lib/cardconnect/services/refund/refund_response.rb +7 -7
  27. data/lib/cardconnect/services/service_endpoint.rb +10 -14
  28. data/lib/cardconnect/services/settlement_status/settlement_status.rb +0 -2
  29. data/lib/cardconnect/services/settlement_status/settlement_status_request.rb +8 -11
  30. data/lib/cardconnect/services/settlement_status/settlement_status_response.rb +4 -5
  31. data/lib/cardconnect/services/void/void.rb +1 -2
  32. data/lib/cardconnect/services/void/void_request.rb +5 -6
  33. data/lib/cardconnect/services/void/void_response.rb +8 -7
  34. data/lib/cardconnect/utils.rb +0 -2
  35. data/lib/cardconnect/version.rb +1 -1
  36. data/test/api_request_stubs.rb +56 -52
  37. data/test/api_response_stubs.rb +87 -92
  38. data/test/cardconnect/configuration_test.rb +0 -1
  39. data/test/cardconnect/connection_test.rb +1 -1
  40. data/test/cardconnect/services/authorization/authorization_request_test.rb +44 -27
  41. data/test/cardconnect/services/authorization/authorization_response_test.rb +24 -18
  42. data/test/cardconnect/services/authorization/authorization_test.rb +1 -4
  43. data/test/cardconnect/services/capture/capture_request_test.rb +8 -8
  44. data/test/cardconnect/services/capture/capture_response_test.rb +7 -7
  45. data/test/cardconnect/services/capture/capture_test.rb +1 -3
  46. data/test/cardconnect/services/deposit/deposit_request_test.rb +9 -9
  47. data/test/cardconnect/services/deposit/deposit_response_test.rb +17 -15
  48. data/test/cardconnect/services/deposit/deposit_test.rb +4 -4
  49. data/test/cardconnect/services/inquire/inquire_request_test.rb +3 -3
  50. data/test/cardconnect/services/inquire/inquire_response_test.rb +12 -12
  51. data/test/cardconnect/services/inquire/inquire_test.rb +5 -5
  52. data/test/cardconnect/services/refund/refund_request_test.rb +3 -3
  53. data/test/cardconnect/services/refund/refund_response_test.rb +15 -13
  54. data/test/cardconnect/services/refund/refund_test.rb +1 -2
  55. data/test/cardconnect/services/settlement_status/settlement_status_request_test.rb +12 -11
  56. data/test/cardconnect/services/settlement_status/settlement_status_response_test.rb +9 -8
  57. data/test/cardconnect/services/settlement_status/settlement_status_test.rb +4 -4
  58. data/test/cardconnect/services/void/void_request_test.rb +3 -3
  59. data/test/cardconnect/services/void/void_response_test.rb +16 -14
  60. data/test/cardconnect/services/void/void_test.rb +1 -2
  61. data/test/cardconnect_test.rb +0 -1
  62. data/test/test_helper.rb +15 -13
  63. metadata +6 -3
@@ -16,7 +16,7 @@ describe CardConnect::Connection do
16
16
 
17
17
  it 'must have a URL that matches the configured endpoint' do
18
18
  @connection.url_prefix.host.must_equal URI.parse(CardConnect.configuration.endpoint).host
19
- @connection.url_prefix.scheme.must_equal "https"
19
+ @connection.url_prefix.scheme.must_equal 'https'
20
20
  end
21
21
 
22
22
  describe 'Faraday handlers' do
@@ -11,102 +11,118 @@ describe CardConnect::Service::AuthorizationRequest do
11
11
 
12
12
  describe 'FIELDS' do
13
13
  it 'should have merchant id' do
14
- @request.merchid.must_equal "000000927996"
14
+ @request.merchid.must_equal '000000927996'
15
15
  end
16
16
 
17
17
  it 'should have account' do
18
- @request.account.must_equal "4111111111111111"
18
+ @request.account.must_equal '4111111111111111'
19
19
  end
20
20
 
21
21
  it 'should have expiry' do
22
- @request.expiry.must_equal "1212"
22
+ @request.expiry.must_equal '1212'
23
23
  end
24
24
 
25
25
  it 'should have amount' do
26
- @request.amount.must_equal "0"
26
+ @request.amount.must_equal '0'
27
27
  end
28
28
 
29
29
  it 'should have currency' do
30
- @request.currency.must_equal "USD"
30
+ @request.currency.must_equal 'USD'
31
31
  end
32
32
 
33
33
  it 'should have account type' do
34
- @request.accttype.must_equal "VISA"
34
+ @request.accttype.must_equal 'VISA'
35
35
  end
36
36
 
37
37
  it 'should have name' do
38
- @request.name.must_equal "TOM JONES"
38
+ @request.name.must_equal 'TOM JONES'
39
39
  end
40
40
 
41
41
  it 'should have address' do
42
- @request.address.must_equal "123 MAIN STREET"
42
+ @request.address.must_equal '123 MAIN STREET'
43
43
  end
44
44
 
45
45
  it 'should have city' do
46
- @request.city.must_equal "anytown"
46
+ @request.city.must_equal 'anytown'
47
47
  end
48
48
 
49
49
  it 'should have country' do
50
- @request.country.must_equal "US"
50
+ @request.country.must_equal 'US'
51
51
  end
52
52
 
53
53
  it 'should have phone' do
54
- @request.phone.must_equal "3334445555"
54
+ @request.phone.must_equal '3334445555'
55
55
  end
56
56
 
57
57
  it 'should have postal' do
58
- @request.postal.must_equal "55555"
58
+ @request.postal.must_equal '55555'
59
59
  end
60
60
 
61
61
  it 'should have email' do
62
- @request.email.must_equal "tom@jones.com"
62
+ @request.email.must_equal 'tom@jones.com'
63
63
  end
64
64
 
65
65
  it 'should have ecomind' do
66
- @request.ecomind.must_equal "E"
66
+ @request.ecomind.must_equal 'E'
67
67
  end
68
68
 
69
69
  it 'should have cvv2' do
70
- @request.cvv2.must_equal "123"
70
+ @request.cvv2.must_equal '123'
71
71
  end
72
72
 
73
73
  it 'should have order id' do
74
- @request.orderid.must_equal "AB-11-9876"
74
+ @request.orderid.must_equal 'AB-11-9876'
75
75
  end
76
76
 
77
77
  it 'should have track' do
78
- @request.track.must_equal "Y"
78
+ @request.track.must_equal 'Y'
79
79
  end
80
80
 
81
81
  it 'should have bankaba' do
82
- @request.bankaba.must_equal "1010101"
82
+ @request.bankaba.must_equal '1010101'
83
83
  end
84
84
 
85
85
  it 'should have tokenize' do
86
- @request.tokenize.must_equal "Y"
86
+ @request.tokenize.must_equal 'Y'
87
87
  end
88
88
 
89
89
  it 'should have termid' do
90
- @request.termid.must_equal "12345"
90
+ @request.termid.must_equal '12345'
91
91
  end
92
92
 
93
93
  it 'should have capture' do
94
- @request.capture.must_equal "Y"
94
+ @request.capture.must_equal 'Y'
95
95
  end
96
96
 
97
97
  it 'should have ssnl4 field' do
98
- @request.ssnl4.must_equal "1234"
98
+ @request.ssnl4.must_equal '1234'
99
99
  end
100
100
 
101
101
  it 'should have license field' do
102
- @request.license.must_equal "CO:1231231234"
102
+ @request.license.must_equal 'CO:1231231234'
103
103
  end
104
104
 
105
105
  it 'should have profile field' do
106
- @request.profile.must_equal "Y"
106
+ @request.profile.must_equal 'Y'
107
107
  end
108
108
 
109
- describe "userfields" do
109
+ it 'should have ponumber field' do
110
+ @request.ponumber.must_equal '1234'
111
+ end
112
+
113
+ it 'should have authcode field' do
114
+ @request.authcode.must_equal '123456'
115
+ end
116
+
117
+ it 'should have invoiceid field' do
118
+ @request.invoiceid.must_equal '000000000001'
119
+ end
120
+
121
+ it 'should have taxamnt field' do
122
+ @request.taxamnt.must_equal '0'
123
+ end
124
+
125
+ describe 'userfields' do
110
126
  it 'should be an array of name-value pairs' do
111
127
  @request.userfields.must_be_kind_of Array
112
128
  @request.userfields.first.must_be_kind_of Hash
@@ -127,8 +143,9 @@ describe CardConnect::Service::AuthorizationRequest do
127
143
 
128
144
  describe '#errors' do
129
145
  CardConnect::Service::AuthorizationRequest::REQUIRED_FIELDS.each do |field|
130
- it "should have an error message if #{field} is missing" do
131
- CardConnect::Service::AuthorizationRequest.new.errors.must_include "#{field.to_s.capitalize} is missing"
146
+ field_name = field.to_s.capitalize
147
+ it "should have an error message if #{field_name} is missing" do
148
+ CardConnect::Service::AuthorizationRequest.new.errors.must_include "#{field_name} is missing"
132
149
  end
133
150
  end
134
151
  end
@@ -11,55 +11,59 @@ describe CardConnect::Service::AuthorizationResponse do
11
11
 
12
12
  describe 'FIELDS' do
13
13
  it 'should have the merchant id' do
14
- @response.merchid.must_equal "020594000000"
14
+ @response.merchid.must_equal '020594000000'
15
15
  end
16
16
 
17
17
  it 'should have the status' do
18
- @response.respstat.must_equal "A"
18
+ @response.respstat.must_equal 'A'
19
19
  end
20
20
 
21
21
  it 'should have the Retrieval Reference Number' do
22
- @response.retref.must_equal "343005123105"
22
+ @response.retref.must_equal '343005123105'
23
23
  end
24
24
 
25
25
  it 'should have the Account Number' do
26
- @response.account.must_equal "41XXXXXXXXXX1111"
26
+ @response.account.must_equal '41XXXXXXXXXX1111'
27
27
  end
28
28
 
29
29
  it 'should have the Token' do
30
- @response.token.must_equal "9419786452781111"
30
+ @response.token.must_equal '9419786452781111'
31
31
  end
32
32
 
33
33
  it 'should have the Amount' do
34
- @response.amount.must_equal "111"
34
+ @response.amount.must_equal '111'
35
35
  end
36
36
 
37
37
  it 'should have the Response Code' do
38
- @response.respcode.must_equal "00"
38
+ @response.respcode.must_equal '00'
39
39
  end
40
40
 
41
41
  it 'should have the Response text' do
42
- @response.resptext.must_equal "Approved"
42
+ @response.resptext.must_equal 'Approved'
43
43
  end
44
44
 
45
45
  it 'should have the Response Processor' do
46
- @response.respproc.must_equal "FNOR"
46
+ @response.respproc.must_equal 'FNOR'
47
47
  end
48
48
 
49
49
  it 'should have the AVS response code' do
50
- @response.avsresp.must_equal "9"
50
+ @response.avsresp.must_equal '9'
51
51
  end
52
52
 
53
53
  it 'should have the CVV response code' do
54
- @response.cvvresp.must_equal "M"
54
+ @response.cvvresp.must_equal 'M'
55
55
  end
56
56
 
57
57
  it 'should have the Authorization code' do
58
- @response.authcode.must_equal "046221"
58
+ @response.authcode.must_equal '046221'
59
59
  end
60
60
 
61
61
  it 'should have the Commercial Card Flag' do
62
- @response.commcard.must_equal "N"
62
+ @response.commcard.must_equal 'N'
63
+ end
64
+
65
+ it 'should have the profile id' do
66
+ @response.profileid.must_equal '12345678'
63
67
  end
64
68
  end
65
69
 
@@ -69,7 +73,8 @@ describe CardConnect::Service::AuthorizationResponse do
69
73
  end
70
74
 
71
75
  it 'should be false when there are errors' do
72
- response = CardConnect::Service::AuthorizationResponse.new(valid_auth_response.merge!("respstat" => "B", "resptext" => "this is an error"))
76
+ auth_response = valid_auth_response.merge!('respstat' => 'B', 'resptext' => 'this is an error')
77
+ response = CardConnect::Service::AuthorizationResponse.new(auth_response)
73
78
  response.success?.must_equal false
74
79
  end
75
80
  end
@@ -80,14 +85,15 @@ describe CardConnect::Service::AuthorizationResponse do
80
85
  end
81
86
 
82
87
  it 'should be an array of error messages when there are errors' do
83
- response = CardConnect::Service::AuthorizationResponse.new(valid_auth_response.merge!("respstat" => "B", "resptext" => "this is an error"))
84
- response.errors.must_equal ["this is an error"]
88
+ auth_response = valid_auth_response.merge!('respstat' => 'B', 'resptext' => 'this is an error')
89
+ response = CardConnect::Service::AuthorizationResponse.new(auth_response)
90
+ response.errors.must_equal ['this is an error']
85
91
  end
86
92
  end
87
93
 
88
- describe "#body" do
94
+ describe '#body' do
89
95
  it 'should generate hash with all the right values' do
90
96
  @response.body.must_equal symbolize_keys(valid_auth_response)
91
97
  end
92
98
  end
93
- end
99
+ end
@@ -26,15 +26,13 @@ describe CardConnect::Service::Authorization do
26
26
  end
27
27
 
28
28
  it 'uses the default merchant id if it is not passed in' do
29
- @service.build_request(@valid_params.reject!{|k,v| k == 'merchid' })
29
+ @service.build_request(@valid_params.reject! { |k, _| k == 'merchid' })
30
30
  @service.request.merchid.must_equal 'merchant123'
31
31
  end
32
32
 
33
33
  it 'creates an Authorization request object with the right params' do
34
34
  @service.build_request(@valid_params)
35
-
36
35
  @service.request.must_be_kind_of CardConnect::Service::AuthorizationRequest
37
-
38
36
  @service.request.merchid.must_equal '000000927996'
39
37
  @service.request.account.must_equal '4111111111111111'
40
38
  @service.request.expiry.must_equal '1212'
@@ -55,5 +53,4 @@ describe CardConnect::Service::Authorization do
55
53
  @service.response.must_be_kind_of CardConnect::Service::AuthorizationResponse
56
54
  end
57
55
  end
58
-
59
56
  end
@@ -11,31 +11,31 @@ describe CardConnect::Service::CaptureRequest do
11
11
 
12
12
  describe 'FIELDS' do
13
13
  it 'should have merchant id' do
14
- @request.merchid.must_equal "000000927996"
14
+ @request.merchid.must_equal '000000927996'
15
15
  end
16
16
 
17
17
  it 'should have retrieval reference number' do
18
- @request.retref.must_equal "288002073633"
18
+ @request.retref.must_equal '288002073633'
19
19
  end
20
20
 
21
21
  it 'should have authorization code' do
22
- @request.authcode.must_equal "046221"
22
+ @request.authcode.must_equal '046221'
23
23
  end
24
24
 
25
25
  it 'should have amount' do
26
- @request.amount.must_equal "596.00"
26
+ @request.amount.must_equal '596.00'
27
27
  end
28
28
 
29
29
  it 'should have invoice id' do
30
- @request.invoiceid.must_equal "7890"
30
+ @request.invoiceid.must_equal '7890'
31
31
  end
32
32
 
33
33
  it 'should have PO number' do
34
- @request.ponumber.must_equal "PO-0736332"
34
+ @request.ponumber.must_equal 'PO-0736332'
35
35
  end
36
36
 
37
37
  it 'should have tax amount' do
38
- @request.taxamnt.must_equal "40.00"
38
+ @request.taxamnt.must_equal '40.00'
39
39
  end
40
40
  end
41
41
 
@@ -57,7 +57,7 @@ describe CardConnect::Service::CaptureRequest do
57
57
  end
58
58
  end
59
59
 
60
- describe "#payload" do
60
+ describe '#payload' do
61
61
  it 'should generate hash with all the right values' do
62
62
  @request.payload.must_equal symbolize_keys(valid_capture_request)
63
63
  end
@@ -11,29 +11,29 @@ describe CardConnect::Service::CaptureResponse do
11
11
 
12
12
  describe 'FIELDS' do
13
13
  it 'should have merchant id' do
14
- @response.merchid.must_equal "000000927996"
14
+ @response.merchid.must_equal '000000927996'
15
15
  end
16
16
 
17
17
  it 'should have account' do
18
- @response.account.must_equal "41XXXXXXXXXX4113"
18
+ @response.account.must_equal '41XXXXXXXXXX4113'
19
19
  end
20
20
 
21
21
  it 'should have amount' do
22
- @response.amount.must_equal "596.00"
22
+ @response.amount.must_equal '596.00'
23
23
  end
24
24
 
25
25
  it 'should have retrieval reference number' do
26
- @response.retref.must_equal "288002073633"
26
+ @response.retref.must_equal '288002073633'
27
27
  end
28
28
 
29
29
  it 'should have settlement status' do
30
- @response.setlstat.must_equal "Pending"
30
+ @response.setlstat.must_equal 'Pending'
31
31
  end
32
32
  end
33
33
 
34
- describe "#body" do
34
+ describe '#body' do
35
35
  it 'should generate hash with all the right values' do
36
36
  @response.body.must_equal symbolize_keys(valid_capture_response)
37
37
  end
38
38
  end
39
- end
39
+ end
@@ -35,10 +35,8 @@ describe CardConnect::Service::Capture do
35
35
  end
36
36
 
37
37
  it 'uses default merchant ID if merchid is not passed in' do
38
- @service.build_request(@valid_params.reject!{|k,v| k == 'merchid' })
39
-
38
+ @service.build_request(@valid_params.reject! { |k, _| k == 'merchid' })
40
39
  @service.request.must_be_kind_of CardConnect::Service::CaptureRequest
41
-
42
40
  @service.request.merchid.must_equal 'merchant123'
43
41
  end
44
42
  end
@@ -11,11 +11,11 @@ describe CardConnect::Service::DepositRequest do
11
11
 
12
12
  describe 'FIELDS' do
13
13
  it 'should have merchant id' do
14
- @request.merchid.must_equal "000000927996"
14
+ @request.merchid.must_equal '000000927996'
15
15
  end
16
16
 
17
17
  it 'should have date' do
18
- @request.date.must_equal "0110"
18
+ @request.date.must_equal '0110'
19
19
  end
20
20
  end
21
21
 
@@ -38,26 +38,26 @@ describe CardConnect::Service::DepositRequest do
38
38
 
39
39
  describe '#validate_date_format' do
40
40
  it 'should have an error when date is less than 4 characters long' do
41
- request = CardConnect::Service::DepositRequest.new({date: '123'})
41
+ request = CardConnect::Service::DepositRequest.new(date: '123')
42
42
  request.valid?.must_equal false
43
- request.errors.must_include "Date format is invalid. Please use MMDD format"
43
+ request.errors.must_include 'Date format is invalid. Please use MMDD format'
44
44
  end
45
45
 
46
46
  it 'should have an error when date is more than 4 characters long' do
47
- request = CardConnect::Service::DepositRequest.new({date: '12345'})
47
+ request = CardConnect::Service::DepositRequest.new(date: '12345')
48
48
  request.valid?.must_equal false
49
- request.errors.must_include "Date format is invalid. Please use MMDD format"
49
+ request.errors.must_include 'Date format is invalid. Please use MMDD format'
50
50
  end
51
51
 
52
52
  it 'should have an error when date is not parseable in MMDD format' do
53
- request = CardConnect::Service::DepositRequest.new({date: '0000'})
53
+ request = CardConnect::Service::DepositRequest.new(date: '0000')
54
54
  request.valid?.must_equal false
55
- request.errors.must_include "Date format is invalid. Please use MMDD format"
55
+ request.errors.must_include 'Date format is invalid. Please use MMDD format'
56
56
  end
57
57
  end
58
58
  end
59
59
 
60
- describe "#payload" do
60
+ describe '#payload' do
61
61
  it 'should generate the correct path params' do
62
62
  @request.payload.must_equal "?merchid=#{@request.merchid}&date=#{@request.date}&"
63
63
  end
@@ -14,62 +14,64 @@ describe CardConnect::Service::DepositResponse do
14
14
  end
15
15
 
16
16
  it 'should have the merchant id' do
17
- @response.merchid.must_equal "000000927996"
17
+ @response.merchid.must_equal '000000927996'
18
18
  end
19
19
 
20
20
  it 'should have the respproc' do
21
- @response.respproc.must_equal "FNOR"
21
+ @response.respproc.must_equal 'FNOR'
22
22
  end
23
23
 
24
24
  it 'should have the accttype' do
25
- @response.accttype.must_equal "VI"
25
+ @response.accttype.must_equal 'VI'
26
26
  end
27
27
 
28
28
  it 'should have the action' do
29
- @response.action.must_equal "DEB"
29
+ @response.action.must_equal 'DEB'
30
30
  end
31
31
 
32
32
  it 'should have the actdate' do
33
- @response.actdate.must_equal "20121008"
33
+ @response.actdate.must_equal '20121008'
34
34
  end
35
35
 
36
36
  it 'should have the postdate' do
37
- @response.postdate.must_equal "20121009"
37
+ @response.postdate.must_equal '20121009'
38
38
  end
39
39
 
40
40
  it 'should have the currency' do
41
- @response.currency.must_equal "USD"
41
+ @response.currency.must_equal 'USD'
42
42
  end
43
43
 
44
44
  it 'should have the amount' do
45
- @response.amount.must_equal "11.00"
45
+ @response.amount.must_equal '11.00'
46
46
  end
47
47
 
48
48
  it 'should have the feeamnt' do
49
- @response.feeamnt.must_equal "0.55"
49
+ @response.feeamnt.must_equal '0.55'
50
50
  end
51
51
 
52
52
  it 'should have the cbakamnt' do
53
- @response.cbakamnt.must_equal "0.00"
53
+ @response.cbakamnt.must_equal '0.00'
54
54
  end
55
55
 
56
56
  it 'should have the resptext' do
57
- @response.resptext.must_equal "Successful or something"
57
+ @response.resptext.must_equal 'Successful or something'
58
58
  end
59
59
 
60
60
  it 'should have the transactions' do
61
- @response.txns.must_equal [{merchbatch: 92821429, retref: "282005142924", hostbatch: "1429", feeamnt: "0.00", action: "DEB", depamnt: "11.00"}]
61
+ @response.txns.must_equal [{ merchbatch: 92821429, retref: '282005142924', hostbatch: '1429',
62
+ feeamnt: '0.00', action: 'DEB', depamnt: '11.00' }]
62
63
  end
63
64
 
64
65
  describe '#body' do
65
66
  it 'should have all the right fields in the body' do
66
- @response.body.keys.must_equal [:depositid, :merchid, :respproc, :accttype, :action, :actdate, :postdate, :currency, :amount, :feeamnt, :cbakamnt, :resptext, :txns]
67
+ @response.body.keys.must_equal [:depositid, :merchid, :respproc, :accttype, :action, :actdate,
68
+ :postdate, :currency, :amount, :feeamnt, :cbakamnt, :resptext, :txns]
67
69
  end
68
70
 
69
71
  it 'should generate hash with all the right values' do
70
72
  valid_payload = symbolize_keys(valid_deposit_response.first)
71
- valid_payload[:txns] = valid_payload[:txns].map{|txn| symbolize_keys(txn)}
73
+ valid_payload[:txns] = valid_payload[:txns].map { |txn| symbolize_keys(txn) }
72
74
  @response.body.must_equal valid_payload
73
75
  end
74
76
  end
75
- end
77
+ end