hps 2.2.5 → 2.4.0

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 (83) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +4 -4
  3. data/Gemfile.lock +59 -0
  4. data/LICENSE.md +264 -0
  5. data/PRIVACY.txt +65 -65
  6. data/README.md +213 -216
  7. data/Rakefile +15 -15
  8. data/examples/sinatra-verify-only/Gemfile +4 -4
  9. data/examples/sinatra-verify-only/app.rb +32 -32
  10. data/examples/sinatra-verify-only/views/index.erb +478 -478
  11. data/examples/sinatra-verify-only/views/result.erb +39 -39
  12. data/hps.gemspec +28 -28
  13. data/lib/hps/configuration.rb +17 -17
  14. data/lib/hps/entities/hps_account_verify.rb +8 -8
  15. data/lib/hps/entities/hps_address.rb +6 -6
  16. data/lib/hps/entities/hps_authorization.rb +12 -12
  17. data/lib/hps/entities/hps_batch.rb +6 -6
  18. data/lib/hps/entities/hps_cardholder.rb +6 -6
  19. data/lib/hps/entities/hps_charge.rb +8 -8
  20. data/lib/hps/entities/hps_charge_exceptions.rb +6 -6
  21. data/lib/hps/entities/hps_check.rb +18 -18
  22. data/lib/hps/entities/hps_check_holder.rb +10 -10
  23. data/lib/hps/entities/hps_check_response.rb +45 -45
  24. data/lib/hps/entities/hps_check_response_details.rb +9 -9
  25. data/lib/hps/entities/hps_credit_card.rb +34 -34
  26. data/lib/hps/entities/hps_direct_market_data.rb +5 -5
  27. data/lib/hps/entities/hps_encryption_data.rb +6 -6
  28. data/lib/hps/entities/hps_gift_card.rb +133 -0
  29. data/lib/hps/entities/hps_manage_tokens.rb +8 -8
  30. data/lib/hps/entities/hps_refund.rb +8 -8
  31. data/lib/hps/entities/hps_report_transaction_details.rb +10 -10
  32. data/lib/hps/entities/hps_report_transaction_summary.rb +6 -6
  33. data/lib/hps/entities/hps_reversal.rb +10 -10
  34. data/lib/hps/entities/hps_token_data.rb +10 -10
  35. data/lib/hps/entities/hps_track_data.rb +5 -5
  36. data/lib/hps/entities/hps_transaction.rb +161 -161
  37. data/lib/hps/entities/hps_transaction_details.rb +6 -6
  38. data/lib/hps/entities/hps_transaction_header.rb +8 -8
  39. data/lib/hps/entities/hps_transaction_type.rb +16 -16
  40. data/lib/hps/entities/hps_void.rb +8 -8
  41. data/lib/hps/infrastructure/api_connection_exception.rb +11 -11
  42. data/lib/hps/infrastructure/authentication_exception.rb +11 -11
  43. data/lib/hps/infrastructure/card_exception.rb +15 -15
  44. data/lib/hps/infrastructure/exceptions.json +547 -468
  45. data/lib/hps/infrastructure/hps_account_type.rb +11 -11
  46. data/lib/hps/infrastructure/hps_check_exception.rb +13 -13
  47. data/lib/hps/infrastructure/hps_check_type.rb +11 -11
  48. data/lib/hps/infrastructure/hps_data_entry_mode.rb +11 -11
  49. data/lib/hps/infrastructure/hps_exception.rb +25 -25
  50. data/lib/hps/infrastructure/hps_exception_mapper.rb +145 -134
  51. data/lib/hps/infrastructure/hps_gateway_response_validation.rb +20 -20
  52. data/lib/hps/infrastructure/hps_input_validation.rb +13 -13
  53. data/lib/hps/infrastructure/hps_sdk_codes.rb +48 -48
  54. data/lib/hps/infrastructure/hps_sec_code.rb +27 -27
  55. data/lib/hps/infrastructure/hps_track_data_method.rb +6 -6
  56. data/lib/hps/infrastructure/invalid_request_exception.rb +15 -15
  57. data/lib/hps/services/hps_batch_service.rb +29 -29
  58. data/lib/hps/services/hps_charge_service.rb +773 -773
  59. data/lib/hps/services/hps_check_service.rb +110 -110
  60. data/lib/hps/services/hps_gift_card_service.rb +301 -0
  61. data/lib/hps/services/hps_service.rb +141 -136
  62. data/lib/hps/version.rb +3 -3
  63. data/lib/hps.rb +63 -61
  64. data/tests/amex_tests.rb +292 -292
  65. data/tests/cert_tests.rb +80 -80
  66. data/tests/certification/card_present_spec.rb +320 -320
  67. data/tests/certification/gift_card_certification_test.rb +107 -0
  68. data/tests/certification/gift_card_certification_tests.rb +107 -0
  69. data/tests/check_tests.rb +50 -50
  70. data/tests/discover_tests.rb +386 -386
  71. data/tests/exception_mapper_tests.rb +311 -244
  72. data/tests/general_tests.rb +140 -140
  73. data/tests/giftcard_tests.rb +212 -0
  74. data/tests/hps_token_service.rb +56 -56
  75. data/tests/mastercard_tests.rb +387 -387
  76. data/tests/secret_key.rb +11 -11
  77. data/tests/test_check.rb +77 -77
  78. data/tests/test_data.rb +138 -128
  79. data/tests/test_helper.rb +179 -116
  80. data/tests/token_tests.rb +512 -512
  81. data/tests/visa_tests.rb +445 -445
  82. metadata +40 -15
  83. data/LICENSE.txt +0 -32
@@ -1,141 +1,141 @@
1
- require File.join( File.dirname(__FILE__), "test_helper.rb" )
2
-
3
- describe "General Tests" do
4
-
5
- before(:each) do
6
- Hps::TestHelper.configure_hps_module()
7
- @service = Hps::HpsChargeService.new()
8
- end
9
-
10
- it "SecretAPIKey with spaces on Visa charge should return OK" do
11
- Hps::TestHelper.configure_hps_module_secret_key_with_spaces
12
- @service = Hps::HpsChargeService.new()
13
- result = @service.charge(5, "usd", Hps::TestData::valid_visa, Hps::TestData::valid_cardholder)
14
- expect(result.response_code).to eql("00")
15
- end
16
-
17
-
18
- it "charge when amount is less than zero should throw invalid request exception" do
19
- expect {
20
- @service.charge(-5, "usd", Hps::TestData::valid_visa, Hps::TestData::valid_cardholder)
21
- }.to raise_error(Hps::InvalidRequestException)
22
- end
23
-
24
- it "charge when currency is empty should throw invalid request exception" do
25
- expect {
26
- @service.charge(50, "", Hps::TestData::valid_visa, Hps::TestData::valid_cardholder)
27
- }.to raise_error(Hps::InvalidRequestException)
28
- end
29
-
30
- it "charge when currency is not usd should throw invalid request exception" do
31
- expect {
32
- @service.charge(50, "eur", Hps::TestData::valid_visa, Hps::TestData::valid_cardholder)
33
- }.to raise_error(Hps::InvalidRequestException)
34
- end
35
-
36
- it "charge when configuration is invalid should throw hps exception" do
37
- expect {
38
- @service = Hps::HpsChargeService.new :service_uri => nil
39
- @service.charge(50, "usd", Hps::TestData::valid_visa, Hps::TestData::valid_cardholder)
40
- }.to raise_error(Hps::HpsException)
41
- end
42
-
43
- it "charge when license_id is invalid should throw authentication exception" do
44
- expect {
45
- @service = Hps::HpsChargeService.new :license_id => 11111
46
- @service.charge(50, "usd", Hps::TestData::valid_visa, Hps::TestData::valid_cardholder)
47
- }.to raise_error(Hps::AuthenticationException)
48
- end
49
-
50
- it "charge when card number is invalid should throw hps exception" do
51
- expect {
52
- @service.charge(50, "usd", Hps::TestData::invalid_card, Hps::TestData::valid_cardholder)
53
- }.to raise_error(Hps::HpsException)
54
- end
55
-
56
- it "list when charge is in filter range should show in list" do
57
- start_date = DateTime.now - 12.hours
58
- charge = @service.charge(50, "usd", Hps::TestData::valid_visa, Hps::TestData::valid_cardholder)
59
- end_date = DateTime.now
60
-
61
- charges = @service.list(start_date, end_date)
62
- expect(charges).to have_at_least(1).items
63
- expect(charges.any? { |c| c.transaction_id = charge.transaction_id }).to be_true
64
- end
65
-
66
- it "updates multi-use token" do
67
- Hps::TestHelper.valid_multi_use_config
68
- service = Hps::HpsChargeService.new()
69
- verify = service.verify(Hps::TestData::valid_visa, Hps::TestData.valid_cardholder, true)
70
- expect(verify).not_to be_nil
71
- expect(verify.response_code).to eql("85")
72
- expect(verify.token_data).not_to be_nil
73
- expect(verify.token_data.token_value).not_to be_nil
74
- expect(verify.token_data.token_value).not_to be_empty
75
-
76
- month = Time.now.strftime('%m')
77
- year = (Time.now + 2.years).strftime('%Y')
78
- result = service.update_token_expiration(verify.token_data.token_value, month, year)
79
- expect(result).not_to be_nil
80
- expect(result.response_code).to eql("00")
81
- end
82
-
83
- it "fails to update multi-use token with bad year" do
84
- Hps::TestHelper.valid_multi_use_config
85
- service = Hps::HpsChargeService.new()
86
- verify = service.verify(Hps::TestData::valid_visa, Hps::TestData.valid_cardholder, true)
87
- expect(verify).not_to be_nil
88
- expect(verify.response_code).to eql("85")
89
- expect(verify.token_data).not_to be_nil
90
- expect(verify.token_data.token_value).not_to be_nil
91
- expect(verify.token_data.token_value).not_to be_empty
92
-
93
- month = nil
94
- year = 19
95
-
96
- expect {
97
- service.update_token_expiration(verify.token_data.token_value, month, year)
98
- }.to raise_error(TypeError)
99
- end
100
-
101
- it "fails to update multi-use token with nil date" do
102
- Hps::TestHelper.valid_multi_use_config
103
- service = Hps::HpsChargeService.new()
104
- verify = service.verify(Hps::TestData::valid_visa, Hps::TestData.valid_cardholder, true)
105
- expect(verify).not_to be_nil
106
- expect(verify.response_code).to eql("85")
107
- expect(verify.token_data).not_to be_nil
108
- expect(verify.token_data.token_value).not_to be_nil
109
- expect(verify.token_data.token_value).not_to be_empty
110
-
111
- month = nil
112
- year = nil
113
-
114
- expect {
115
- service.update_token_expiration(verify.token_data.token_value, month, year)
116
- }.to raise_error(TypeError)
117
- end
118
-
119
- it "fails to update multi-use token with invalid token" do
120
- Hps::TestHelper.valid_multi_use_config
121
- service = Hps::HpsChargeService.new()
122
- month = Time.now.strftime('%m')
123
- year = (Time.now + 2.years).strftime('%Y')
124
-
125
- expect {
126
- service.update_token_expiration("abcdefg", month, year)
127
- }.to raise_error(Hps::HpsException)
128
- end
129
-
130
- it "fails to update multi-use token with nil token" do
131
- Hps::TestHelper.valid_multi_use_config
132
- service = Hps::HpsChargeService.new()
133
- month = Time.now.strftime('%m')
134
- year = (Time.now + 2.years).strftime('%Y')
135
-
136
- expect {
137
- service.update_token_expiration(nil, month, year)
138
- }.to raise_error(Hps::HpsException)
139
- end
140
-
1
+ require File.join( File.dirname(__FILE__), "test_helper.rb" )
2
+
3
+ describe "General Tests" do
4
+
5
+ before(:each) do
6
+ Hps::TestHelper.configure_hps_module()
7
+ @service = Hps::HpsChargeService.new()
8
+ end
9
+
10
+ it "SecretAPIKey with spaces on Visa charge should return OK" do
11
+ Hps::TestHelper.configure_hps_module_secret_key_with_spaces
12
+ @service = Hps::HpsChargeService.new()
13
+ result = @service.charge(5, "usd", Hps::TestData::valid_visa, Hps::TestData::valid_cardholder)
14
+ expect(result.response_code).to eql("00")
15
+ end
16
+
17
+
18
+ it "charge when amount is less than zero should throw invalid request exception" do
19
+ expect {
20
+ @service.charge(-5, "usd", Hps::TestData::valid_visa, Hps::TestData::valid_cardholder)
21
+ }.to raise_error(Hps::InvalidRequestException)
22
+ end
23
+
24
+ it "charge when currency is empty should throw invalid request exception" do
25
+ expect {
26
+ @service.charge(50, "", Hps::TestData::valid_visa, Hps::TestData::valid_cardholder)
27
+ }.to raise_error(Hps::InvalidRequestException)
28
+ end
29
+
30
+ it "charge when currency is not usd should throw invalid request exception" do
31
+ expect {
32
+ @service.charge(50, "eur", Hps::TestData::valid_visa, Hps::TestData::valid_cardholder)
33
+ }.to raise_error(Hps::InvalidRequestException)
34
+ end
35
+
36
+ it "charge when configuration is invalid should throw hps exception" do
37
+ expect {
38
+ @service = Hps::HpsChargeService.new :service_uri => nil
39
+ @service.charge(50, "usd", Hps::TestData::valid_visa, Hps::TestData::valid_cardholder)
40
+ }.to raise_error(Hps::HpsException)
41
+ end
42
+
43
+ it "charge when license_id is invalid should throw authentication exception" do
44
+ expect {
45
+ @service = Hps::HpsChargeService.new :license_id => 11111
46
+ @service.charge(50, "usd", Hps::TestData::valid_visa, Hps::TestData::valid_cardholder)
47
+ }.to raise_error(Hps::AuthenticationException)
48
+ end
49
+
50
+ it "charge when card number is invalid should throw hps exception" do
51
+ expect {
52
+ @service.charge(50, "usd", Hps::TestData::invalid_card, Hps::TestData::valid_cardholder)
53
+ }.to raise_error(Hps::HpsException)
54
+ end
55
+
56
+ it "list when charge is in filter range should show in list" do
57
+ start_date = DateTime.now - 12.hours
58
+ charge = @service.charge(50, "usd", Hps::TestData::valid_visa, Hps::TestData::valid_cardholder)
59
+ end_date = DateTime.now
60
+
61
+ charges = @service.list(start_date, end_date)
62
+ expect(charges).to have_at_least(1).items
63
+ expect(charges.any? { |c| c.transaction_id = charge.transaction_id }).to be_true
64
+ end
65
+
66
+ it "updates multi-use token" do
67
+ Hps::TestHelper.valid_multi_use_config
68
+ service = Hps::HpsChargeService.new()
69
+ verify = service.verify(Hps::TestData::valid_visa, Hps::TestData.valid_cardholder, true)
70
+ expect(verify).not_to be_nil
71
+ expect(verify.response_code).to eql("85")
72
+ expect(verify.token_data).not_to be_nil
73
+ expect(verify.token_data.token_value).not_to be_nil
74
+ expect(verify.token_data.token_value).not_to be_empty
75
+
76
+ month = Time.now.strftime('%m')
77
+ year = (Time.now + 2.years).strftime('%Y')
78
+ result = service.update_token_expiration(verify.token_data.token_value, month, year)
79
+ expect(result).not_to be_nil
80
+ expect(result.response_code).to eql("00")
81
+ end
82
+
83
+ it "fails to update multi-use token with bad year" do
84
+ Hps::TestHelper.valid_multi_use_config
85
+ service = Hps::HpsChargeService.new()
86
+ verify = service.verify(Hps::TestData::valid_visa, Hps::TestData.valid_cardholder, true)
87
+ expect(verify).not_to be_nil
88
+ expect(verify.response_code).to eql("85")
89
+ expect(verify.token_data).not_to be_nil
90
+ expect(verify.token_data.token_value).not_to be_nil
91
+ expect(verify.token_data.token_value).not_to be_empty
92
+
93
+ month = nil
94
+ year = 19
95
+
96
+ expect {
97
+ service.update_token_expiration(verify.token_data.token_value, month, year)
98
+ }.to raise_error(TypeError)
99
+ end
100
+
101
+ it "fails to update multi-use token with nil date" do
102
+ Hps::TestHelper.valid_multi_use_config
103
+ service = Hps::HpsChargeService.new()
104
+ verify = service.verify(Hps::TestData::valid_visa, Hps::TestData.valid_cardholder, true)
105
+ expect(verify).not_to be_nil
106
+ expect(verify.response_code).to eql("85")
107
+ expect(verify.token_data).not_to be_nil
108
+ expect(verify.token_data.token_value).not_to be_nil
109
+ expect(verify.token_data.token_value).not_to be_empty
110
+
111
+ month = nil
112
+ year = nil
113
+
114
+ expect {
115
+ service.update_token_expiration(verify.token_data.token_value, month, year)
116
+ }.to raise_error(TypeError)
117
+ end
118
+
119
+ it "fails to update multi-use token with invalid token" do
120
+ Hps::TestHelper.valid_multi_use_config
121
+ service = Hps::HpsChargeService.new()
122
+ month = Time.now.strftime('%m')
123
+ year = (Time.now + 2.years).strftime('%Y')
124
+
125
+ expect {
126
+ service.update_token_expiration("abcdefg", month, year)
127
+ }.to raise_error(Hps::HpsException)
128
+ end
129
+
130
+ it "fails to update multi-use token with nil token" do
131
+ Hps::TestHelper.valid_multi_use_config
132
+ service = Hps::HpsChargeService.new()
133
+ month = Time.now.strftime('%m')
134
+ year = (Time.now + 2.years).strftime('%Y')
135
+
136
+ expect {
137
+ service.update_token_expiration(nil, month, year)
138
+ }.to raise_error(Hps::HpsException)
139
+ end
140
+
141
141
  end
@@ -0,0 +1,212 @@
1
+ require File.join( File.dirname(__FILE__), "test_helper" )
2
+
3
+ describe "Giftcard Tests" do
4
+
5
+ # Activate a card
6
+ it "When card is ok, it should activate and return valid response" do
7
+ response = Hps::TestHelper.activate_valid_gift_card(100.00)
8
+ expect( response.response_code ).to eql("0")
9
+ expect( response ).to be_a(Hps::HpsGiftCardActivate)
10
+ end
11
+
12
+ # Add value to a card
13
+ it "When card is ok, it should add value and return a valid response" do
14
+ response = Hps::TestHelper.add_value_to_valid_gift_card(100.00)
15
+ expect( response.response_code ).to eql("0")
16
+ expect( response ).to be_a(Hps::HpsGiftCardAddValue)
17
+ end
18
+
19
+ # Check the balance on a card
20
+ it "When card is ok, it should return valid response" do
21
+ response = Hps::TestHelper.balance_valid_gift_card
22
+ expect( response.response_code ).to eql("0")
23
+ expect( response ).to be_a(Hps::HpsGiftCardBalance)
24
+ end
25
+
26
+ # Deactivate a card
27
+ it "When card is ok, it should deactivate and return a valid response" do
28
+ response = Hps::TestHelper.deactivate_valid_gift_card
29
+ expect( response.response_code ).to eql("0")
30
+ expect( response ).to be_a(Hps::HpsGiftCardDeactivate)
31
+ end
32
+
33
+ # Replace a card
34
+ it "When card is ok, it should replace it and return a valid response" do
35
+ response = Hps::TestHelper.replace_valid_gift_card
36
+ expect( response.response_code ).to eql("0")
37
+ expect( response ).to be_a(Hps::HpsGiftCardReplace)
38
+ end
39
+
40
+ # Add rewards to a card
41
+ it "When card is ok, it should add rewards and return a valid response" do
42
+ ["USD", "POINTS"].each do |currency|
43
+ response = Hps::TestHelper.reward_valid_gift_card(10.00, currency)
44
+ expect( response.response_code ).to eql("0")
45
+ expect( response ).to be_a(Hps::HpsGiftCardReward)
46
+ end
47
+ end
48
+
49
+ # Complete a sale
50
+ it "When card is ok, it should complete a sale and return a valid response" do
51
+ response = Hps::TestHelper.sale_valid_gift_card(10.00)
52
+ expect( response.response_code ).to eql("0")
53
+ expect( response ).to be_a(Hps::HpsGiftCardSale)
54
+ end
55
+
56
+ # Void a transaction
57
+ it "Should void a transaction" do
58
+ response = Hps::TestHelper.sale_valid_gift_card(10.00)
59
+ expect( response.response_code ).to eql("0")
60
+ void_response = Hps::TestHelper.void_gift_card_sale( response.transaction_id )
61
+ expect( void_response.response_code ).to eql("0")
62
+ expect( void_response ).to be_a(Hps::HpsGiftCardVoid)
63
+ end
64
+
65
+ # Reverse a transaction using transaction id
66
+ it "Should reverse a gift card transaction using the transaction id" do
67
+ response = Hps::TestHelper.sale_valid_gift_card(10.00)
68
+ expect( response.response_code ).to eql("0")
69
+ reverse_response = Hps::TestHelper.reverse_gift_card_sale( 10.00, response.transaction_id )
70
+ expect( reverse_response.response_code ).to eql("0")
71
+ expect( reverse_response ).to be_a(Hps::HpsGiftCardReversal)
72
+ end
73
+
74
+ # Reverse transaction using giftcard
75
+ it "Should reverse a giftcard transaction using the card" do
76
+ response = Hps::TestHelper.sale_valid_gift_card(10.00, "USD", nil, nil, false)
77
+ expect( response.response_code ).to eql("0")
78
+ reverse_response = Hps::TestHelper.reverse_gift_card_sale(10.00)
79
+ expect( reverse_response.response_code ).to eql("0")
80
+ expect( reverse_response ).to be_a(Hps::HpsGiftCardReversal)
81
+ end
82
+
83
+ context "exceptions for transactions" do
84
+ before(:all) do
85
+ @mapper = Hps::ExceptionMapper.new
86
+ end
87
+
88
+ # Amounts less than zero
89
+ it "raises an exception for amounts less than zero" do
90
+ %i{activate add_value reward sale reverse}.each do |method|
91
+ expect{ Hps::TestHelper.gift_card_transaction_exception(-1.00, method) }.to raise_exception{|e|
92
+ expect(e).to be_a( Hps::InvalidRequestException )
93
+ expect(e.message).to eql("Amount must be greater than or equal 0.")
94
+ }
95
+ end
96
+ end
97
+
98
+ # Profile auth fails
99
+ it "should raise an exception if profile auth fails" do
100
+ expect{ Hps::TestHelper.gift_card_transaction_exception(2.01) }.to raise_exception {|e|
101
+ expect(e).to be_a(Hps::CardException)
102
+ expect(e.message).to eql("ProfileError Subject 'ProfileAuthorizationFailed'.")
103
+ }
104
+ end
105
+
106
+ # Profile closed
107
+ it "should raise an exception if profile is closed" do
108
+ expect{ Hps::TestHelper.gift_card_transaction_exception(2.02) }.to raise_exception {|e|
109
+ expect(e).to be_a(Hps::CardException)
110
+ expect(e.message).to eql("ProfileError Subject 'ProfileClosed'.")
111
+ }
112
+ end
113
+
114
+ # Profile not found
115
+ it "should raise an exception if profile is not found" do
116
+ expect{ Hps::TestHelper.gift_card_transaction_exception(2.03) }.to raise_exception {|e|
117
+ expect(e).to be_a(Hps::CardException)
118
+ expect(e.message).to eql("ProfileError")
119
+ }
120
+ end
121
+
122
+ # Profile frozen
123
+ it "should raise an exception if profile is frozen" do
124
+ expect{ Hps::TestHelper.gift_card_transaction_exception(2.04) }.to raise_exception {|e|
125
+ expect(e).to be_a(Hps::CardException)
126
+ expect(e.message).to eql("ProfileError Subject 'ProfileFrozen'.")
127
+ }
128
+ end
129
+
130
+ # Insufficient funds - card decline - code 5
131
+ it "should raise an exception if insufficient funds" do
132
+ expect{ Hps::TestHelper.gift_card_transaction_exception(3.01) }.to raise_exception {|e|
133
+ expect(e).to be_a(Hps::CardException)
134
+ expect(e.message).to eql(message_for_code("Exception_Message_CardDeclined"))
135
+ }
136
+ end
137
+
138
+ # Insufficient activation amount - card decline - code 5
139
+ it "should raise an exception if insufficient activation amount" do
140
+ expect{ Hps::TestHelper.gift_card_transaction_exception(3.02) }.to raise_exception {|e|
141
+ expect(e).to be_a(Hps::CardException)
142
+ expect(e.message).to eql(message_for_code("Exception_Message_CardDeclined"))
143
+ }
144
+ end
145
+
146
+ # Insufficient load amount - card decline - code 5
147
+ it "should raise an exception if insufficient load amount" do
148
+ expect{ Hps::TestHelper.gift_card_transaction_exception(3.03) }.to raise_exception {|e|
149
+ expect(e).to be_a(Hps::CardException)
150
+ expect(e.message).to eql(message_for_code("Exception_Message_CardDeclined"))
151
+ }
152
+ end
153
+
154
+ # Invalid Payment Type - unknown gift error - code 1
155
+ it "should raise an exception if insufficient load amount" do
156
+ expect{ Hps::TestHelper.gift_card_transaction_exception(3.04) }.to raise_exception {|e|
157
+ expect(e).to be_a(Hps::CardException)
158
+ expect(e.message).to eql("SystemError Subject 'InvalidPaymentType'.")
159
+ }
160
+ end
161
+
162
+ # Provide an invalid PIN - code 14
163
+ it "Should raise an exception if PIN is invalid" do
164
+ expect{ Hps::TestHelper.gift_card_transaction_exception(3.05) }.to raise_exception {|e|
165
+ expect(e).to be_a(Hps::CardException)
166
+ expect(e.message).to eql(message_for_code("Exception_Message_InvalidPin"))
167
+ }
168
+ end
169
+
170
+ # Invalid seller ID - unknown gift error - code 1
171
+ it "should raise an exception if invalid seller profile ID" do
172
+ expect{ Hps::TestHelper.gift_card_transaction_exception(3.06) }.to raise_exception {|e|
173
+ expect(e).to be_a(Hps::CardException)
174
+ expect(e.message).to eql("SystemError")
175
+ }
176
+ end
177
+
178
+ # Order exists - processing error - code 7
179
+ it "should raise an exception if invalid seller profile ID" do
180
+ expect{ Hps::TestHelper.gift_card_transaction_exception(3.07) }.to raise_exception {|e|
181
+ expect(e).to be_a(Hps::CardException)
182
+ expect(e.message).to eql(message_for_code("Exception_Message_ProcessingError"))
183
+ }
184
+ end
185
+
186
+ # Registration required - invalid card data - code 3
187
+ it "should raise an exception if invalid seller profile ID" do
188
+ expect{ Hps::TestHelper.gift_card_transaction_exception(3.08) }.to raise_exception {|e|
189
+ expect(e).to be_a(Hps::CardException)
190
+ expect(e.message).to eql(message_for_code("Exception_Message_InvalidCardData"))
191
+ }
192
+ end
193
+
194
+ # Account not active - invalid card data - code 8
195
+ it "should raise an exception if invalid seller profile ID" do
196
+ expect{ Hps::TestHelper.gift_card_transaction_exception(3.09) }.to raise_exception {|e|
197
+ expect(e).to be_a(Hps::CardException)
198
+ expect(e.message).to eql(message_for_code("Exception_Message_InvalidCardData"))
199
+ }
200
+ end
201
+
202
+ end
203
+ end # Giftcard Tests
204
+
205
+ # Helper methods
206
+ def message_for_code(code)
207
+ mapping = @mapper.exceptions["exception_messages"].detect { |message|
208
+ message["code"] == code
209
+ }
210
+
211
+ mapping["message"] unless mapping.nil?
212
+ end
@@ -1,56 +1,56 @@
1
- require 'net/http'
2
-
3
- require 'rubygems'
4
- require 'json'
5
-
6
- module Hps
7
- class HpsTokenService
8
- attr_accessor :public_api_key, :url
9
-
10
- def initialize(public_api_key)
11
- @public_api_key = public_api_key
12
- if @public_api_key.nil? || @public_api_key.eql?('')
13
- raise HpsException.new('Public Key Not Found', '0')
14
- end
15
-
16
- components = @public_api_key.split '_'
17
- if components.size < 3
18
- raise HpsException.new('Public API Key must contain at least two underscores','0')
19
- end
20
-
21
- if components[1].downcase.eql? 'prod'
22
- @url = 'https://api2.heartlandportico.com/SecureSubmit.v1/api/token'
23
- else
24
- @url = 'https://cert.api2.heartlandportico.com/Hps.Exchange.PosGateway.Hpf.v1/api/token'
25
- end
26
-
27
- end
28
-
29
- def get_token(card_data)
30
- data = {
31
- 'api_key' => @public_api_key,
32
- 'object' => 'token',
33
- 'token_type' => 'supt',
34
- '_method' => 'post',
35
- 'card[number]' => card_data.number,
36
- 'card[cvv]' => card_data.cvv,
37
- 'card[exp_month]' => card_data.exp_month,
38
- 'card[exp_year]' => card_data.exp_year
39
- }
40
- get_result = get(data)
41
- JSON.parse(get_result)
42
- end
43
-
44
- def get(data)
45
- begin
46
- uri = URI(@url)
47
- uri.query = URI.encode_www_form(data)
48
- res = Net::HTTP.get_response(uri)
49
- res.body
50
-
51
- rescue Exception => e
52
- raise HpsException.new(e.message,'0')
53
- end
54
- end
55
- end
56
- end
1
+ require 'net/http'
2
+
3
+ require 'rubygems'
4
+ require 'json'
5
+
6
+ module Hps
7
+ class HpsTokenService
8
+ attr_accessor :public_api_key, :url
9
+
10
+ def initialize(public_api_key)
11
+ @public_api_key = public_api_key
12
+ if @public_api_key.nil? || @public_api_key.eql?('')
13
+ raise HpsException.new('Public Key Not Found', '0')
14
+ end
15
+
16
+ components = @public_api_key.split '_'
17
+ if components.size < 3
18
+ raise HpsException.new('Public API Key must contain at least two underscores','0')
19
+ end
20
+
21
+ if components[1].downcase.eql? 'prod'
22
+ @url = 'https://api2.heartlandportico.com/SecureSubmit.v1/api/token'
23
+ else
24
+ @url = 'https://cert.api2.heartlandportico.com/Hps.Exchange.PosGateway.Hpf.v1/api/token'
25
+ end
26
+
27
+ end
28
+
29
+ def get_token(card_data)
30
+ data = {
31
+ 'api_key' => @public_api_key,
32
+ 'object' => 'token',
33
+ 'token_type' => 'supt',
34
+ '_method' => 'post',
35
+ 'card[number]' => card_data.number,
36
+ 'card[cvv]' => card_data.cvv,
37
+ 'card[exp_month]' => card_data.exp_month,
38
+ 'card[exp_year]' => card_data.exp_year
39
+ }
40
+ get_result = get(data)
41
+ JSON.parse(get_result)
42
+ end
43
+
44
+ def get(data)
45
+ begin
46
+ uri = URI(@url)
47
+ uri.query = URI.encode_www_form(data)
48
+ res = Net::HTTP.get_response(uri)
49
+ res.body
50
+
51
+ rescue Exception => e
52
+ raise HpsException.new(e.message,'0')
53
+ end
54
+ end
55
+ end
56
+ end