LitleOnline 8.19.0 → 8.25.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +5 -13
  2. data/CHANGELOG +34 -0
  3. data/README.md +1 -1
  4. data/Rakefile +2 -2
  5. data/bin/Setup.rb +16 -6
  6. data/lib/LitleBatchRequest.rb +85 -2
  7. data/lib/LitleOnlineRequest.rb +108 -5
  8. data/lib/LitleRequest.rb +14 -9
  9. data/lib/LitleTransaction.rb +152 -3
  10. data/lib/XMLFields.rb +441 -7
  11. data/test/functional/test_activate.rb +100 -0
  12. data/test/functional/test_activateReversal.rb +56 -0
  13. data/test/functional/test_auth.rb +38 -1
  14. data/test/functional/test_balanceInquiry.rb +80 -0
  15. data/test/functional/test_batchStream.rb +145 -0
  16. data/test/functional/test_cancelSubscription.rb +55 -0
  17. data/test/functional/test_captureGivenAuth.rb +32 -2
  18. data/test/functional/test_createPlan.rb +85 -0
  19. data/test/functional/test_credit.rb +22 -1
  20. data/test/functional/test_deactivate.rb +80 -0
  21. data/test/functional/test_deactivateReversal.rb +56 -0
  22. data/test/functional/test_depositReversal.rb +56 -0
  23. data/test/functional/test_forceCapture.rb +23 -1
  24. data/test/functional/test_litle_requests.rb +3 -2
  25. data/test/functional/test_load.rb +82 -0
  26. data/test/functional/test_loadReversal.rb +56 -0
  27. data/test/functional/test_refundReversal.rb +56 -0
  28. data/test/functional/test_sale.rb +23 -1
  29. data/test/functional/test_unload.rb +82 -0
  30. data/test/functional/test_unloadReversal.rb +56 -0
  31. data/test/functional/test_updatePlan.rb +58 -0
  32. data/test/functional/test_updateSubscription.rb +76 -0
  33. data/test/functional/ts_all.rb +21 -2
  34. data/test/unit/test_LitleBatchRequest.rb +47 -2
  35. data/test/unit/test_LitleOnlineRequest.rb +2 -2
  36. data/test/unit/test_activate.rb +92 -0
  37. data/test/{functional/ts_all.rb~ → unit/test_activateReversal.rb} +17 -17
  38. data/test/unit/test_auth.rb +37 -3
  39. data/test/unit/test_balanceInquiry.rb +52 -0
  40. data/test/unit/test_cancelSubscription.rb +43 -0
  41. data/test/unit/test_captureGivenAuth.rb +44 -2
  42. data/test/unit/test_createPlan.rb +52 -0
  43. data/test/unit/test_credit.rb +3 -2
  44. data/test/unit/test_deactivate.rb +52 -0
  45. data/test/unit/test_deactivateReversal.rb +44 -0
  46. data/test/unit/test_depositReversal.rb +44 -0
  47. data/test/unit/test_load.rb +53 -0
  48. data/test/unit/test_loadReversal.rb +44 -0
  49. data/test/unit/test_refundReversal.rb +44 -0
  50. data/test/unit/test_sale.rb +18 -1
  51. data/test/unit/test_unload.rb +53 -0
  52. data/test/unit/test_unloadReversal.rb +44 -0
  53. data/test/unit/test_updatePlan.rb +45 -0
  54. data/test/unit/test_updateSubscription.rb +172 -0
  55. data/test/unit/test_xmlfields.rb +395 -0
  56. data/test/unit/ts_unit.rb +19 -2
  57. metadata +51 -34
  58. data/CHANGELOG~ +0 -81
  59. data/Rakefile~ +0 -93
  60. data/lib/LitleOnlineRequest.rb~ +0 -198
  61. data/lib/LitleRequest.rb~ +0 -513
  62. data/lib/LitleTransaction.rb~ +0 -297
  63. data/lib/XMLFields.rb~ +0 -1380
  64. data/test/unit/test_LitleOnlineRequest.rb~ +0 -296
  65. data/test/unit/test_sale.rb~ +0 -390
  66. data/test/unit/test_xmlfields.rb~ +0 -2515
@@ -1,296 +0,0 @@
1
- =begin
2
- Copyright (c) 2011 Litle & Co.
3
-
4
- Permission is hereby granted, free of charge, to any person
5
- obtaining a copy of this software and associated documentation
6
- files (the "Software"), to deal in the Software without
7
- restriction, including without limitation the rights to use,
8
- copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the
10
- Software is furnished to do so, subject to the following
11
- conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
18
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
- OTHER DEALINGS IN THE SOFTWARE.
24
- =end
25
- require 'lib/LitleOnline'
26
- require 'lib/LitleOnlineRequest'
27
- require 'test/unit'
28
- require 'mocha/setup'
29
-
30
- module LitleOnline
31
-
32
- class TestLitleOnlineRequest < Test::Unit::TestCase
33
- def test_set_merchant_id
34
- Configuration.any_instance.stubs(:config).returns({'currency_merchant_map'=>{'DEFAULT'=>'1'}})
35
- litle = LitleOnlineRequest.new
36
- assert_equal '2', litle.send(:get_merchant_id, {'merchantId'=>'2'})
37
- assert_equal '1', litle.send(:get_merchant_id, {'NotMerchantId'=>'2'})
38
- end
39
-
40
- def test_simple
41
- Configuration.any_instance.stubs(:config).returns({'currency_merchant_map'=>{'DEFAULT'=>'1'}, 'user'=>'a','password'=>'b','version'=>'8.10'})
42
- hash = {
43
- 'reportGroup'=>'Planets',
44
- 'orderId'=>'12344',
45
- 'amount'=>'106',
46
- 'orderSource'=>'ecommerce',
47
- 'card'=>{
48
- 'type'=>'VI',
49
- 'number' =>'4100000000000001',
50
- 'expDate' =>'1210'
51
- }}
52
-
53
- Communications.expects(:http_post).with(regexp_matches(/<litleOnlineRequest .*/m),kind_of(Hash))
54
- XMLObject.expects(:new)
55
-
56
- response = LitleOnlineRequest.new.authorization(hash)
57
- end
58
-
59
- def test_authorization_attributes
60
- Configuration.any_instance.stubs(:config).returns({'currency_merchant_map'=>{'DEFAULT'=>'1'}, 'user'=>'a','password'=>'b','version'=>'8.10'})
61
- hash={
62
- 'reportGroup'=>'Planets',
63
- 'id' => '003',
64
- 'orderId'=>'12344',
65
- 'amount'=>'106',
66
- 'orderSource'=>'ecommerce',
67
- 'card'=>{
68
- 'type'=>'VI',
69
- 'number' =>'4100000000000001',
70
- 'expDate' =>'1210'
71
- }}
72
-
73
- Communications.expects(:http_post).with(regexp_matches(/.*<authorization ((reportGroup="Planets" id="003")|(id="003" reportGroup="Planets")).*/m),kind_of(Hash))
74
- XMLObject.expects(:new)
75
-
76
- response = LitleOnlineRequest.new.authorization(hash)
77
- end
78
-
79
- def test_authorization_elements
80
- Configuration.any_instance.stubs(:config).returns({'currency_merchant_map'=>{'DEFAULT'=>'1'}, 'user'=>'a','password'=>'b','version'=>'8.10'})
81
- hash={
82
- 'reportGroup'=>'Planets',
83
- 'id' => '004',
84
- 'orderId'=>'12344',
85
- 'amount'=>'106',
86
- 'orderSource'=>'ecommerce',
87
- 'card'=>{
88
- 'type'=>'VI',
89
- 'number' =>'4100000000000001',
90
- 'expDate' =>'1210'
91
- }}
92
-
93
- Communications.expects(:http_post).with(regexp_matches(/.*<authorization.*<orderId>12344.*<amount>106.*<orderSource>ecommerce.*/m),kind_of(Hash))
94
- XMLObject.expects(:new)
95
-
96
- response = LitleOnlineRequest.new.authorization(hash)
97
- end
98
-
99
- def test_authorization_card_field
100
- Configuration.any_instance.stubs(:config).returns({'currency_merchant_map'=>{'DEFAULT'=>'1'}, 'user'=>'a','password'=>'b','version'=>'8.10'})
101
- hash={
102
- 'reportGroup'=>'Planets',
103
- 'id' => '005',
104
- 'orderId'=>'12344',
105
- 'amount'=>'106',
106
- 'orderSource'=>'ecommerce',
107
- 'card'=>{
108
- 'type'=>'VI',
109
- 'number' =>'4100000000000001',
110
- 'expDate' =>'1210'
111
- }}
112
-
113
- Communications.expects(:http_post).with(regexp_matches(/.*<authorization.*<card>.*<number>4100000000000001.*<expDate>1210.*/m),kind_of(Hash))
114
- XMLObject.expects(:new)
115
-
116
- response = LitleOnlineRequest.new.authorization(hash)
117
- end
118
-
119
- def test_sale_card_field
120
- Configuration.any_instance.stubs(:config).returns({'currency_merchant_map'=>{'DEFAULT'=>'1'}, 'user'=>'a','password'=>'b','version'=>'8.10'})
121
- hash = {
122
- 'reportGroup'=>'Planets',
123
- 'id' => '006',
124
- 'orderId'=>'12344',
125
- 'amount'=>'106',
126
- 'orderSource'=>'ecommerce',
127
- 'card'=>{
128
- 'type'=>'VI',
129
- 'number' =>'4100000000000001',
130
- 'expDate' =>'1210'
131
- }}
132
-
133
- Communications.expects(:http_post).with(regexp_matches(/<litleOnlineRequest.*<sale.*<card>.*<number>4100000000000001.*<expDate>1210.*/m),kind_of(Hash))
134
- XMLObject.expects(:new)
135
-
136
- response = LitleOnlineRequest.new.sale(hash)
137
- end
138
-
139
- def test_capture_amount_unset_should_not_be_in_xml
140
- Configuration.any_instance.stubs(:config).returns({'currency_merchant_map'=>{'DEFAULT'=>'1'}, 'user'=>'a','password'=>'b','version'=>'8.10'})
141
- hash={
142
- 'id' => '006',
143
- 'reportGroup'=>'Planets',
144
- 'litleTxnId'=>'123456789012345678'
145
- }
146
-
147
- Communications.expects(:http_post).with(Not(regexp_matches(/.*amount.*/m)),kind_of(Hash))
148
- XMLObject.expects(:new)
149
-
150
- response = LitleOnlineRequest.new.capture(hash)
151
- end
152
-
153
- def test_force_capture_amount_unset_should_not_be_in_xml
154
- Configuration.any_instance.stubs(:config).returns({'currency_merchant_map'=>{'DEFAULT'=>'1'}, 'user'=>'a','password'=>'b','version'=>'8.10'})
155
- hash={
156
- 'id' => '006',
157
- 'orderId'=>'12344',
158
- 'reportGroup'=>'Planets',
159
- 'orderSource'=>'ecommerce',
160
- 'litleTxnId'=>'123456789012345678'
161
- }
162
-
163
- Communications.expects(:http_post).with(Not(regexp_matches(/.*amount.*/m)),kind_of(Hash))
164
- XMLObject.expects(:new)
165
-
166
- response = LitleOnlineRequest.new.force_capture(hash)
167
- end
168
-
169
- def test_amount_is_not_required_in_echeck_credit
170
- Configuration.any_instance.stubs(:config).returns({'currency_merchant_map'=>{'DEFAULT'=>'1'}, 'user'=>'a','password'=>'b','version'=>'8.10'})
171
- hash={
172
- 'id' => '006',
173
- 'orderId'=>'12344',
174
- 'reportGroup'=>'Planets',
175
- 'orderSource'=>'ecommerce',
176
- 'litleTxnId'=>'123456789012345678',
177
- }
178
-
179
- Communications.expects(:http_post).with(Not(regexp_matches(/.*amount.*/m)),kind_of(Hash))
180
- XMLObject.expects(:new)
181
-
182
- response = LitleOnlineRequest.new.echeck_credit(hash)
183
- end
184
-
185
- def test_amount_is_not_required_in_echeck_sale
186
- Configuration.any_instance.stubs(:config).returns({'currency_merchant_map'=>{'DEFAULT'=>'1'}, 'user'=>'a','password'=>'b','version'=>'8.10'})
187
- hash={
188
- 'id' => '006',
189
- 'orderId'=>'12344',
190
- 'reportGroup'=>'Planets',
191
- 'orderSource'=>'ecommerce',
192
- 'litleTxnId'=>'123456789012345678',
193
- }
194
-
195
- Communications.expects(:http_post).with(Not(regexp_matches(/.*amount.*/m)),kind_of(Hash))
196
- XMLObject.expects(:new)
197
-
198
- response = LitleOnlineRequest.new.echeck_sale(hash)
199
- end
200
-
201
- def test_choice_between_card_token
202
- start_hash = {
203
- 'orderId'=>'12344',
204
- 'merchantId'=>'101',
205
- 'reportGroup'=>'Planets',
206
- 'amount'=>'101',
207
- 'orderSource'=>'ecommerce'
208
- }
209
-
210
- card_only = {
211
- 'card' => {
212
- 'type' => 'VI',
213
- 'number' => '1111222233334444'
214
- }
215
- }
216
-
217
- XMLObject.expects(:new)
218
- Communications.expects(:http_post).with(regexp_matches(/.*card.*/m),kind_of(Hash))
219
- LitleOnlineRequest.new.authorization(start_hash.merge(card_only))
220
- end
221
-
222
- def test_choice_between_card_token2
223
- start_hash = {
224
- 'orderId'=>'12344',
225
- 'merchantId'=>'101',
226
- 'reportGroup'=>'Planets',
227
- 'amount'=>'101',
228
- 'orderSource'=>'ecommerce'
229
- }
230
-
231
- token_only = {
232
- 'token'=> {
233
- 'litleToken' => '1111222233334444'
234
- }
235
- }
236
-
237
- XMLObject.expects(:new)
238
- Communications.expects(:http_post).with(regexp_matches(/.*token.*/m),kind_of(Hash))
239
- LitleOnlineRequest.new.authorization(start_hash.merge(token_only))
240
- end
241
-
242
- def test_set_merchant_sdk
243
- litle = LitleOnlineRequest.new
244
- #Explicit - used for integrations
245
- assert_equal 'ActiveMerchant;3.2', litle.send(:get_merchant_sdk, {'merchantSdk'=>'ActiveMerchant;3.2'})
246
- #Implicit - used raw when nothing is specified
247
- assert_equal 'Ruby;8.19.0', litle.send(:get_merchant_sdk, {'NotMerchantSdk'=>'ActiveMerchant;3.2'})
248
- end
249
-
250
- def test_sale_paypal_order_complete_typo
251
- Configuration.any_instance.stubs(:config).returns({'currency_merchant_map'=>{'DEFAULT'=>'1'}, 'user'=>'a','password'=>'b','version'=>'8.10'})
252
- hash={
253
- 'reportGroup'=>'Planets',
254
- 'id' => '006',
255
- 'orderId'=>'12344',
256
- 'amount'=>'106',
257
- 'orderSource'=>'ecommerce',
258
- 'payPalOrderComplete'=>'true',
259
- 'card'=>{
260
- 'type'=>'VI',
261
- 'number' =>'4100000000000001',
262
- 'expDate' =>'1210'
263
- }}
264
-
265
- Communications.expects(:http_post).with(regexp_matches(/<litleOnlineRequest.*<sale.*<payPalOrderComplete>true<\/payPalOrderComplete>.*/m),kind_of(Hash))
266
- XMLObject.expects(:new)
267
-
268
- response = LitleOnlineRequest.new.sale(hash)
269
- end
270
-
271
- def test_version_matches_sdk_major_and_minor_version_ignoring_config
272
- Configuration.any_instance.stubs(:config).returns({'currency_merchant_map'=>{'DEFAULT'=>'1'}, 'user'=>'a','password'=>'b','version'=>'8.10'})
273
- hash={
274
- 'litleTxnId' => '006'
275
- }
276
-
277
- Communications.expects(:http_post).with(regexp_matches(/<litleOnlineRequest.*version="8\.19".*/m),kind_of(Hash))
278
- XMLObject.expects(:new)
279
-
280
- response = LitleOnlineRequest.new.void(hash)
281
- end
282
-
283
- def test_void_response_contains_recycling
284
- Configuration.any_instance.stubs(:config).returns({'currency_merchant_map'=>{'DEFAULT'=>'1'}, 'user'=>'a','password'=>'b','version'=>'8.10'})
285
- hash={
286
- 'litleTxnId' => '123'
287
- }
288
-
289
- Communications.expects(:http_post).with(kind_of(String),kind_of(Hash)).returns('<litleOnlineResponse><voidResponse><recycling><creditLitleTxnId>65</creditLitleTxnId></recycling></voidResponse></litleOnlineResponse>')
290
-
291
- response = LitleOnlineRequest.new.void(hash)
292
- assert_equal '65', response.voidResponse.recycling.creditLitleTxnId
293
- end
294
-
295
- end
296
- end
@@ -1,390 +0,0 @@
1
- =begin
2
- Copyright (c) 2012 Litle & Co.
3
-
4
- Permission is hereby granted, free of charge, to any person
5
- obtaining a copy of this software and associated documentation
6
- files (the "Software"), to deal in the Software without
7
- restriction, including without limitation the rights to use,
8
- copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the
10
- Software is furnished to do so, subject to the following
11
- conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
18
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
- OTHER DEALINGS IN THE SOFTWARE.
24
- =end
25
- require 'lib/LitleOnline'
26
- require 'test/unit'
27
- require 'mocha/setup'
28
-
29
- module LitleOnline
30
- class TestSale < Test::Unit::TestCase
31
-
32
- def test_both_choices_fraud_check_and_card_holder
33
- hash = {
34
- 'merchantId' => '101',
35
- 'version'=>'8.8',
36
- 'reportGroup'=>'Planets',
37
- 'litleTxnId'=>'123456',
38
- 'orderId'=>'12344',
39
- 'amount'=>'106',
40
- 'orderSource'=>'ecommerce',
41
- 'fraudCheck'=>{'authenticationTransactionId'=>'123'},
42
- 'cardholderAuthentication'=>{'authenticationTransactionId'=>'123'},
43
- 'card'=>{
44
- 'type'=>'VI',
45
- 'number' =>'4100000000000002',
46
- 'expDate' =>'1210'
47
- }}
48
-
49
- exception = assert_raise(RuntimeError){LitleOnlineRequest.new.sale(hash)}
50
- assert_match /Entered an Invalid Amount of Choices for a Field, please only fill out one Choice!!!!/, exception.message
51
- end
52
-
53
- def test_both_choices_card_and_paypal
54
- hash = {
55
- 'merchantId' => '101',
56
- 'version'=>'8.8',
57
- 'reportGroup'=>'Planets',
58
- 'litleTxnId'=>'123456',
59
- 'orderId'=>'12344',
60
- 'amount'=>'106',
61
- 'orderSource'=>'ecommerce',
62
- 'fraudCheck'=>{'authenticationTransactionId'=>'123'},
63
- 'cardholderAuthentication'=>{'authenticationTransactionId'=>'123'},
64
- 'card'=>{
65
- 'type'=>'VI',
66
- 'number' =>'4100000000000002',
67
- 'expDate' =>'1210'
68
- },
69
- 'paypal'=>{
70
- 'payerId'=>'1234',
71
- 'token'=>'1234',
72
- 'transactionId'=>'123456'
73
- }}
74
-
75
- exception = assert_raise(RuntimeError){LitleOnlineRequest.new.sale(hash)}
76
- assert_match /Entered an Invalid Amount of Choices for a Field, please only fill out one Choice!!!!/, exception.message
77
- end
78
-
79
- def test_both_choices_card_and_token
80
- hash = {
81
- 'merchantId' => '101',
82
- 'version'=>'8.8',
83
- 'reportGroup'=>'Planets',
84
- 'litleTxnId'=>'123456',
85
- 'orderId'=>'12344',
86
- 'amount'=>'106',
87
- 'orderSource'=>'ecommerce',
88
- 'fraudCheck'=>{'authenticationTransactionId'=>'123'},
89
- 'cardholderAuthentication'=>{'authenticationTransactionId'=>'123'},
90
- 'card'=>{
91
- 'type'=>'VI',
92
- 'number' =>'4100000000000002',
93
- 'expDate' =>'1210'
94
- },
95
- 'token'=> {
96
- 'litleToken'=>'1234567890123',
97
- 'expDate'=>'1210',
98
- 'cardValidationNum'=>'555',
99
- 'type'=>'VI'
100
- }}
101
-
102
- exception = assert_raise(RuntimeError){LitleOnlineRequest.new.sale(hash)}
103
- assert_match /Entered an Invalid Amount of Choices for a Field, please only fill out one Choice!!!!/, exception.message
104
- end
105
-
106
- def test_both_choices_card_and_paypage
107
- hash = {
108
- 'merchantId' => '101',
109
- 'version'=>'8.8',
110
- 'reportGroup'=>'Planets',
111
- 'litleTxnId'=>'123456',
112
- 'orderId'=>'12344',
113
- 'amount'=>'106',
114
- 'orderSource'=>'ecommerce',
115
- 'fraudCheck'=>{'authenticationTransactionId'=>'123'},
116
- 'cardholderAuthentication'=>{'authenticationTransactionId'=>'123'},
117
- 'card'=>{
118
- 'type'=>'VI',
119
- 'number' =>'4100000000000002',
120
- 'expDate' =>'1210'
121
- },
122
- 'paypage'=> {
123
- 'paypageRegistrationId'=>'1234',
124
- 'expDate'=>'1210',
125
- 'cardValidationNum'=>'555',
126
- 'type'=>'VI'
127
- }}
128
-
129
- exception = assert_raise(RuntimeError){LitleOnlineRequest.new.sale(hash)}
130
- assert_match /Entered an Invalid Amount of Choices for a Field, please only fill out one Choice!!!!/, exception.message
131
- end
132
-
133
- def test_three_choices_card_and_paypage_and_paypal
134
- hash = {
135
- 'merchantId' => '101',
136
- 'version'=>'8.8',
137
- 'reportGroup'=>'Planets',
138
- 'litleTxnId'=>'123456',
139
- 'orderId'=>'12344',
140
- 'amount'=>'106',
141
- 'orderSource'=>'ecommerce',
142
- 'fraudCheck'=>{'authenticationTransactionId'=>'123'},
143
- 'cardholderAuthentication'=>{'authenticationTransactionId'=>'123'},
144
- 'card'=>{
145
- 'type'=>'VI',
146
- 'number' =>'4100000000000002',
147
- 'expDate' =>'1210'
148
- },
149
- 'paypage'=> {
150
- 'paypageRegistrationId'=>'1234',
151
- 'expDate'=>'1210',
152
- 'cardValidationNum'=>'555',
153
- 'type'=>'VI'},
154
- 'paypal'=>{
155
- 'payerId'=>'1234',
156
- 'token'=>'1234',
157
- 'transactionId'=>'123456'
158
- }}
159
-
160
- exception = assert_raise(RuntimeError){LitleOnlineRequest.new.sale(hash)}
161
- assert_match /Entered an Invalid Amount of Choices for a Field, please only fill out one Choice!!!!/, exception.message
162
- end
163
-
164
- def test_all_choices_card_and_paypage_and_paypal_and_token
165
- hash = {
166
- 'merchantId' => '101',
167
- 'version'=>'8.8',
168
- 'reportGroup'=>'Planets',
169
- 'litleTxnId'=>'123456',
170
- 'orderId'=>'12344',
171
- 'amount'=>'106',
172
- 'orderSource'=>'ecommerce',
173
- 'fraudCheck'=>{'authenticationTransactionId'=>'123'},
174
- 'cardholderAuthentication'=>{'authenticationTransactionId'=>'123'},
175
- 'card'=>{
176
- 'type'=>'VI',
177
- 'number' =>'4100000000000002',
178
- 'expDate' =>'1210'
179
- },
180
- 'paypage'=> {
181
- 'paypageRegistrationId'=>'1234',
182
- 'expDate'=>'1210',
183
- 'cardValidationNum'=>'555',
184
- 'type'=>'VI'},
185
- 'paypal'=>{
186
- 'payerId'=>'1234',
187
- 'token'=>'1234',
188
- 'transactionId'=>'123456'},
189
- 'token'=> {
190
- 'litleToken'=>'1234567890123',
191
- 'expDate'=>'1210',
192
- 'cardValidationNum'=>'555',
193
- 'type'=>'VI'
194
- }}
195
- exception = assert_raise(RuntimeError){LitleOnlineRequest.new.sale(hash)}
196
- assert_match /Entered an Invalid Amount of Choices for a Field, please only fill out one Choice!!!!/, exception.message
197
- end
198
-
199
- def test_merchant_data_sale
200
- hash = {
201
- 'merchantId' => '101',
202
- 'version'=>'8.12',
203
- 'orderId'=>'1',
204
- 'amount'=>'0',
205
- 'orderSource'=>'ecommerce',
206
- 'reportGroup'=>'Planets',
207
- 'merchantData'=> {
208
- 'affiliate'=>'bar'
209
- }
210
- }
211
-
212
- XMLObject.expects(:new)
213
- Communications.expects(:http_post).with(regexp_matches(/.*<merchantData>.*?<affiliate>bar<\/affiliate>.*?<\/merchantData>.*/m),kind_of(Hash))
214
- LitleOnlineRequest.new.sale(hash)
215
- end
216
-
217
- def test_invalid_embedded_field_values
218
- #becasue there are sub fields under fraud check that are not specified
219
- hash = {
220
- 'merchantId' => '101',
221
- 'version'=>'8.8',
222
- 'reportGroup'=>'Planets',
223
- 'litleTxnId'=>'123456',
224
- 'orderId'=>'12344',
225
- 'amount'=>'106',
226
- 'orderSource'=>'ecommerce',
227
- 'fraudCheck'=>'one',
228
- 'cardholderAuthentication'=>'two',
229
- 'card'=>{
230
- 'type'=>'VI',
231
- 'number' =>'4100000000000000',
232
- }}
233
- exception = assert_raise(RuntimeError){LitleOnlineRequest.new.sale(hash)}
234
- assert_match /Entered an Invalid Amount of Choices for a Field, please only fill out one Choice!!!!/, exception.message
235
- end
236
-
237
- def test_fraud_filter_override
238
- hash = {
239
- 'merchantId' => '101',
240
- 'version'=>'8.12',
241
- 'orderId'=>'1',
242
- 'amount'=>'0',
243
- 'orderSource'=>'ecommerce',
244
- 'reportGroup'=>'Planets',
245
- 'fraudFilterOverride'=> 'false'
246
- }
247
-
248
- XMLObject.expects(:new)
249
- Communications.expects(:http_post).with(regexp_matches(/.*<sale.*?<fraudFilterOverride>false<\/fraudFilterOverride>.*?<\/sale>.*/m),kind_of(Hash))
250
- LitleOnlineRequest.new.sale(hash)
251
- end
252
-
253
- def test_illegal_card_type
254
- hash = {
255
- 'merchantId' => '101',
256
- 'version'=>'8.8',
257
- 'reportGroup'=>'Planets',
258
- 'litleTxnId'=>'123456',
259
- 'orderId'=>'12344',
260
- 'amount'=>'106',
261
- 'orderSource'=>'ecommerce',
262
- 'card'=>{
263
- 'type'=>'NO',
264
- 'number' =>'4100000000000002',
265
- 'expDate' =>'1210'
266
- }}
267
- exception = assert_raise(RuntimeError){LitleOnlineRequest.new.sale(hash)}
268
- assert_match /If card type is specified, it must be in /, exception.message
269
- end
270
-
271
- def test_logged_in_user
272
- hash = {
273
- 'loggedInUser' => 'gdake',
274
- 'merchantSdk' => 'Ruby;8.14.0',
275
- 'merchantId' => '101',
276
- 'version'=>'8.8',
277
- 'reportGroup'=>'Planets',
278
- 'litleTxnId'=>'123456',
279
- 'orderId'=>'12344',
280
- 'amount'=>'106',
281
- 'orderSource'=>'ecommerce',
282
- 'card'=>{
283
- 'type'=>'VI',
284
- 'number' =>'4100000000000002',
285
- 'expDate' =>'1210'
286
- }}
287
-
288
- LitleXmlMapper.expects(:request).with(regexp_matches(/.*(loggedInUser="gdake".*merchantSdk="Ruby;8.14.0")|(merchantSdk="Ruby;8.14.0".*loggedInUser="gdake").*/m), is_a(Hash))
289
- LitleOnlineRequest.new.sale(hash)
290
- end
291
-
292
- def test_surcharge_amount
293
- hash = {
294
- 'orderId' => '12344',
295
- 'amount' => '2',
296
- 'surchargeAmount' => '1',
297
- 'orderSource' => 'ecommerce',
298
- 'reportGroup' => 'Planets'
299
- }
300
- LitleXmlMapper.expects(:request).with(regexp_matches(/.*<amount>2<\/amount><surchargeAmount>1<\/surchargeAmount><orderSource>ecommerce<\/orderSource>.*/m), is_a(Hash))
301
- LitleOnlineRequest.new.sale(hash)
302
- end
303
-
304
- def test_surcharge_amount_optional
305
- hash = {
306
- 'orderId' => '12344',
307
- 'amount' => '2',
308
- 'orderSource' => 'ecommerce',
309
- 'reportGroup' => 'Planets'
310
- }
311
- LitleXmlMapper.expects(:request).with(regexp_matches(/.*<amount>2<\/amount><orderSource>ecommerce<\/orderSource>.*/m), is_a(Hash))
312
- LitleOnlineRequest.new.sale(hash)
313
- end
314
-
315
- def test_recurringRequest
316
- hash = {
317
- 'card'=>{
318
- 'type'=>'VI',
319
- 'number'=>'4100000000000001',
320
- 'expDate'=>'1213',
321
- },
322
- 'orderId'=>'12344',
323
- 'amount'=>'2',
324
- 'orderSource'=>'ecommerce',
325
- 'fraudFilterOverride'=>'true',
326
- 'recurringRequest'=>{
327
- 'subscription'=>{
328
- 'planCode'=>'abc123',
329
- 'numberOfPaymentsRemaining'=>'12'
330
- }
331
- }
332
- }
333
- LitleXmlMapper.expects(:request).with(regexp_matches(/.*<fraudFilterOverride>true<\/fraudFilterOverride><recurringRequest><subscription><planCode>abc123<\/planCode><numberOfPaymentsRemaining>12<\/numberOfPaymentsRemaining><\/subscription><\/recurringRequest>.*/m), is_a(Hash))
334
- LitleOnlineRequest.new.sale(hash)
335
- end
336
-
337
- def test_recurringRequest_optional
338
- hash = {
339
- 'card'=>{
340
- 'type'=>'VI',
341
- 'number'=>'4100000000000001',
342
- 'expDate'=>'1213',
343
- },
344
- 'orderId'=>'12344',
345
- 'amount'=>'2',
346
- 'orderSource'=>'ecommerce',
347
- 'fraudFilterOverride'=>'true',
348
- }
349
- LitleXmlMapper.expects(:request).with(regexp_matches(/.*<fraudFilterOverride>true<\/fraudFilterOverride><\/sale>.*/m), is_a(Hash))
350
- LitleOnlineRequest.new.sale(hash)
351
- end
352
-
353
- def test_litleInternalRecurringRequest
354
- hash = {
355
- 'card'=>{
356
- 'type'=>'VI',
357
- 'number'=>'4100000000000001',
358
- 'expDate'=>'1213',
359
- },
360
- 'orderId'=>'12344',
361
- 'amount'=>'2',
362
- 'orderSource'=>'ecommerce',
363
- 'fraudFilterOverride'=>'true',
364
- 'litleInternalRecurringRequest'=>{
365
- 'subscriptionId'=>'1234567890123456789',
366
- 'recurringTxnId'=>'1234567890123456789',
367
- },
368
- }
369
- LitleXmlMapper.expects(:request).with(regexp_matches(/.*<fraudFilterOverride>true<\/fraudFilterOverride><litleInternalRecurringRequest><subscriptionId>1234567890123456789<\/subscriptionId><recurringTxnId>1234567890123456789<\/recurringTxnId><\/litleInternalRecurringRequest>.*/m), is_a(Hash))
370
- LitleOnlineRequest.new.sale(hash)
371
- end
372
-
373
- def test_litleInternalRecurringRequest_optional
374
- hash = {
375
- 'card'=>{
376
- 'type'=>'VI',
377
- 'number'=>'4100000000000001',
378
- 'expDate'=>'1213',
379
- },
380
- 'orderId'=>'12344',
381
- 'amount'=>'2',
382
- 'orderSource'=>'ecommerce',
383
- 'fraudFilterOverride'=>'true',
384
- }
385
- LitleXmlMapper.expects(:request).with(regexp_matches(/.*<fraudFilterOverride>true<\/fraudFilterOverride><\/sale>.*/m), is_a(Hash))
386
- LitleOnlineRequest.new.sale(hash)
387
- end
388
-
389
- end
390
- end