tns_payments 0.0.11 → 0.0.12

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.
@@ -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