tns_payments 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,10 +1,6 @@
1
1
  require 'helper'
2
2
 
3
3
  class TNSPayments::ResponseTest < MiniTest::Unit::TestCase
4
- def test_success_when_operating
5
- assert Response.new({:status => 'OPERATING'}.to_json).success?
6
- end
7
-
8
4
  def test_success_when_success
9
5
  assert Response.new({:result => 'SUCCESS'}.to_json).success?
10
6
  end
@@ -4,6 +4,7 @@ class TNSPayments::TransactionTest < MiniTest::Unit::TestCase
4
4
  def test_order_id_is_tns_minimum
5
5
  transaction = MiniTest::Mock.new
6
6
  transaction.expect :order_id, 0
7
+ transaction.expect :methods, []
7
8
 
8
9
  assert_equal 10000000000, Transaction.new(transaction).order_id
9
10
  assert transaction.verify
@@ -12,6 +13,7 @@ class TNSPayments::TransactionTest < MiniTest::Unit::TestCase
12
13
  def test_minimum_order_id_is_injectable
13
14
  mock = MiniTest::Mock.new
14
15
  mock.expect :order_id, 10
16
+ mock.expect :methods, []
15
17
  transaction = Transaction.new mock
16
18
  transaction.minimum_order_id = 0
17
19
 
data/tns_payments.gemspec CHANGED
@@ -15,9 +15,15 @@ Gem::Specification.new do |s|
15
15
  s.test_files = `git ls-files -- test/*`.split("\n")
16
16
  s.require_paths = ["lib"]
17
17
 
18
- s.add_runtime_dependency 'json'
19
- s.add_runtime_dependency 'rest-client'
20
- s.add_development_dependency 'minitest'
21
- s.add_development_dependency 'rake'
22
- s.add_development_dependency 'webmock'
18
+ s.add_runtime_dependency 'json', '1.4.6'
19
+ s.add_runtime_dependency 'rest-client', '1.6.7'
20
+ s.add_runtime_dependency 'mime-types', '~> 1.16'
21
+ s.add_runtime_dependency 'nokogiri', '~> 1.2'
22
+ s.add_runtime_dependency 'activesupport', '2.3.12'
23
+ s.add_development_dependency 'minitest', '2.11.4'
24
+ s.add_development_dependency 'rake', '0.8.7'
25
+ s.add_development_dependency 'webmock', '1.8.7'
26
+ s.add_development_dependency 'addressable', '2.2.8'
27
+ s.add_development_dependency 'vcr', '2.9.3'
28
+ s.add_development_dependency 'dotenv', '<= 1.1'
23
29
  end
metadata CHANGED
@@ -1,103 +1,206 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: tns_payments
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.11
3
+ version: !ruby/object:Gem::Version
4
+ hash: 7
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 12
10
+ version: 0.0.12
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Tim Cooper
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-07-09 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: json
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
17
+
18
+ date: 2016-01-14 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
22
21
  type: :runtime
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - "="
26
+ - !ruby/object:Gem::Version
27
+ hash: 11
28
+ segments:
29
+ - 1
30
+ - 4
31
+ - 6
32
+ version: 1.4.6
33
+ version_requirements: *id001
34
+ name: json
23
35
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
36
+ - !ruby/object:Gem::Dependency
37
+ type: :runtime
38
+ requirement: &id002 !ruby/object:Gem::Requirement
25
39
  none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
40
+ requirements:
41
+ - - "="
42
+ - !ruby/object:Gem::Version
43
+ hash: 1
44
+ segments:
45
+ - 1
46
+ - 6
47
+ - 7
48
+ version: 1.6.7
49
+ version_requirements: *id002
31
50
  name: rest-client
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
51
+ prerelease: false
52
+ - !ruby/object:Gem::Dependency
38
53
  type: :runtime
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ~>
58
+ - !ruby/object:Gem::Version
59
+ hash: 47
60
+ segments:
61
+ - 1
62
+ - 16
63
+ version: "1.16"
64
+ version_requirements: *id003
65
+ name: mime-types
39
66
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
67
+ - !ruby/object:Gem::Dependency
68
+ type: :runtime
69
+ requirement: &id004 !ruby/object:Gem::Requirement
41
70
  none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: minitest
48
- requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ~>
73
+ - !ruby/object:Gem::Version
74
+ hash: 11
75
+ segments:
76
+ - 1
77
+ - 2
78
+ version: "1.2"
79
+ version_requirements: *id004
80
+ name: nokogiri
81
+ prerelease: false
82
+ - !ruby/object:Gem::Dependency
83
+ type: :runtime
84
+ requirement: &id005 !ruby/object:Gem::Requirement
49
85
  none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
86
+ requirements:
87
+ - - "="
88
+ - !ruby/object:Gem::Version
89
+ hash: 27
90
+ segments:
91
+ - 2
92
+ - 3
93
+ - 12
94
+ version: 2.3.12
95
+ version_requirements: *id005
96
+ name: activesupport
97
+ prerelease: false
98
+ - !ruby/object:Gem::Dependency
54
99
  type: :development
100
+ requirement: &id006 !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - "="
104
+ - !ruby/object:Gem::Version
105
+ hash: 43
106
+ segments:
107
+ - 2
108
+ - 11
109
+ - 4
110
+ version: 2.11.4
111
+ version_requirements: *id006
112
+ name: minitest
55
113
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
114
+ - !ruby/object:Gem::Dependency
115
+ type: :development
116
+ requirement: &id007 !ruby/object:Gem::Requirement
57
117
  none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
118
+ requirements:
119
+ - - "="
120
+ - !ruby/object:Gem::Version
121
+ hash: 49
122
+ segments:
123
+ - 0
124
+ - 8
125
+ - 7
126
+ version: 0.8.7
127
+ version_requirements: *id007
63
128
  name: rake
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- type: :development
71
129
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
130
+ - !ruby/object:Gem::Dependency
131
+ type: :development
132
+ requirement: &id008 !ruby/object:Gem::Requirement
73
133
  none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
134
+ requirements:
135
+ - - "="
136
+ - !ruby/object:Gem::Version
137
+ hash: 57
138
+ segments:
139
+ - 1
140
+ - 8
141
+ - 7
142
+ version: 1.8.7
143
+ version_requirements: *id008
79
144
  name: webmock
80
- requirement: !ruby/object:Gem::Requirement
145
+ prerelease: false
146
+ - !ruby/object:Gem::Dependency
147
+ type: :development
148
+ requirement: &id009 !ruby/object:Gem::Requirement
81
149
  none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
150
+ requirements:
151
+ - - "="
152
+ - !ruby/object:Gem::Version
153
+ hash: 23
154
+ segments:
155
+ - 2
156
+ - 2
157
+ - 8
158
+ version: 2.2.8
159
+ version_requirements: *id009
160
+ name: addressable
161
+ prerelease: false
162
+ - !ruby/object:Gem::Dependency
86
163
  type: :development
164
+ requirement: &id010 !ruby/object:Gem::Requirement
165
+ none: false
166
+ requirements:
167
+ - - "="
168
+ - !ruby/object:Gem::Version
169
+ hash: 45
170
+ segments:
171
+ - 2
172
+ - 9
173
+ - 3
174
+ version: 2.9.3
175
+ version_requirements: *id010
176
+ name: vcr
87
177
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
178
+ - !ruby/object:Gem::Dependency
179
+ type: :development
180
+ requirement: &id011 !ruby/object:Gem::Requirement
89
181
  none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
182
+ requirements:
183
+ - - <=
184
+ - !ruby/object:Gem::Version
185
+ hash: 13
186
+ segments:
187
+ - 1
188
+ - 1
189
+ version: "1.1"
190
+ version_requirements: *id011
191
+ name: dotenv
192
+ prerelease: false
94
193
  description: Integration with TNS Payments Gateway
95
- email:
194
+ email:
96
195
  - coop@latrobest.com
97
196
  executables: []
197
+
98
198
  extensions: []
199
+
99
200
  extra_rdoc_files: []
100
- files:
201
+
202
+ files:
203
+ - .env.example
101
204
  - .gitignore
102
205
  - CHANGELOG.md
103
206
  - Gemfile
@@ -107,47 +210,73 @@ files:
107
210
  - lib/tns_payments/error_response.rb
108
211
  - lib/tns_payments/request.rb
109
212
  - lib/tns_payments/response.rb
213
+ - lib/tns_payments/test_support/card_session.rb
110
214
  - lib/tns_payments/transaction.rb
111
215
  - lib/tns_payments/version.rb
216
+ - test/cassettes/test_amex_successful_purchase.yml
217
+ - test/cassettes/test_available.yml
218
+ - test/cassettes/test_card_enrolled_for_3ds.yml
219
+ - test/cassettes/test_card_not_enrolled_for_3ds.yml
220
+ - test/cassettes/test_deleting_tokenised_card.yml
221
+ - test/cassettes/test_mastercard_successful_purchase.yml
222
+ - test/cassettes/test_refund_successful_purchase.yml
223
+ - test/cassettes/test_tokenise_creditcard_from_session_for_later_purchase.yml
224
+ - test/cassettes/test_unsuccessful_purchase.yml
225
+ - test/cassettes/test_unsupported_3ds_gateway.yml
226
+ - test/cassettes/test_visa_successful_purchase.yml
112
227
  - test/helper.rb
113
- - test/unit/conntection_test.rb
228
+ - test/integration/operations_test.rb
114
229
  - test/unit/error_response_test.rb
115
230
  - test/unit/response_test.rb
116
231
  - test/unit/transaction_test.rb
117
232
  - tns_payments.gemspec
118
- homepage: ''
233
+ homepage: ""
119
234
  licenses: []
235
+
120
236
  post_install_message:
121
237
  rdoc_options: []
122
- require_paths:
238
+
239
+ require_paths:
123
240
  - lib
124
- required_ruby_version: !ruby/object:Gem::Requirement
241
+ required_ruby_version: !ruby/object:Gem::Requirement
125
242
  none: false
126
- requirements:
127
- - - ! '>='
128
- - !ruby/object:Gem::Version
129
- version: '0'
130
- segments:
243
+ requirements:
244
+ - - ">="
245
+ - !ruby/object:Gem::Version
246
+ hash: 3
247
+ segments:
131
248
  - 0
132
- hash: -3106667139403621501
133
- required_rubygems_version: !ruby/object:Gem::Requirement
249
+ version: "0"
250
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
251
  none: false
135
- requirements:
136
- - - ! '>='
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- segments:
252
+ requirements:
253
+ - - ">="
254
+ - !ruby/object:Gem::Version
255
+ hash: 3
256
+ segments:
140
257
  - 0
141
- hash: -3106667139403621501
258
+ version: "0"
142
259
  requirements: []
260
+
143
261
  rubyforge_project:
144
- rubygems_version: 1.8.23
262
+ rubygems_version: 1.8.15
145
263
  signing_key:
146
264
  specification_version: 3
147
265
  summary: Integration with TNS Payments Gateway
148
- test_files:
266
+ test_files:
267
+ - test/cassettes/test_amex_successful_purchase.yml
268
+ - test/cassettes/test_available.yml
269
+ - test/cassettes/test_card_enrolled_for_3ds.yml
270
+ - test/cassettes/test_card_not_enrolled_for_3ds.yml
271
+ - test/cassettes/test_deleting_tokenised_card.yml
272
+ - test/cassettes/test_mastercard_successful_purchase.yml
273
+ - test/cassettes/test_refund_successful_purchase.yml
274
+ - test/cassettes/test_tokenise_creditcard_from_session_for_later_purchase.yml
275
+ - test/cassettes/test_unsuccessful_purchase.yml
276
+ - test/cassettes/test_unsupported_3ds_gateway.yml
277
+ - test/cassettes/test_visa_successful_purchase.yml
149
278
  - test/helper.rb
150
- - test/unit/conntection_test.rb
279
+ - test/integration/operations_test.rb
151
280
  - test/unit/error_response_test.rb
152
281
  - test/unit/response_test.rb
153
282
  - test/unit/transaction_test.rb
@@ -1,311 +0,0 @@
1
- require 'helper'
2
- require 'webmock/minitest'
3
-
4
- class TNSPayments::ConnectionTest < MiniTest::Unit::TestCase
5
- def setup
6
- @gateway = Connection.new :api_key => '123api456', :merchant_id => 'MERCHANT'
7
- end
8
-
9
- def test_available_is_true_when_tns_gateway_is_operating
10
- stub_availability_request.to_return(:status => 200, :body => '{"status":"OPERATING"}', :headers => {})
11
- assert @gateway.available?
12
- end
13
-
14
- def test_available_is_false_when_tns_gateway_is_not_operating
15
- stub_availability_request.to_return(:status => 200, :body => '{"status":"EPIC_FAIL"}', :headers => {})
16
- refute @gateway.available?
17
- end
18
-
19
- def test_purchase_with_session_token_makes_a_successful_purchase
20
- stub_successful_session_token_purchase_request mock_transaction, 'SESSIONTOKEN'
21
- assert @gateway.purchase(mock_transaction, 'SESSIONTOKEN').success?
22
- end
23
-
24
- def test_purchase_with_session_token_makes_an_unsuccessful_purchase
25
- stub_unsuccessful_session_token_purchase_request mock_transaction, 'SESSIONTOKEN'
26
- refute @gateway.purchase(mock_transaction, 'SESSIONTOKEN').success?
27
- end
28
-
29
- def test_purchase_with_session_token_can_deal_with_timeout_errors
30
- stub_session_token_purchase_request(mock_transaction, 'SESSIONTOKEN').to_timeout
31
- refute @gateway.purchase(mock_transaction, 'SESSIONTOKEN').success?
32
- end
33
-
34
- def test_purchase_with_credit_card_token_makes_a_successful_purchase
35
- stub_successful_credit_card_token_purchase_request(mock_transaction, '9111111111111111')
36
- assert @gateway.purchase(mock_transaction, '9111111111111111').success?
37
- end
38
-
39
- def test_purchase_with_credit_card_token_makes_an_unsuccessful_purchase
40
- stub_unsuccessful_credit_card_token_purchase_request mock_transaction, '9111111111111111'
41
- refute @gateway.purchase(mock_transaction, '9111111111111111').success?
42
- end
43
-
44
- def test_purchase_with_credit_card_token_can_deal_with_timeout_errors
45
- stub_credit_card_token_purchase_request(mock_transaction, '9111111111111111').to_timeout
46
- refute @gateway.purchase(mock_transaction, '9111111111111111').success?
47
- end
48
-
49
- def test_refund_makes_successful_refund
50
- stub_successful_refund_request mock_transaction
51
- assert @gateway.refund(mock_transaction).success?
52
- end
53
-
54
- def test_refund_makes_unsuccessful_refund
55
- stub_unsuccessful_refund_request mock_transaction
56
- refute @gateway.refund(mock_transaction).success?
57
- end
58
-
59
- def test_refund_can_deal_with_timeout_errors
60
- stub_refund_request(mock_transaction).to_timeout
61
- refute @gateway.refund(mock_transaction).success?
62
- end
63
-
64
- def test_create_credit_card_token_successfully_stores_creditcard
65
- stub_successful_create_credit_card_token_request 'SESSIONTOKEN'
66
- assert @gateway.create_credit_card_token('SESSIONTOKEN').success?
67
- end
68
-
69
- def test_create_credit_card_token_returns_valid_card_token_when_successful
70
- stub_successful_create_credit_card_token_request 'SESSIONTOKEN'
71
- token = @gateway.create_credit_card_token('SESSIONTOKEN').response['cardToken']
72
- assert_equal 16, token.size
73
- assert_match Connection::CREDIT_CARD_TOKEN_FORMAT, token
74
- end
75
-
76
- def test_create_credit_card_token_unsuccessfully_attempts_to_store_credit_card
77
- stub_unsuccessful_create_credit_card_token_request 'SESSIONTOKEN'
78
- refute @gateway.create_credit_card_token('SESSIONTOKEN').success?
79
- end
80
-
81
- def test_delete_credit_card_token_successfully_deletes_a_stored_credit_card_token
82
- stub_successful_delete_credit_card_token_request '9123456781234567'
83
- assert @gateway.delete_credit_card_token('9123456781234567').success?
84
- end
85
-
86
- def test_delete_credit_card_token_unsuccessfully_attempts_to_delete_a_stored_credit_card
87
- stub_unsuccessful_delete_credit_card_token_request '9123456781234567'
88
- refute @gateway.delete_credit_card_token('9123456781234567').success?
89
- end
90
-
91
- def test_session_token_returns_token
92
- stub_successful_session_token_request
93
- assert_equal 'SESSIONTOKEN', @gateway.session_token
94
- end
95
-
96
- def test_unsuccessful_session_token_request_raises_an_exception
97
- stub_session_token_request.to_return(:status => 400, :body => '{"error":{"cause":"Invalid merchant_id"}}')
98
- assert_raises SessionTokenException do
99
- @gateway.session_token
100
- end
101
- end
102
-
103
- def test_successful_check_enrollment_request_returns_card_enrolled
104
- transaction = mock_transaction
105
- transaction.expect :three_domain_id, 'randomstring'
106
- stub_successful_session_token_request
107
- token = @gateway.session_token
108
- stub_successful_check_enrollment_request transaction, token, 'http://google.com/'
109
- response = @gateway.check_enrollment transaction, token, 'http://google.com/'
110
- assert_equal 'CARD_ENROLLED', response.response['response']['3DSecure']['gatewayCode']
111
- end
112
-
113
- def test_successful_process_acs_result_request_returns_authorized
114
- # transaction = mock_transaction
115
- # transaction.expect :three_domain_id, 'randomstring'
116
- # stub_successful_session_token_request
117
- # token = @gateway.session_token
118
-
119
- stub_successful_process_acs_result_request 'three_domain_id', 'pa_res'
120
- response = @gateway.process_acs_result 'three_domain_id', 'pa_res'
121
- assert_equal 'AUTHENTICATION_SUCCESSFUL', response.response['response']['3DSecure']['gatewayCode']
122
- end
123
-
124
- private
125
-
126
- def stub_availability_request
127
- stub_request(:get, "https://secure.ap.tnspayments.com/api/rest/version/4/information").
128
- with(:headers => {'Accept'=>'*/*', 'Content-Type'=>'Application/json;charset=UTF-8'})
129
- end
130
-
131
- def stub_successful_refund_request transaction
132
- stub_refund_request(transaction).
133
- to_return :status => 200, :headers => {}, :body => <<-EOS
134
- {"merchant":"#{@gateway.merchant_id}","order":{"id":#{transaction.order_id},"totalAuthorizedAmount":0.00,"totalCapturedAmount":0.00,"totalRefundedAmount":0.00},
135
- "response":{"acquirerCode":"00","gatewayCode":"APPROVED"},"result":"SUCCESS","transaction":{"acquirer":{"id":"STGEORGE"},
136
- "amount":#{transaction.amount},"authorizationCode":"000582","batch":20110707,"currency":"AUD","id":"#{transaction.transaction_id}",
137
- "receipt":"110707000582","source":"INTERNET","terminal":"08845778","type":"REFUND"}}
138
- EOS
139
- end
140
-
141
- def stub_unsuccessful_refund_request transaction
142
- stub_refund_request(transaction).
143
- to_return(:status => 200, :body => '{"result":"FAILURE"}', :headers => {})
144
- end
145
-
146
- def stub_successful_credit_card_token_purchase_request transaction, token
147
- stub_credit_card_token_purchase_request(transaction, token).
148
- to_return(:status => 200, :body => %[{"card":{"expiry":{"month":"5","year":"13"},"number":"xxxxxxxxxxxxxxxx","scheme":"MASTERCARD"},"merchant":"","order":{"id":"#{transaction.order_id}","totalAuthorizedAmount":0.00,"totalCapturedAmount":0.00,"totalRefundedAmount":0.00},"response":{"acquirerCode":"00","gatewayCode":"APPROVED"},"result":"SUCCESS","transaction":{"acquirer":{"id":"STGEORGE"},"amount":"#{transaction.amount}","authorizationCode":"000576","batch":20110707,"currency":"AUD","frequency":"SINGLE","id":"72637779534c67696c54b26f220dc4d3","receipt":"110707000576","source":"INTERNET","terminal":"08845778","type":"PAYMENT"}}], :headers => {})
149
- end
150
-
151
- def stub_unsuccessful_credit_card_token_purchase_request transaction, token
152
- stub_credit_card_token_purchase_request(transaction, token).
153
- to_return(:status => 200, :body => '{"result":"FAILURE"}', :headers => {})
154
- end
155
-
156
- def stub_successful_session_token_purchase_request transaction, token
157
- stub_session_token_purchase_request(transaction, token).
158
- to_return(:status => 200, :body => %[{"card":{"expiry":{"month":"5","year":"13"},"number":"xxxxxxxxxxxxxxxx","scheme":"MASTERCARD"},"merchant":"","order":{"id":"#{transaction.order_id}","totalAuthorizedAmount":0.00,"totalCapturedAmount":0.00,"totalRefundedAmount":0.00},"response":{"acquirerCode":"00","gatewayCode":"APPROVED"},"result":"SUCCESS","transaction":{"acquirer":{"id":"STGEORGE"},"amount":"#{transaction.amount}","authorizationCode":"000576","batch":20110707,"currency":"AUD","frequency":"SINGLE","id":"72637779534c67696c54b26f220dc4d3","receipt":"110707000576","source":"INTERNET","terminal":"08845778","type":"PAYMENT"}}], :headers => {})
159
- end
160
-
161
- def stub_unsuccessful_session_token_purchase_request transaction, token
162
- stub_session_token_purchase_request(transaction, token).
163
- to_return(:status => 200, :body => '{"result":"FAILURE"}', :headers => {})
164
- end
165
-
166
- def stub_successful_create_credit_card_token_request token
167
- stub_create_credit_card_token_request(token).
168
- to_return(:status => 200, :body => %{{"result":"SUCCESS", "response":{"gatewayCode":"BASIC_VERIFICATION_SUCCESSFUL"}, "card":{"number":"xxxxxxxxxxxxxxxx", "scheme":"MASTERCARD", "expiry":{"month":"5", "year":"13"}}, "cardToken":"9102370788509763"}}, :headers => {})
169
- end
170
-
171
- def stub_unsuccessful_create_credit_card_token_request token
172
- stub_create_credit_card_token_request(token).
173
- to_return(:status => 200, :body => '{"result":"FAILURE"}', :headers => {})
174
- end
175
-
176
- def stub_successful_delete_credit_card_token_request token
177
- stub_delete_credit_card_token_request(token).
178
- to_return(:status => 200, :body => '{"result":"SUCCESS"}', :headers => {})
179
- end
180
-
181
- def stub_unsuccessful_delete_credit_card_token_request token
182
- stub_delete_credit_card_token_request(token).
183
- to_return(:status => 200, :body => '{"result":"FAILURE"}', :headers => {})
184
- end
185
-
186
- def stub_successful_session_token_request
187
- stub_session_token_request.
188
- to_return(:status => 200, :body => '{"result":"SUCCESS","session":"SESSIONTOKEN"}', :headers => {})
189
- end
190
-
191
- def stub_session_token_request
192
- stub_request(:post, /https:\/\/:#{@gateway.api_key}@secure\.ap\.tnspayments\.com\/api\/rest\/version\/4\/merchant\/#{@gateway.merchant_id}\/session/).
193
- with :headers => {
194
- 'Accept' => '*/*',
195
- 'Accept-Encoding' => 'gzip, deflate',
196
- 'Content-Length' => '2',
197
- 'Content-Type' => 'Application/json;charset=UTF-8'
198
- }
199
- end
200
-
201
- def stub_session_token_purchase_request transaction, token
202
- transaction = Transaction.new transaction
203
- stub_request(:put, /https:\/\/:#{@gateway.api_key}@secure\.ap\.tnspayments\.com\/api\/rest\/version\/4\/merchant\/#{@gateway.merchant_id}\/order\/#{transaction.order_id}\/transaction\/#{transaction.transaction_id}/).
204
- with :body => JSON.generate({
205
- 'apiOperation' => 'PAY',
206
- 'order' => {'reference' => transaction.reference.to_s},
207
- 'cardDetails' => {'session' => token.to_s},
208
- 'transaction' => {'amount' => transaction.amount.to_s, 'currency' => transaction.currency, 'reference' => transaction.transaction_id.to_s}
209
- }),
210
- :headers => {
211
- 'Accept' => '*/*',
212
- 'Accept-Encoding' => 'gzip, deflate',
213
- 'Content-Length' => '158',
214
- 'Content-Type' => 'Application/json;charset=UTF-8'
215
- }
216
- end
217
-
218
- def stub_credit_card_token_purchase_request transaction, token
219
- transaction = Transaction.new transaction
220
- stub_request(:put, /https:\/\/:#{@gateway.api_key}@secure\.ap\.tnspayments\.com\/api\/rest\/version\/4\/merchant\/#{@gateway.merchant_id}\/order\/#{transaction.order_id}\/transaction\/#{transaction.transaction_id}/).
221
- with :body => JSON.generate({
222
- 'apiOperation' => 'PAY',
223
- 'order' => {'reference' => transaction.reference.to_s},
224
- 'cardDetails' => {'cardToken' => token.to_s},
225
- 'transaction' => {'amount' => transaction.amount.to_s, 'currency' => transaction.currency, 'reference' => transaction.transaction_id.to_s}
226
- }),
227
- :headers => {
228
- 'Accept' => '*/*',
229
- 'Accept-Encoding' => 'gzip, deflate',
230
- 'Content-Length' => '164',
231
- 'Content-Type' => 'Application/json;charset=UTF-8'
232
- }
233
- end
234
-
235
- def stub_refund_request transaction
236
- transaction = Transaction.new transaction
237
- stub_request(:put, /https:\/\/:#{@gateway.api_key}@secure\.ap\.tnspayments\.com\/api\/rest\/version\/4\/merchant\/#{@gateway.merchant_id}\/order\/#{transaction.order_id}\/transaction\/#{transaction.transaction_id}/).
238
- with :body => JSON.generate({
239
- 'apiOperation' => 'REFUND',
240
- 'transaction' => {'amount' => transaction.amount.to_s, 'currency' => transaction.currency, 'reference' => transaction.transaction_id.to_s}
241
- }),
242
- :headers => {
243
- 'Accept' => '*/*',
244
- 'Accept-Encoding' => 'gzip, deflate',
245
- 'Content-Length' => '89',
246
- 'Content-Type' => 'Application/json;charset=UTF-8'
247
- }
248
- end
249
-
250
- def stub_create_credit_card_token_request token
251
- stub_request(:post, /https:\/\/:#{@gateway.api_key}@secure\.ap\.tnspayments\.com\/api\/rest\/version\/4\/merchant\/#{@gateway.merchant_id}\/token/).
252
- with :body => JSON.generate({
253
- 'cardDetails' => {'session' => token}
254
- }),
255
- :headers => {
256
- 'Accept' => '*/*',
257
- 'Content-Type' => 'Application/json;charset=UTF-8'
258
- }
259
- end
260
-
261
- def stub_delete_credit_card_token_request token
262
- stub_request(:delete, /https:\/\/:#{@gateway.api_key}@secure\.ap\.tnspayments\.com\/api\/rest\/version\/4\/merchant\/#{@gateway.merchant_id}\/token\/#{token}/).
263
- with :body => {},
264
- :headers => {
265
- 'Accept' => '*/*',
266
- 'Content-Type' => 'Application/json;charset=UTF-8'
267
- }
268
- end
269
-
270
- def stub_successful_check_enrollment_request transaction, token, postback_url
271
- stub_request(:put, /https:\/\/:#{@gateway.api_key}@secure\.ap\.tnspayments\.com\/api\/rest\/version\/4\/merchant\/#{@gateway.merchant_id}\/3DSecureId\/#{transaction.three_domain_id}/).
272
- with(:body => JSON.generate({
273
- '3DSecure' => {'authenticationRedirect' => {'pageGenerationMode' => 'CUSTOMIZED', 'responseUrl' => postback_url}},
274
- 'apiOperation' => 'CHECK_3DS_ENROLLMENT',
275
- 'cardDetails' => {'session' => token},
276
- 'transaction' => {'amount' => transaction.amount.to_s, 'currency' => transaction.currency}
277
- }),
278
- :headers => {
279
- 'Accept' => '*/*',
280
- 'Accept-Encoding' => 'gzip, deflate',
281
- 'Content-Length' => '237',
282
- 'Content-Type' => 'Application/json;charset=UTF-8'
283
- }).
284
- to_return :status => 200, :headers => {}, :body => "{\"3DSecure\":{\"authenticationRedirect\":{\"customized\":{\"acsUrl\":\"https://secure.ap.tnspayments.com:443/acs/MastercardACS/4272b87b-2cc0-4232-a96e-e678ecbe7455\",\"paReq\":\"eAFVkd1ugkAQhe9NfAfCfV1ghVIzrNFq1aY/pNqY9I7AKCQCukILfZ2+SZ+sswq1vePMcGbPfAPDKt1p7yiPSZ55utkzdA2zMI+SbOvpr6u7K1cfim4HVrFEnCwxLCUKeMTjMdiilkSezrlpmJbh6gL80QseBDTjBE3rWcBaSS4ZxkFWCAjCw3jxJGyLG44NrJGQolxMhGnxvu1cu8DOGrIgRTGlMXUU1NocZa49FBGwUx3CvMwKWQvXcoC1Akq5E3FR7AeMITnJGJOvF+YpMNUDdknjlyrXkfaqkkg8R9HmrZotNx8pn8b17HNdGfexX64nfQ+Y+gOioEBhqa25aWsWH3BnYFPeUx2CVCUSs7GvfX8RA4MWPJdgr14anYWpGn8LQGwlwW9XaRVgtc8zpJEE8/cb2CX27VwhDQuCZ7f0bige7xOSpqGmJITJ5AYRbwQwZWXN3QjJ6axU+XfubucHAPGz0w==\"}},\"summaryStatus\":\"CARD_ENROLLED\",\"xid\":\"OddfZxGSfwm3EhyGzWx0JhPuWD4=\"},\"3DSecureId\":\"#{transaction.three_domain_id}\",\"merchant\":\"#{@gateway.merchant_id}\",\"response\":{\"3DSecure\":{\"gatewayCode\":\"CARD_ENROLLED\"}}}"
285
- end
286
-
287
- def stub_successful_process_acs_result_request three_domain_id, pa_res
288
- stub_request(:post, /https:\/\/:#{@gateway.api_key}@secure\.ap\.tnspayments\.com\/api\/rest\/version\/4\/merchant\/#{@gateway.merchant_id}\/3DSecureId\/#{three_domain_id}/).
289
- with(:body => JSON.generate({
290
- '3DSecure' => {'paRes' => pa_res},
291
- 'apiOperation' => 'PROCESS_ACS_RESULT'
292
- }),
293
- :headers => {
294
- 'Accept' => '*/*',
295
- 'Accept-Encoding' => 'gzip, deflate',
296
- 'Content-Length' => '67',
297
- 'Content-Type' => 'Application/json;charset=UTF-8'
298
- }).
299
- to_return :status => 200, :headers => {}, :body => "{\"response\":{\"3DSecure\":{\"gatewayCode\":\"AUTHENTICATION_SUCCESSFUL\"}}}"
300
- end
301
-
302
- def mock_transaction
303
- mock = MiniTest::Mock.new
304
- mock.expect :amount, 100
305
- mock.expect :currency, 'AUD'
306
- mock.expect :order_id, 10000000001
307
- mock.expect :transaction_id, 1
308
- mock.expect :reference, 'AUD123'
309
- mock
310
- end
311
- end