hps 1.0.2 → 2.1.2

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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -8
  3. data/LICENSE.txt +32 -32
  4. data/PRIVACY.txt +65 -65
  5. data/README.md +214 -41
  6. data/Rakefile +15 -15
  7. data/hps.gemspec +28 -26
  8. data/lib/hps.rb +48 -45
  9. data/lib/hps/configuration.rb +16 -16
  10. data/lib/hps/entities/hps_account_verify.rb +8 -8
  11. data/lib/hps/entities/hps_address.rb +6 -6
  12. data/lib/hps/entities/hps_authorization.rb +12 -12
  13. data/lib/hps/entities/hps_batch.rb +6 -6
  14. data/lib/hps/entities/hps_cardholder.rb +6 -10
  15. data/lib/hps/entities/hps_charge.rb +8 -8
  16. data/lib/hps/entities/hps_charge_exceptions.rb +6 -6
  17. data/lib/hps/entities/hps_credit_card.rb +34 -33
  18. data/lib/hps/entities/hps_direct_market_data.rb +5 -0
  19. data/lib/hps/entities/hps_encryption_data.rb +6 -0
  20. data/lib/hps/entities/hps_refund.rb +8 -8
  21. data/lib/hps/entities/hps_report_transaction_details.rb +10 -10
  22. data/lib/hps/entities/hps_report_transaction_summary.rb +6 -6
  23. data/lib/hps/entities/hps_reversal.rb +10 -10
  24. data/lib/hps/entities/hps_token_data.rb +10 -10
  25. data/lib/hps/entities/hps_track_data.rb +5 -0
  26. data/lib/hps/entities/hps_transaction.rb +161 -161
  27. data/lib/hps/entities/hps_transaction_details.rb +6 -6
  28. data/lib/hps/entities/hps_transaction_header.rb +8 -8
  29. data/lib/hps/entities/hps_transaction_type.rb +16 -16
  30. data/lib/hps/entities/hps_void.rb +8 -8
  31. data/lib/hps/infrastructure/api_connection_exception.rb +11 -11
  32. data/lib/hps/infrastructure/authentication_exception.rb +11 -11
  33. data/lib/hps/infrastructure/card_exception.rb +15 -15
  34. data/lib/hps/infrastructure/exceptions.json +468 -468
  35. data/lib/hps/infrastructure/hps_exception.rb +25 -25
  36. data/lib/hps/infrastructure/hps_exception_mapper.rb +134 -134
  37. data/lib/hps/infrastructure/hps_sdk_codes.rb +48 -48
  38. data/lib/hps/infrastructure/hps_track_data_method.rb +6 -0
  39. data/lib/hps/infrastructure/invalid_request_exception.rb +15 -15
  40. data/lib/hps/services/hps_batch_service.rb +29 -29
  41. data/lib/hps/services/hps_charge_service.rb +735 -635
  42. data/lib/hps/services/hps_service.rb +127 -128
  43. data/lib/hps/version.rb +3 -3
  44. data/tests/amex_tests.rb +292 -231
  45. data/tests/cert_tests.rb +80 -80
  46. data/tests/certification/card_present_spec.rb +320 -0
  47. data/tests/discover_tests.rb +386 -325
  48. data/tests/exception_mapper_tests.rb +244 -244
  49. data/tests/general_tests.rb +65 -57
  50. data/tests/hps_token_service.rb +56 -56
  51. data/tests/mastercard_tests.rb +387 -326
  52. data/tests/secret_key.rb +11 -11
  53. data/tests/test_data.rb +128 -128
  54. data/tests/test_helper.rb +115 -108
  55. data/tests/token_tests.rb +512 -512
  56. data/tests/visa_tests.rb +445 -378
  57. metadata +36 -3
@@ -1,128 +1,127 @@
1
- require 'active_support/core_ext/hash/conversions'
2
-
3
- module Hps
4
- class HpsService
5
-
6
- attr_accessor :exception_mapper
7
-
8
- attr_accessor *Configuration::VALID_CONFIG_KEYS
9
-
10
- def initialize(options={})
11
-
12
- merged_options = Hps.options.merge(options)
13
-
14
- Configuration::VALID_CONFIG_KEYS.each do |key|
15
- send("#{key}=", merged_options[key])
16
- end
17
-
18
- @exception_mapper = Hps::ExceptionMapper.new
19
- end
20
-
21
- #protected
22
-
23
- def doTransaction(transaction)
24
-
25
- if configuration_invalid
26
- raise @exception_mapper.map_sdk_exception(SdkCodes.invalid_transaction_id)
27
- end
28
-
29
- xml = Builder::XmlMarkup.new
30
- xml.instruct!(:xml, :encoding => "UTF-8")
31
- xml.SOAP :Envelope, {
32
- 'xmlns:SOAP' => 'http://schemas.xmlsoap.org/soap/envelope/',
33
- 'xmlns:hps' => 'http://Hps.Exchange.PosGateway' } do
34
- xml.SOAP :Body do
35
- xml.hps :PosRequest do
36
- xml.hps 'Ver1.0'.to_sym do
37
- xml.hps :Header do
38
- if self.secret_api_key
39
- self.service_uri = gateway_url_for_key self.secret_api_key
40
- xml.hps :SecretAPIKey, self.secret_api_key
41
- else
42
- xml.hps :UserName, self.user_name
43
- xml.hps :Password, self.password
44
- xml.hps :DeviceId, self.device_id
45
- xml.hps :LicenseId, self.license_id
46
- xml.hps :SiteId, self.site_id
47
- end
48
- xml.hps :DeveloperID, self.developer_id if self.developer_id
49
- xml.hps :VersionNbr, self.version_number if self.version_number
50
- xml.hps :SiteTrace, self.site_trace if self.site_trace
51
- end
52
-
53
- xml << transaction
54
-
55
- end
56
- end
57
- end
58
- end
59
-
60
- begin
61
-
62
- uri = URI.parse(self.service_uri)
63
- http = Net::HTTP.new uri.host, uri.port
64
- http.use_ssl = true
65
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
66
- data = xml.target!
67
-
68
- response = http.post(uri.path, data, 'Content-type' => 'text/xml')
69
-
70
- # NOTE: If the HTTP request was successful
71
- if response.is_a? Net::HTTPOK
72
-
73
- # NOTE: Convert XML to a Hash
74
- soap_hash = Hash.from_xml(response.body)
75
- # NOTE: Peel away the layers and return only the PosRespose
76
- soap_hash["Envelope"]["Body"]["PosResponse"]["Ver1.0"]
77
-
78
- else
79
- raise @exception_mapper.map_sdk_exception(SdkCodes.unable_to_process_transaction)
80
- end
81
-
82
- rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError,
83
- Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
84
- raise @exception_mapper.map_sdk_exception(SdkCodes.unable_to_process_transaction, e)
85
- end
86
-
87
- end
88
-
89
- def gateway_url_for_key(api_key)
90
-
91
- gateway_url = "https://posgateway.secureexchange.net/Hps.Exchange.PosGateway/PosGatewayService.asmx?wsdl"
92
-
93
- if api_key.include? "_uat_"
94
-
95
- gateway_url = "https://posgateway.uat.secureexchange.net/Hps.Exchange.PosGateway/PosGatewayService.asmx?wsdl"
96
-
97
- elsif api_key.include? "_cert_"
98
-
99
- gateway_url = "https://posgateway.cert.secureexchange.net/Hps.Exchange.PosGateway/PosGatewayService.asmx?wsdl"
100
- end
101
-
102
- gateway_url
103
- end
104
-
105
- def hydrate_transaction_header(header)
106
- result = HpsTransactionHeader.new
107
- result.gateway_response_code = header["GatewayRspCode"]
108
- result.gateway_response_message = header["GatewayRspMsg"]
109
- result.response_dt = header["RspDT"]
110
- result.client_txn_id = header["GatewayTxnId"]
111
- result
112
- end
113
-
114
- private
115
-
116
- def configuration_invalid
117
- self.secret_api_key.nil? and (
118
- self.service_uri.nil? or
119
- self.user_name.nil? or
120
- self.password.nil? or
121
- self.license_id.nil? or
122
- self.device_id.nil? or
123
- self.site_id.nil?
124
- )
125
- end
126
-
127
- end
128
- end
1
+ require 'active_support/core_ext/hash/conversions'
2
+
3
+ module Hps
4
+ class HpsService
5
+
6
+ attr_accessor :exception_mapper
7
+
8
+ attr_accessor *Configuration::VALID_CONFIG_KEYS
9
+
10
+ def initialize(options={})
11
+
12
+ merged_options = Hps.options.merge(options)
13
+
14
+ Configuration::VALID_CONFIG_KEYS.each do |key|
15
+ send("#{key}=", merged_options[key])
16
+ end
17
+
18
+ @exception_mapper = Hps::ExceptionMapper.new
19
+ end
20
+
21
+ #protected
22
+
23
+ def doTransaction(transaction)
24
+
25
+ if configuration_invalid
26
+ raise @exception_mapper.map_sdk_exception(SdkCodes.invalid_transaction_id)
27
+ end
28
+
29
+ xml = Builder::XmlMarkup.new
30
+ xml.instruct!(:xml, :encoding => "UTF-8")
31
+ xml.SOAP :Envelope, {
32
+ 'xmlns:SOAP' => 'http://schemas.xmlsoap.org/soap/envelope/',
33
+ 'xmlns:hps' => 'http://Hps.Exchange.PosGateway' } do
34
+ xml.SOAP :Body do
35
+ xml.hps :PosRequest do
36
+ xml.hps 'Ver1.0'.to_sym do
37
+ xml.hps :Header do
38
+ if self.secret_api_key
39
+ self.service_uri = gateway_url_for_key self.secret_api_key
40
+ xml.hps :SecretAPIKey, self.secret_api_key.strip
41
+ else
42
+ xml.hps :UserName, self.user_name
43
+ xml.hps :Password, self.password
44
+ xml.hps :DeviceId, self.device_id
45
+ xml.hps :LicenseId, self.license_id
46
+ xml.hps :SiteId, self.site_id
47
+ end
48
+ xml.hps :DeveloperID, self.developer_id if self.developer_id
49
+ xml.hps :VersionNbr, self.version_number if self.version_number
50
+ xml.hps :SiteTrace, self.site_trace if self.site_trace
51
+ end
52
+
53
+ xml << transaction
54
+
55
+ end
56
+ end
57
+ end
58
+ end
59
+
60
+ begin
61
+
62
+ uri = URI.parse(self.service_uri)
63
+ http = Net::HTTP.new uri.host, uri.port
64
+ http.use_ssl = true
65
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
66
+ data = xml.target!
67
+
68
+ response = http.post(uri.path, data, 'Content-type' => 'text/xml')
69
+ # NOTE: If the HTTP request was successful
70
+ if response.is_a? Net::HTTPOK
71
+
72
+ # NOTE: Convert XML to a Hash
73
+ soap_hash = Hash.from_xml(response.body)
74
+ # NOTE: Peel away the layers and return only the PosRespose
75
+ soap_hash["Envelope"]["Body"]["PosResponse"]["Ver1.0"]
76
+
77
+ else
78
+ raise @exception_mapper.map_sdk_exception(SdkCodes.unable_to_process_transaction)
79
+ end
80
+
81
+ rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError,
82
+ Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
83
+ raise @exception_mapper.map_sdk_exception(SdkCodes.unable_to_process_transaction, e)
84
+ end
85
+
86
+ end
87
+
88
+ def gateway_url_for_key(api_key)
89
+
90
+ gateway_url = "https://api2.heartlandportico.com/Hps.Exchange.PosGateway/PosGatewayService.asmx?wsdl"
91
+
92
+ if api_key.include? "_uat_"
93
+
94
+ gateway_url = "https://posgateway.uat.secureexchange.net/Hps.Exchange.PosGateway/PosGatewayService.asmx?wsdl"
95
+
96
+ elsif api_key.include? "_cert_"
97
+
98
+ gateway_url = "https://cert.api2.heartlandportico.com/Hps.Exchange.PosGateway/PosGatewayService.asmx?wsdl"
99
+ end
100
+
101
+ gateway_url
102
+ end
103
+
104
+ def hydrate_transaction_header(header)
105
+ result = HpsTransactionHeader.new
106
+ result.gateway_response_code = header["GatewayRspCode"]
107
+ result.gateway_response_message = header["GatewayRspMsg"]
108
+ result.response_dt = header["RspDT"]
109
+ result.client_txn_id = header["GatewayTxnId"]
110
+ result
111
+ end
112
+
113
+ private
114
+
115
+ def configuration_invalid
116
+ self.secret_api_key.nil? and (
117
+ self.service_uri.nil? or
118
+ self.user_name.nil? or
119
+ self.password.nil? or
120
+ self.license_id.nil? or
121
+ self.device_id.nil? or
122
+ self.site_id.nil?
123
+ )
124
+ end
125
+
126
+ end
127
+ end
@@ -1,3 +1,3 @@
1
- module Hps
2
- VERSION = "1.0.2"
3
- end
1
+ module Hps
2
+ VERSION = "2.1.2"
3
+ end
@@ -1,231 +1,292 @@
1
- require File.join( File.dirname(__FILE__), "test_helper" )
2
-
3
-
4
- describe "Amex Tests" do
5
-
6
- it "Amex when card is ok, should return valid result" do
7
- charge = Hps::TestHelper.charge_valid_amex(50)
8
- expect(charge.response_code).to eql("00")
9
- end
10
-
11
- # avs tests
12
-
13
- it "Amex avs result code should equal A" do
14
- charge = Hps::TestHelper.charge_valid_amex(90.01)
15
- expect(charge.avs_result_code).to eql("A")
16
- end
17
-
18
- it "Amex avs result code should equal N" do
19
- charge = Hps::TestHelper.charge_valid_amex(90.02)
20
- expect(charge.avs_result_code).to eql("N")
21
- end
22
-
23
- it "Amex avs result code should equal R" do
24
- charge = Hps::TestHelper.charge_valid_amex(90.03)
25
- expect(charge.avs_result_code).to eql("R")
26
- end
27
-
28
- it "Amex avs result code should equal S" do
29
- charge = Hps::TestHelper.charge_valid_amex(90.04)
30
- expect(charge.avs_result_code).to eql("S")
31
- end
32
-
33
- it "Amex avs result code should equal U" do
34
- charge = Hps::TestHelper.charge_valid_amex(90.05)
35
- expect(charge.avs_result_code).to eql("U")
36
- end
37
-
38
- it "Amex avs result code should equal W" do
39
- charge = Hps::TestHelper.charge_valid_amex(90.06)
40
- expect(charge.avs_result_code).to eql("W")
41
- end
42
-
43
- it "Amex avs result code should equal X" do
44
- charge = Hps::TestHelper.charge_valid_amex(90.07)
45
- expect(charge.avs_result_code).to eql("X")
46
- end
47
-
48
- it "Amex avs result code should equal Y" do
49
- charge = Hps::TestHelper.charge_valid_amex(90.08)
50
- expect(charge.avs_result_code).to eql("Y")
51
- end
52
-
53
- it "Amex avs result code should equal Z" do
54
- charge = Hps::TestHelper.charge_valid_amex(90.09)
55
- expect(charge.avs_result_code).to eql("Z")
56
- end
57
-
58
- # cvv tests
59
-
60
- # TODO: Gateway code changed, returning Y
61
- it "Amex cvv result code should equal M" do
62
- charge = Hps::TestHelper.charge_valid_amex(97.01)
63
- #expect(charge.cvv_result_code).to eql("M")
64
- end
65
-
66
- it "Amex cvv result code should equal N" do
67
- charge = Hps::TestHelper.charge_valid_amex(97.02)
68
- expect(charge.cvv_result_code).to eql("N")
69
- end
70
-
71
- it "Amex cvv result code should equal P" do
72
- charge = Hps::TestHelper.charge_valid_amex(97.03)
73
- expect(charge.cvv_result_code).to eql("P")
74
- end
75
-
76
- # amex to visa 2nd
77
- it "Amex response code should indicate denied" do
78
- expect {
79
- Hps::TestHelper.charge_valid_amex(10.08)
80
- }.to raise_error(Hps::CardException) { |error|
81
- expect(error.code).to eql("card_declined")
82
- expect(error.response_code).to eql("51")
83
- expect(error.response_text).to eql("DECLINE")
84
- }
85
- end
86
-
87
- it "Amex response code should card expired" do
88
- expect {
89
- Hps::TestHelper.charge_valid_amex(10.32)
90
- }.to raise_error(Hps::CardException) { |error|
91
- expect(error.code).to eql("expired_card")
92
- expect(error.response_code).to eql("54")
93
- expect(error.response_text).to eql("EXPIRED CARD")
94
- }
95
- end
96
-
97
- it "Amex response code should indicate please call" do
98
- expect {
99
- Hps::TestHelper.charge_valid_amex(10.34)
100
- }.to raise_error(Hps::CardException) { |error|
101
- expect(error.code).to eql("card_declined")
102
- expect(error.response_code).to eql("02")
103
- expect(error.response_text).to eql("CALL")
104
- }
105
- end
106
-
107
- it "Amex response code should indicate invalid merchant" do
108
- expect {
109
- Hps::TestHelper.charge_valid_amex(10.22)
110
- }.to raise_error(Hps::CardException) { |error|
111
- expect(error.code).to eql("card_declined")
112
- expect(error.response_code).to eql("03")
113
- expect(error.response_text).to eql("TERM ID ERROR")
114
- }
115
- end
116
-
117
- it "Amex response code should indicate invalid amount" do
118
- expect {
119
- Hps::TestHelper.charge_valid_amex(10.27)
120
- }.to raise_error(Hps::CardException) { |error|
121
- expect(error.code).to eql("invalid_amount")
122
- expect(error.response_code).to eql("13")
123
- expect(error.response_text).to eql("AMOUNT ERROR")
124
- }
125
- end
126
-
127
- it "Amex response code should indicate no action taken" do
128
- expect {
129
- Hps::TestHelper.charge_valid_amex(10.14)
130
- }.to raise_error(Hps::CardException) { |error|
131
- # TODO: Gateway response changed
132
- # expect(error.code).to eql("processing_error")
133
- # expect(error.response_code).to eql("76")
134
- # expect(error.response_text).to eql("NO ACTION TAKEN")
135
- expect(error.code).to eql("incorrect_number")
136
- expect(error.response_code).to eql("14")
137
- expect(error.response_text).to eql("CARD NO. ERROR")
138
- }
139
- end
140
-
141
- it "Amex response code should indicate invalid cvv2" do
142
- expect {
143
- Hps::TestHelper.charge_valid_amex(10.23)
144
- }.to raise_error(Hps::CardException) { |error|
145
- expect(error.code).to eql("incorrect_cvc")
146
- expect(error.response_code).to eql("N7")
147
- expect(error.response_text).to eql("CVV2 MISMATCH")
148
- }
149
- end
150
-
151
- it "Amex response code should indicate invalid originator" do
152
- expect {
153
- Hps::TestHelper.charge_valid_amex(10.30)
154
- }.to raise_error(Hps::CardException) { |error|
155
- expect(error.code).to eql("processing_error")
156
- expect(error.response_code).to eql("58")
157
- expect(error.response_text).to eql("SERV NOT ALLOWED")
158
- }
159
- end
160
-
161
- it "Amex response code should indicate card declined" do
162
- expect {
163
- Hps::TestHelper.charge_valid_amex(10.25)
164
- }.to raise_error(Hps::CardException) { |error|
165
- expect(error.code).to eql("card_declined")
166
- expect(error.response_code).to eql("05")
167
- expect(error.response_text).to eql("DECLINE")
168
- }
169
- end
170
-
171
- it "Amex response code should indicate account canceled" do
172
- expect {
173
- Hps::TestHelper.charge_valid_amex(10.13)
174
- }.to raise_error(Hps::CardException) { |error|
175
- expect(error.code).to eql("card_declined")
176
- expect(error.response_code).to eql("78")
177
- expect(error.response_text).to eql("NO ACCOUNT")
178
- }
179
- end
180
-
181
- it "Amex response code should indicate merchant close" do
182
- expect {
183
- Hps::TestHelper.charge_valid_amex(10.12)
184
- }.to raise_error(Hps::CardException) { |error|
185
- expect(error.code).to eql("processing_error")
186
- expect(error.response_code).to eql("06")
187
- expect(error.response_text).to eql("ERROR")
188
- }
189
- end
190
-
191
- it "Amex response code should indicate pickup card" do
192
- expect {
193
- Hps::TestHelper.charge_valid_amex(10.04)
194
- }.to raise_error(Hps::CardException) { |error|
195
- expect(error.code).to eql("card_declined")
196
- expect(error.response_code).to eql("44")
197
- expect(error.response_text).to eql("HOLD-CALL")
198
- }
199
- end
200
-
201
- # verify, authorize & capture
202
-
203
- it "Amex verify should return OK" do
204
- service = Hps::HpsChargeService.new()
205
- result = service.verify(Hps::TestData.valid_amex, Hps::TestData.valid_cardholder)
206
- expect(result.response_code).to eql("00")
207
- end
208
-
209
- it "Amex authorize should return OK" do
210
- service = Hps::HpsChargeService.new()
211
- result = service.authorize(50.00, "usd", Hps::TestData.valid_amex, Hps::TestData.valid_cardholder)
212
- expect(result.response_code).to eql("00")
213
- end
214
-
215
- it "Amex authorize and request token should return OK" do
216
- service = Hps::HpsChargeService.new()
217
- result = service.authorize(50.00, "usd", Hps::TestData.valid_amex, Hps::TestData.valid_cardholder, true)
218
- expect(result.token_data.response_code).to eql("0")
219
- expect(result.response_code).to eql("00")
220
- end
221
-
222
- it "Amex authorize and capture should return OK" do
223
- service = Hps::HpsChargeService.new()
224
- result = service.authorize(50.00, "usd", Hps::TestData.valid_amex, Hps::TestData.valid_cardholder)
225
- expect(result.response_code).to eql("00")
226
-
227
- capture_result = service.capture(result.transaction_id)
228
- expect(capture_result.response_code).to eql("00")
229
- end
230
-
231
- end
1
+ require File.join( File.dirname(__FILE__), "test_helper" )
2
+
3
+
4
+ describe "Amex Tests" do
5
+
6
+ it "Amex when card is ok, should return valid result" do
7
+ charge = Hps::TestHelper.charge_valid_amex(50)
8
+ expect(charge.response_code).to eql("00")
9
+ end
10
+
11
+ # avs tests
12
+
13
+ it "Amex avs result code should equal A" do
14
+ charge = Hps::TestHelper.charge_valid_amex(90.01)
15
+ expect(charge.avs_result_code).to eql("A")
16
+ end
17
+
18
+ it "Amex avs result code should equal N" do
19
+ charge = Hps::TestHelper.charge_valid_amex(90.02)
20
+ expect(charge.avs_result_code).to eql("N")
21
+ end
22
+
23
+ it "Amex avs result code should equal R" do
24
+ charge = Hps::TestHelper.charge_valid_amex(90.03)
25
+ expect(charge.avs_result_code).to eql("R")
26
+ end
27
+
28
+ it "Amex avs result code should equal S" do
29
+ charge = Hps::TestHelper.charge_valid_amex(90.04)
30
+ expect(charge.avs_result_code).to eql("S")
31
+ end
32
+
33
+ it "Amex avs result code should equal U" do
34
+ charge = Hps::TestHelper.charge_valid_amex(90.05)
35
+ expect(charge.avs_result_code).to eql("U")
36
+ end
37
+
38
+ it "Amex avs result code should equal W" do
39
+ charge = Hps::TestHelper.charge_valid_amex(90.06)
40
+ expect(charge.avs_result_code).to eql("W")
41
+ end
42
+
43
+ it "Amex avs result code should equal X" do
44
+ charge = Hps::TestHelper.charge_valid_amex(90.07)
45
+ expect(charge.avs_result_code).to eql("X")
46
+ end
47
+
48
+ it "Amex avs result code should equal Y" do
49
+ charge = Hps::TestHelper.charge_valid_amex(90.08)
50
+ expect(charge.avs_result_code).to eql("Y")
51
+ end
52
+
53
+ it "Amex avs result code should equal Z" do
54
+ charge = Hps::TestHelper.charge_valid_amex(90.09)
55
+ expect(charge.avs_result_code).to eql("Z")
56
+ end
57
+
58
+ # cvv tests
59
+
60
+ # TODO: Gateway code changed, returning Y
61
+ it "Amex cvv result code should equal M" do
62
+ charge = Hps::TestHelper.charge_valid_amex(97.01)
63
+ #expect(charge.cvv_result_code).to eql("M")
64
+ end
65
+
66
+ it "Amex cvv result code should equal N" do
67
+ charge = Hps::TestHelper.charge_valid_amex(97.02)
68
+ expect(charge.cvv_result_code).to eql("N")
69
+ end
70
+
71
+ it "Amex cvv result code should equal P" do
72
+ charge = Hps::TestHelper.charge_valid_amex(97.03)
73
+ expect(charge.cvv_result_code).to eql("P")
74
+ end
75
+
76
+ # amex to visa 2nd
77
+ it "Amex response code should indicate denied" do
78
+ expect {
79
+ Hps::TestHelper.charge_valid_amex(10.08)
80
+ }.to raise_error(Hps::CardException) { |error|
81
+ expect(error.code).to eql("card_declined")
82
+ expect(error.response_code).to eql("51")
83
+ expect(error.response_text).to eql("DECLINE")
84
+ }
85
+ end
86
+
87
+ it "Amex response code should card expired" do
88
+ expect {
89
+ Hps::TestHelper.charge_valid_amex(10.32)
90
+ }.to raise_error(Hps::CardException) { |error|
91
+ expect(error.code).to eql("expired_card")
92
+ expect(error.response_code).to eql("54")
93
+ expect(error.response_text).to eql("EXPIRED CARD")
94
+ }
95
+ end
96
+
97
+ it "Amex response code should indicate please call" do
98
+ expect {
99
+ Hps::TestHelper.charge_valid_amex(10.34)
100
+ }.to raise_error(Hps::CardException) { |error|
101
+ expect(error.code).to eql("card_declined")
102
+ expect(error.response_code).to eql("02")
103
+ expect(error.response_text).to eql("CALL")
104
+ }
105
+ end
106
+
107
+ it "Amex response code should indicate invalid merchant" do
108
+ expect {
109
+ Hps::TestHelper.charge_valid_amex(10.22)
110
+ }.to raise_error(Hps::CardException) { |error|
111
+ expect(error.code).to eql("card_declined")
112
+ expect(error.response_code).to eql("03")
113
+ expect(error.response_text).to eql("TERM ID ERROR")
114
+ }
115
+ end
116
+
117
+ it "Amex response code should indicate invalid amount" do
118
+ expect {
119
+ Hps::TestHelper.charge_valid_amex(10.27)
120
+ }.to raise_error(Hps::CardException) { |error|
121
+ expect(error.code).to eql("invalid_amount")
122
+ expect(error.response_code).to eql("13")
123
+ expect(error.response_text).to eql("AMOUNT ERROR")
124
+ }
125
+ end
126
+
127
+ it "Amex response code should indicate no action taken" do
128
+ expect {
129
+ Hps::TestHelper.charge_valid_amex(10.14)
130
+ }.to raise_error(Hps::CardException) { |error|
131
+ # TODO: Gateway response changed
132
+ # expect(error.code).to eql("processing_error")
133
+ # expect(error.response_code).to eql("76")
134
+ # expect(error.response_text).to eql("NO ACTION TAKEN")
135
+ expect(error.code).to eql("incorrect_number")
136
+ expect(error.response_code).to eql("14")
137
+ expect(error.response_text).to eql("CARD NO. ERROR")
138
+ }
139
+ end
140
+
141
+ it "Amex response code should indicate invalid cvv2" do
142
+ expect {
143
+ Hps::TestHelper.charge_valid_amex(10.23)
144
+ }.to raise_error(Hps::CardException) { |error|
145
+ expect(error.code).to eql("incorrect_cvc")
146
+ expect(error.response_code).to eql("N7")
147
+ expect(error.response_text).to eql("CVV2 MISMATCH")
148
+ }
149
+ end
150
+
151
+ it "Amex response code should indicate invalid originator" do
152
+ expect {
153
+ Hps::TestHelper.charge_valid_amex(10.30)
154
+ }.to raise_error(Hps::CardException) { |error|
155
+ expect(error.code).to eql("processing_error")
156
+ expect(error.response_code).to eql("58")
157
+ expect(error.response_text).to eql("SERV NOT ALLOWED")
158
+ }
159
+ end
160
+
161
+ it "Amex response code should indicate card declined" do
162
+ expect {
163
+ Hps::TestHelper.charge_valid_amex(10.25)
164
+ }.to raise_error(Hps::CardException) { |error|
165
+ expect(error.code).to eql("card_declined")
166
+ expect(error.response_code).to eql("05")
167
+ expect(error.response_text).to eql("DECLINE")
168
+ }
169
+ end
170
+
171
+ it "Amex response code should indicate account canceled" do
172
+ expect {
173
+ Hps::TestHelper.charge_valid_amex(10.13)
174
+ }.to raise_error(Hps::CardException) { |error|
175
+ expect(error.code).to eql("card_declined")
176
+ expect(error.response_code).to eql("78")
177
+ expect(error.response_text).to eql("NO ACCOUNT")
178
+ }
179
+ end
180
+
181
+ it "Amex response code should indicate merchant close" do
182
+ expect {
183
+ Hps::TestHelper.charge_valid_amex(10.12)
184
+ }.to raise_error(Hps::CardException) { |error|
185
+ expect(error.code).to eql("processing_error")
186
+ expect(error.response_code).to eql("06")
187
+ expect(error.response_text).to eql("ERROR")
188
+ }
189
+ end
190
+
191
+ it "Amex response code should indicate pickup card" do
192
+ expect {
193
+ Hps::TestHelper.charge_valid_amex(10.04)
194
+ }.to raise_error(Hps::CardException) { |error|
195
+ expect(error.code).to eql("card_declined")
196
+ expect(error.response_code).to eql("44")
197
+ expect(error.response_text).to eql("HOLD-CALL")
198
+ }
199
+ end
200
+
201
+ # verify, authorize & capture
202
+
203
+ it "Amex verify should return OK" do
204
+ service = Hps::HpsChargeService.new()
205
+ result = service.verify(Hps::TestData.valid_amex, Hps::TestData.valid_cardholder)
206
+ expect(result.response_code).to eql("00")
207
+ end
208
+
209
+ it "Amex authorize should return OK" do
210
+ service = Hps::HpsChargeService.new()
211
+ result = service.authorize(50.00, "usd", Hps::TestData.valid_amex, Hps::TestData.valid_cardholder)
212
+ expect(result.response_code).to eql("00")
213
+ end
214
+
215
+ it "Amex authorize and request token should return OK" do
216
+ service = Hps::HpsChargeService.new()
217
+ result = service.authorize(50.00, "usd", Hps::TestData.valid_amex, Hps::TestData.valid_cardholder, true)
218
+ expect(result.token_data.response_code).to eql("0")
219
+ expect(result.response_code).to eql("00")
220
+ end
221
+
222
+ it "Amex authorize and capture should return OK" do
223
+ service = Hps::HpsChargeService.new()
224
+ result = service.authorize(50.00, "usd", Hps::TestData.valid_amex, Hps::TestData.valid_cardholder)
225
+ expect(result.response_code).to eql("00")
226
+
227
+ capture_result = service.capture(result.transaction_id)
228
+ expect(capture_result.response_code).to eql("00")
229
+ end
230
+
231
+ it "Amex card present and reader not present" do
232
+ service = Hps::HpsChargeService.new()
233
+ card = Hps::TestData.valid_amex
234
+ card.card_present = true
235
+ result = service.charge(10.00, "usd", card, Hps::TestData.valid_cardholder)
236
+ expect(result.response_code).to eql("00")
237
+ end
238
+
239
+ it "Amex card present and reader present" do
240
+ service = Hps::HpsChargeService.new()
241
+ card = Hps::TestData.valid_amex
242
+ card.card_present = true
243
+ card.reader_present = true
244
+ result = service.charge(10.00, "usd", card, Hps::TestData.valid_cardholder)
245
+ expect(result.response_code).to eql("00")
246
+ end
247
+
248
+ it "Amex Dynamic Descriptor Authorize" do
249
+ service = Hps::HpsChargeService.new()
250
+ txn_descriptor = "Best Company Ever"
251
+ result = service.authorize(10.00, "usd", Hps::TestData.valid_amex, Hps::TestData.valid_cardholder, false, nil, txn_descriptor)
252
+ expect(result.response_code).to eql("00")
253
+ p result.transaction_id
254
+ end
255
+
256
+ it "Amex Dynamic Descriptor Charge" do
257
+ service = Hps::HpsChargeService.new()
258
+ txn_descriptor = "Best Company Ever"
259
+ result = service.charge(10.00, "usd", Hps::TestData.valid_amex, Hps::TestData.valid_cardholder, false, nil, txn_descriptor)
260
+ expect(result.response_code).to eql("00")
261
+ p result.transaction_id
262
+ end
263
+
264
+ it "should charge with amex swipe and txn descriptor" do
265
+ Hps::TestHelper.valid_multi_use_config
266
+ service = Hps::HpsChargeService.new
267
+ txn_descriptor = "Best Company Ever"
268
+ track_data = Hps::HpsTrackData.new
269
+ track_data.value = '%B3727 006992 51018^AMEX TEST CARD^2512990502700?;372700699251018=2512990502700?'
270
+ track_data.method_obtained = Hps::HpsTrackDataMethod::SWIPE
271
+
272
+ charge = service.charge_swipe(10.00, "usd", track_data, nil, 0, false, txn_descriptor)
273
+
274
+ expect(charge).to_not be_nil
275
+ expect(charge.response_code).to eql("00")
276
+ end
277
+
278
+ it "should authorize with amex swipe and txn descriptor" do
279
+ Hps::TestHelper.valid_multi_use_config
280
+ service = Hps::HpsChargeService.new
281
+ txn_descriptor = "Best Company Ever"
282
+ track_data = Hps::HpsTrackData.new
283
+ track_data.value = '%B3727 006992 51018^AMEX TEST CARD^2512990502700?;372700699251018=2512990502700?'
284
+ track_data.method_obtained = Hps::HpsTrackDataMethod::SWIPE
285
+
286
+ authorize = service.authorize_swipe(10.00, "usd", track_data, nil, 0, false, txn_descriptor)
287
+
288
+ expect(authorize).to_not be_nil
289
+ expect(authorize.response_code).to eql("00")
290
+ end
291
+
292
+ end