paytrace 0.1.23 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/lib/paytrace/address.rb +2 -0
  3. data/lib/paytrace/api/gateway.rb +19 -4
  4. data/lib/paytrace/api/request.rb +72 -28
  5. data/lib/paytrace/api/response.rb +19 -11
  6. data/lib/paytrace/batch_operations.rb +8 -30
  7. data/lib/paytrace/check_transaction.rb +119 -84
  8. data/lib/paytrace/configuration.rb +2 -0
  9. data/lib/paytrace/customer.rb +95 -97
  10. data/lib/paytrace/debug.rb +36 -0
  11. data/lib/paytrace/email_receipt_request.rb +4 -28
  12. data/lib/paytrace/recurring_transaction.rb +20 -67
  13. data/lib/paytrace/transaction.rb +680 -267
  14. data/lib/paytrace/version.rb +1 -1
  15. data/lib/paytrace.rb +0 -4
  16. data/paytrace.gemspec +1 -0
  17. data/run_all_integrations.sh +15 -0
  18. data/test/paytrace/api/gateway_spec.rb +8 -0
  19. data/test/paytrace/api/request_spec.rb +84 -28
  20. data/test/paytrace/api/response_spec.rb +2 -2
  21. data/test/paytrace/batch_operations_spec.rb +5 -5
  22. data/test/paytrace/{check_transactions_spec.rb → check_transaction_spec.rb} +40 -19
  23. data/test/paytrace/customer_spec.rb +86 -110
  24. data/test/paytrace/email_receipt_request_spec.rb +9 -8
  25. data/test/paytrace/level3_data_spec.rb +28 -2
  26. data/test/paytrace/recurring_transaction_spec.rb +8 -16
  27. data/test/paytrace/transaction_spec.rb +300 -330
  28. data/test/scripts/run_adjust_amount.rb +1 -1
  29. data/test/scripts/run_attach_signature.rb +2 -2
  30. data/test/scripts/run_calculate_shipping_costs.rb +2 -3
  31. data/test/scripts/run_change_password.rb +2 -0
  32. data/test/scripts/run_check_transactions.rb +2 -3
  33. data/test/scripts/run_create_customer.rb +16 -23
  34. data/test/scripts/run_email_request.rb +3 -5
  35. data/test/scripts/run_export_batches.rb +6 -3
  36. data/test/scripts/run_export_customers.rb +1 -1
  37. data/test/scripts/run_export_transactions.rb +2 -2
  38. data/test/scripts/run_level3_data.rb +1 -1
  39. data/test/scripts/run_recur_payments_integration.rb +24 -32
  40. data/test/scripts/run_settle_transaction.rb +2 -2
  41. data/test/test_helper.rb +12 -1
  42. metadata +19 -7
  43. data/lib/paytrace/credit_card.rb +0 -32
  44. data/test/paytrace/credit_card_spec.rb +0 -26
@@ -1,51 +1,83 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '../../test_helper.rb')
2
2
 
3
3
  describe PayTrace::Transaction do
4
- def base_url
5
- "UN~#{PayTrace.configuration.user_name}|PSWD~#{PayTrace.configuration.password}|TERMS~Y|"
6
- end
7
-
8
4
  before do
9
5
  PayTrace::API::Gateway.debug = true
10
6
  PayTrace::API::Gateway.reset_trace()
11
7
  PayTrace::API::Gateway.next_response = "RESPONSE~ok|"
12
8
  end
13
9
 
14
- it "exports transaction(s)" do
15
- PayTrace::API::Gateway.next_response = "TRANSACTIONRECORD~TRANXID=1143"
16
- records = PayTrace::Transaction.export({transaction_id: 1143})
17
- records.must_be_instance_of Array
18
- records.count.must_equal 1
19
- records[0].must_be_instance_of Hash
20
- records[0]["TRANXID"].must_equal "1143"
10
+ describe "export transactions" do
11
+ it "exports transaction(s)" do
12
+ PayTrace::API::Gateway.next_response = "TRANSACTIONRECORD~TRANXID=1143"
13
+ records = PayTrace::Transaction.export_by_id({transaction_id: 1143})
14
+ records.must_be_instance_of Array
15
+ records.count.must_equal 1
16
+ records[0].must_be_instance_of Hash
17
+ records[0]["TRANXID"].must_equal "1143"
18
+
19
+ assert_last_request_equals "METHOD~ExportTranx|TRANXID~1143|"
20
+ end
21
+
22
+ it "it can export transactions by date range" do
23
+ PayTrace::API::Gateway.next_response = "TRANSACTIONRECORD~TRANXID=1144|TRANSACTIONRECORD~TRANXID=1145|"
24
+
25
+ params = {
26
+ start_date: '01/02/2013',
27
+ end_date: '01/03/2014',
28
+ transaction_type: 'SETTLED',
29
+ customer_id: 1234,
30
+ transaction_user: 'DDuck',
31
+ return_bin: 'Y',
32
+ search_text: 'search text'
33
+ }
34
+
35
+ records = PayTrace::Transaction.export_by_date_range(params)
36
+ records.must_be_instance_of Array
37
+ records.count.must_equal 2
38
+ records[0].must_be_instance_of Hash
39
+ records[0]["TRANXID"].must_equal "1144"
40
+
41
+ assert_last_request_equals "METHOD~ExportTranx|SDATE~01/02/2013|EDATE~01/03/2014|TRANXTYPE~SETTLED|CUSTID~1234|USER~DDuck|RETURNBIN~Y|SEARCHTEXT~search text|"
42
+ end
21
43
  end
22
44
 
23
- it "successfully attaches base-64 encoded signatures to transactions" do
45
+ describe "settle transactions" do
46
+ it "can settle transactions" do
47
+ PayTrace::Transaction.settle_transactions()
48
+
49
+ assert_last_request_equals "METHOD~SettleTranx|"
50
+ end
51
+ end
52
+
53
+ it "successfully attaches image files to transactions as signatures" do
24
54
  PayTrace::API::Gateway.next_response = "RESPONSE~172. The signature image was successfully attached to Transaction ID 13192003.|"
25
- result = PayTrace::Transaction.attach_signature({transaction_id: 13192003, image_data: "foo", image_type: "png"})
55
+ result = PayTrace::Transaction.attach_signature_file({transaction_id: 13192003, image_file: __FILE__, image_type: "png"})
26
56
  result.has_errors?.must_equal false
27
57
  end
28
58
 
29
- it "successfully attaches image files to transactions" do
59
+ it "successfully attaches image data to transactions as signatures" do
30
60
  PayTrace::API::Gateway.next_response = "RESPONSE~172. The signature image was successfully attached to Transaction ID 13192003.|"
31
- result = PayTrace::Transaction.attach_signature({transaction_id: 13192003, image_file: __FILE__, image_type: "png"})
61
+ result = PayTrace::Transaction.attach_signature_data({transaction_id: 13192003, image_data: "fakebase64data", image_type: "png"})
32
62
  result.has_errors?.must_equal false
63
+
64
+ assert_last_request_equals "METHOD~AttachSignature|TRANXID~13192003|IMAGEDATA~fakebase64data|IMAGETYPE~png"
33
65
  end
34
66
 
35
67
  it "calculates shipping costs" do
36
68
  PayTrace::API::Gateway.next_response = "SHIPPINGRECORD~SHIPPINGCOMPANY=USPS+SHIPPINGMETHOD=STANDARD POST+SHIPPINGRATE=12.72|"
37
69
  params = {
38
- #UN, PSWD, TERMS, METHOD, SOURCEZIP, SOURCESTATE, SZIP, WEIGHT, SHIPPERS, SSTATE
39
70
  source_zip: 98133,
40
71
  source_state: "WA",
41
72
  shipping_postal_code: 94947,
42
73
  shipping_weight: 5.1,
43
74
  shippers: "UPS,USPS,FEDEX",
44
- shipping_state: "CA",
45
- shipping_country: "US"
75
+ shipping_state: "CA"
46
76
  }
47
77
  result = PayTrace::Transaction.calculate_shipping(params)
48
78
  result[0]['SHIPPINGCOMPANY'].must_equal "USPS"
79
+
80
+ assert_last_request_equals "METHOD~CalculateShipping|SOURCEZIP~98133|SOURCESTATE~WA|SZIP~94947|WEIGHT~5.1|SHIPPERS~UPS,USPS,FEDEX|SSTATE~CA|"
49
81
  end
50
82
 
51
83
  it "can adjust a transaction" do
@@ -55,370 +87,308 @@ describe PayTrace::Transaction do
55
87
  amount: 9.87
56
88
  }
57
89
  result = PayTrace::Transaction.adjust_amount(params)
58
- PayTrace::API::Gateway.last_request.must_equal base_url + "METHOD~AdjustAmount|TRANXID~1234|AMOUNT~9.87|"
90
+ assert_last_request_equals "METHOD~AdjustAmount|TRANXID~1234|AMOUNT~9.87|"
59
91
  end
60
92
 
61
93
  describe "create sales transactions" do
62
- it "can create a Payment Authorization" do
63
- t = PayTrace::Transaction.authorization(
64
- { amount:"1242.32",
65
- credit_card: {
66
- card_number:"1234123412341234",
67
- expiration_month:10,
68
- expiration_year:24
69
- }
70
- }
71
- )
94
+ it "can create a payment authorization for a keyed credit card" do
95
+ PayTrace::Transaction.keyed_authorization({
96
+ amount:"1242.32",
97
+ card_number:"1234123412341234",
98
+ expiration_month:10,
99
+ expiration_year:24
100
+ })
101
+
102
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~Authorization|AMOUNT~1242.32|CC~1234123412341234|EXPMNTH~10|EXPYR~24|"
103
+ end
72
104
 
105
+ it "can create a payment authorization based upon a customer ID" do
106
+ PayTrace::Transaction.customer_id_authorization({
107
+ amount:"1242.32",
108
+ customer_id: 1234
109
+ })
73
110
 
74
- #Transaction is properly configured
75
- t.amount.must_equal "1242.32"
76
- t.type.must_equal PayTrace::TransactionTypes::Authorization
111
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~Authorization|AMOUNT~1242.32|CUSTID~1234|"
112
+ end
113
+
114
+ it "can charge sales to a swiped credit card" do
115
+ PayTrace::Transaction.swiped_sale({
116
+ amount: "1242.32",
117
+ swipe: "this is fake swipe data"
118
+ })
77
119
 
78
- #Sets up a card
79
- t.credit_card.card_number.must_equal "1234123412341234"
80
- t.credit_card.expiration_month.must_equal 10
81
- t.credit_card.expiration_year.must_equal 24
120
+ assert_last_request_equals "METHOD~PROCESSTRANX|AMOUNT~1242.32|TRANXTYPE~SALE|SWIPE~this is fake swipe data|"
82
121
  end
83
122
 
84
- it "can charge sales to a credit card" do
85
- t = PayTrace::Transaction.sale(
86
- {amount: "1242.32",
87
- credit_card: {
88
- card_number: "1234123412341234",
89
- expiration_month: 10,
90
- expiration_year: 24
91
- }
92
- })
93
-
94
- #Transaction is properly configured
95
- t.amount.must_equal "1242.32"
96
- t.type.must_equal PayTrace::TransactionTypes::SALE
97
-
98
- #Sets up a card
99
- t.credit_card.card_number.must_equal "1234123412341234"
100
- t.credit_card.expiration_month.must_equal 10
101
- t.credit_card.expiration_year.must_equal 24
123
+ it "can charge sales to a keyed credit card" do
124
+ PayTrace::Transaction.keyed_sale({
125
+ amount: "1242.32",
126
+ card_number: "1234123412341234",
127
+ expiration_month: 10,
128
+ expiration_year: 24
129
+ })
130
+
131
+ assert_last_request_equals "METHOD~PROCESSTRANX|AMOUNT~1242.32|TRANXTYPE~SALE|CC~1234123412341234|EXPMNTH~10|EXPYR~24|"
102
132
  end
103
133
 
104
134
  it "can run a transaction for a customer" do
105
- t = PayTrace::Transaction.sale(
135
+ PayTrace::Transaction.customer_id_sale(
106
136
  {amount: "1.00",
107
- customer: 123456}
137
+ customer_id: 123456}
108
138
  )
109
139
 
110
- t.amount.must_equal "1.00"
111
- t.type.must_equal PayTrace::TransactionTypes::SALE
112
- t.customer.must_equal 123456
113
- t.credit_card.must_be_nil
140
+ assert_last_request_equals "METHOD~PROCESSTRANX|AMOUNT~1.00|TRANXTYPE~SALE|CUSTID~123456|"
114
141
  end
142
+ end
115
143
 
116
- it "can run a cash advance" do
117
-
144
+ describe "cash advance" do
145
+ it "can perform a cash advance for swiped credit card data" do
118
146
  args = {
119
147
  amount:"1.00",
120
148
  cc_last_4:"1234",
121
149
  id_number:"12345",
122
150
  id_expiration:"12/29/2020",
123
- billing_address: {
124
- street: "1234 happy lane",
125
- street2: "apt #1",
126
- city: "Seattle",
127
- state: "WA",
128
- postal_code:"98107",
129
- country:"US"
130
- },
131
- credit_card: {
132
- swipe:'%B5454545454545454^J/SCOTT^2612101001020001000000701000000?;5454545454545454=26121010010270100001?'
151
+ billing_name: "John Doe",
152
+ billing_address: "1234 happy lane",
153
+ billing_address2: "apt #1",
154
+ billing_city: "Seattle",
155
+ billing_state: "WA",
156
+ billing_postal_code:"98107",
157
+ billing_country:"US",
158
+ swipe:'%B5454545454545454^J/SCOTT^2612101001020001000000701000000?;5454545454545454=26121010010270100001?'
133
159
  }
134
- }
135
- t = PayTrace::Transaction.cash_advance(args)
136
-
137
- t.amount.must_equal "1.00"
138
- t.type.must_equal PayTrace::TransactionTypes::SALE
139
- t.credit_card.swipe.must_equal '%B5454545454545454^J/SCOTT^2612101001020001000000701000000?;5454545454545454=26121010010270100001?'
140
- t.optional_fields[:cc_last_4].must_equal "1234"
141
- t.optional_fields[:id_expiration].must_equal "12/29/2020"
142
- t.optional_fields[:id_number].must_equal "12345"
143
-
144
- t.billing_address.street.must_equal "1234 happy lane"
145
- t.response.must_equal @response
146
-
160
+
161
+ PayTrace::Transaction.swiped_cash_advance(args)
162
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~SALE|AMOUNT~1.00|LAST4~1234|PHOTOID~12345|IDEXP~12/29/2020|CASHADVANCE~Y|BNAME~John Doe|BADDRESS~1234 happy lane|BADDRESS2~apt #1|BCITY~Seattle|BSTATE~WA|BZIP~98107|BCOUNTRY~US|SWIPE~%B5454545454545454^J/SCOTT^2612101001020001000000701000000?;5454545454545454=26121010010270100001?"
147
163
  end
148
164
 
149
-
150
- end
151
- describe "adding address info" do
152
- it "can take a shipping address" do
153
- t = PayTrace::Transaction.new({
154
- optional:{
155
- shipping_address: {
156
- name: "Bob Smith",
157
- street: "1234 happy lane",
158
- street2: "suit 234",
159
- city:"Seattle",
160
- state:"WA",
161
- country:"USA",
162
- postal_code:"98107"
163
- }
164
- }
165
- })
166
- s = t.shipping_address
167
- s.name.must_equal "Bob Smith"
168
- s.street.must_equal "1234 happy lane"
169
- s.street2.must_equal "suit 234"
170
- s.city.must_equal "Seattle"
171
- s.state.must_equal "WA"
172
- s.country.must_equal "USA"
173
- s.postal_code.must_equal "98107"
174
-
175
- end
176
- it "can take a billing address" do
177
- t = PayTrace::Transaction.new({
178
- optional: {
179
- billing_address: {
180
- street: "1234 happy lane",
181
- street2: "suit 234",
182
- city:"Seattle",
183
- state:"WA",
184
- country:"USA",
185
- postal_code:"98107"
186
- }
187
- }
188
- })
189
- b = t.billing_address
190
- b.street.must_equal "1234 happy lane"
191
- b.street2.must_equal "suit 234"
192
- b.city.must_equal "Seattle"
193
- b.state.must_equal "WA"
194
- b.country.must_equal "USA"
195
- b.postal_code.must_equal "98107"
165
+ it "can perform a cash advance for keyed-in credit card data" do
166
+ args = {
167
+ amount:"1.00",
168
+ cc_last_4:"1234",
169
+ id_number:"12345",
170
+ id_expiration:"12/29/2020",
171
+ billing_name: "John Doe",
172
+ billing_address: "1234 happy lane",
173
+ billing_address2: "apt #1",
174
+ billing_city: "Seattle",
175
+ billing_state: "WA",
176
+ billing_postal_code:"98107",
177
+ billing_country:"US",
178
+ card_number: 1234123412341234,
179
+ expiration_month: 10,
180
+ expiration_year: 24
181
+ }
182
+
183
+ PayTrace::Transaction.keyed_cash_advance(args)
184
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~SALE|AMOUNT~1.00|LAST4~1234|PHOTOID~12345|IDEXP~12/29/2020|CASHADVANCE~Y|BNAME~John Doe|BADDRESS~1234 happy lane|BADDRESS2~apt #1|BCITY~Seattle|BSTATE~WA|BZIP~98107|BCOUNTRY~US|CC~1234123412341234|EXPMNTH~10|EXPYR~24|"
196
185
  end
197
186
  end
198
187
 
199
- it "can be set to void a transaction" do
200
- t = PayTrace::Transaction.new({optional:{transaction_id:"11"}})
201
- end
188
+ describe "store and forward transactions" do
189
+ it "can perform a store and forward transaction for swiped credit card data" do
190
+ params = {amount: 19.97, swipe: 'this is fake swipe data'}
191
+ PayTrace::Transaction.swiped_store_forward(params)
202
192
 
203
- it "can create and send a void transaction" do
204
- @response = mock()
205
- PayTrace::API::Gateway.any_instance.expects(:send_request).returns(@response)
206
-
207
- t = PayTrace::Transaction.void("111")
208
- t.optional_fields[:transaction_id].must_equal "111"
209
- t.type.must_equal PayTrace::TransactionTypes::Void
210
- end
193
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~Str/FWD|AMOUNT~19.97|SWIPE~this is fake swipe data|"
194
+ end
211
195
 
212
- it "can create a forced sale" do
213
- t = PayTrace::Transaction.forced_sale("111",{})
214
-
215
- t.optional_fields[:approval_code].must_equal "111"
216
- t.type.must_equal PayTrace::TransactionTypes::ForcedSale
217
- end
196
+ it "can perform a store and forward transaction for keyed-in credit card data" do
197
+ params = {amount: 19.96, card_number: 1234123412341234, expiration_month: 10, expiration_year: 24}
198
+ PayTrace::Transaction.keyed_store_forward(params)
218
199
 
200
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~Str/FWD|AMOUNT~19.96|CC~1234123412341234|EXPMNTH~10|EXPYR~24|"
201
+ end
219
202
 
220
- it "can add a transaction to its param list" do
221
- t = PayTrace::Transaction.new({amount: "23.12",
222
- credit_card: PayTrace::CreditCard.new({
223
- card_number: "1234123412341234",
224
- expiration_year: 24,
225
- expiration_month: 10 }),
226
- type: PayTrace::TransactionTypes::SALE})
227
- r = PayTrace::API::Request.new
228
- t.set_request(r)
229
-
230
- r.params[:card_number].must_equal ["1234123412341234"]
231
- r.params[:expiration_month].must_equal [10]
232
- r.params[:expiration_year].must_equal [24]
233
- r.params[:transaction_type].must_equal ["SALE"]
234
- r.params[:method].must_equal ["PROCESSTRANX"]
235
- r.params[:amount].must_equal ["23.12"]
236
-
237
- url = r.to_parms_string
238
- url.must_equal "UN~#{PayTrace.configuration.user_name}|PSWD~#{PayTrace.configuration.password}|TERMS~Y|CC~1234123412341234|EXPMNTH~10|EXPYR~24|TRANXTYPE~SALE|METHOD~PROCESSTRANX|AMOUNT~23.12|"
239
- end
203
+ it "can perform a store and forward transaction referencing a customer id" do
204
+ params = {amount: 19.96, customer_id: 1234}
205
+ PayTrace::Transaction.customer_id_store_forward(params)
240
206
 
241
- it "can use a customer id for processing the transaction" do
242
- t = PayTrace::Transaction.new({amount: "12.34",
243
- customer: 1234,
244
- type: PayTrace::TransactionTypes::SALE
245
- }
246
- )
247
- r = PayTrace::API::Request.new
248
- t.set_request(r)
249
-
250
- r.params[:customer_id].must_equal [1234]
251
- r.params[:amount].must_equal ["12.34"]
252
-
253
- url = r.to_parms_string
254
-
255
- #Make sure it puts in values we expect
256
- url.must_match /\|CUSTID~1234\|/
257
- url.must_match /\|AMOUNT~12.34\|/
258
- url.must_match /\|METHOD~PROCESSTRANX\|/
259
- url.must_match /\|TRANXTYPE~SALE\|/
260
- end
207
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~Str/FWD|AMOUNT~19.96|CUSTID~1234|"
208
+ end
261
209
 
262
- it "can include a billing address" do
263
- t = PayTrace::Transaction.new({
264
- optional:{
265
- billing_address:{
266
- name:"John Doe",
267
- street:"1234 happy lane",
268
- street2:"apt#2",
269
- city:"Seattle",
270
- state:"WA",
271
- country: "US",
272
- postal_code:"98107"
273
- }
274
- }
275
- })
276
-
277
- t.shipping_address.must_be_nil
278
-
279
- r = PayTrace::API::Request.new
280
- t.set_request(r)
281
-
282
- url = r.to_parms_string
283
-
284
- #Make sure it puts in values we expect
285
- url.must_match /\|BNAME~John Doe\|/
286
- url.must_match /\|BADDRESS~1234 happy lane\|/
287
- url.must_match /\|BADDRESS2~apt#2\|/
288
- url.must_match /\|BCITY~Seattle\|/
289
- url.must_match /\|BSTATE~WA\|/
290
- url.must_match /\|BSTATE~WA\|/
291
- url.must_match /\|BCOUNTRY~US\|/
210
+ it "accepts extra parameters" do
211
+ params = {
212
+ amount: 19.96,
213
+ customer_id: 1234,
214
+ billing_name: "John Doe",
215
+ billing_address: "1234 Fake St.",
216
+ billing_address2: "Suite 123",
217
+ billing_city: "Seattle",
218
+ billing_state: "WA",
219
+ billing_postal_code: "98133",
220
+ billing_country: "US",
221
+ shipping_name: "Jim Doe",
222
+ shipping_address: "1235 Fake Ave.",
223
+ shipping_address2: "Suite 345",
224
+ shipping_city: "Shoreline",
225
+ shipping_state: "WA",
226
+ shipping_postal_code: "98134",
227
+ shipping_region: "King County",
228
+ shipping_country: "US",
229
+ email: "support@paytrace.com",
230
+ csc: 993,
231
+ invoice: "fake_invoice",
232
+ description: "fake_description",
233
+ tax_amount: 19.98,
234
+ customer_reference_id: "cust_ref_id",
235
+ discretionary_data: {hair_color: "red"},
236
+ return_clr: "Y",
237
+ custom_dba: "Arcadian Productions",
238
+ enable_partial_authentication: "Y"
239
+ }
240
+ PayTrace::Transaction.customer_id_store_forward(params)
292
241
 
242
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~Str/FWD|AMOUNT~19.96|CUSTID~1234|BNAME~John Doe|BADDRESS~1234 Fake St.|BADDRESS2~Suite 123|BCITY~Seattle|BSTATE~WA|BZIP~98133|BCOUNTRY~US|SNAME~Jim Doe|SADDRESS~1235 Fake Ave.|SADDRESS2~Suite 345|SCITY~Shoreline|SSTATE~WA|SZIP~98134|SCOUNTY~King County|SCOUNTRY~US|EMAIL~support@paytrace.com|CSC~993|INVOICE~fake_invoice|DESCRIPTION~fake_description|TAX~19.98|CUSTREF~cust_ref_id|RETURNCLR~Y|CUSTOMDBA~Arcadian Productions|ENABLEPARTIALAUTH~Y|hair_color~red"
243
+ end
293
244
  end
294
245
 
295
- it "can include misc fields as well" do
296
- t = PayTrace::Transaction.new({
297
- optional: {
298
- email:"it@paytrace.com",
299
- description:"This is a test",
300
- tax_amount: "1.00",
301
- return_clr: "Y",
302
- enable_partial_authentication:"Y",
303
- custom_dba:"NewName"
304
- },
305
- discretionary_data: {hair_color: "red"}
306
- })
246
+ describe "refund transactions" do
247
+ it "can create a refund transaction for a swiped credit card" do
248
+ params = {
249
+ amount: 19.99,
250
+ swipe: 'this is fake swipe data'
251
+ }
307
252
 
308
- r = PayTrace::API::Request.new
309
- t.set_request(r)
253
+ PayTrace::Transaction.swiped_refund(params)
254
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~Refund|AMOUNT~19.99|SWIPE~this is fake swipe data|"
255
+ end
310
256
 
311
- url = r.to_parms_string
257
+ it "can create a refund transaction for a keyed-in credit card" do
258
+ params = {
259
+ amount: 19.99,
260
+ card_number: 5444444444444444,
261
+ expiration_month: 10,
262
+ expiration_year: 24
263
+ }
312
264
 
313
- url.must_match /\|DESCRIPTION~This is a test\|/
314
- url.must_match /\|TAX~1.00\|/
315
- url.must_match /\|EMAIL~it@paytrace.com\|/
316
- url.must_match /\|RETURNCLR~Y\|/
317
- url.must_match /\|ENABLEPARTIALAUTH~Y\|/
318
- url.must_match /\|hair_color~red\|/
319
- url.must_match /\|CUSTOMDBA~NewName\|/
320
- end
265
+ PayTrace::Transaction.keyed_refund(params)
266
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~Refund|AMOUNT~19.99|CC~5444444444444444|EXPMNTH~10|EXPYR~24|"
267
+ end
321
268
 
322
- it "can do a swipe transaction" do
323
- cc = PayTrace::CreditCard.new( {
324
- swipe: '%B4055010000000005^J/SCOTT^1212101001020001000000701000000?;4055010000000005=12121010010270100001?'
325
- })
326
- t = PayTrace::Transaction.new({
327
- amount: '1.00',
328
- credit_card:cc
329
- })
269
+ it "can create a refund transaction for a particular customer ID" do
270
+ params = {
271
+ amount: 19.99,
272
+ customer_id: 1234
273
+ }
330
274
 
331
- r = PayTrace::API::Request.new
332
- t.set_request(r)
275
+ PayTrace::Transaction.customer_id_refund(params)
276
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~Refund|AMOUNT~19.99|CUSTID~1234|"
277
+ end
333
278
 
334
- url = r.to_parms_string
279
+ it "can create a refund transaction for a particular transaction ID" do
280
+ params = {
281
+ amount: 19.99,
282
+ transaction_id: 1234
283
+ }
335
284
 
336
- url.must_match /\|AMOUNT~1.00\|/
337
- url.must_match /\|SWIPE~%B4055010000000005/
285
+ PayTrace::Transaction.transaction_id_refund(params)
286
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~Refund|AMOUNT~19.99|TRANXID~1234|"
287
+ end
338
288
 
289
+ it "accepts optional data" do
290
+ params = {
291
+ amount: 19.99,
292
+ transaction_id: 1234,
293
+ billing_name: "John Doe",
294
+ billing_address: "1234 Fake St.",
295
+ billing_address2: "Suite 123",
296
+ billing_city: "Seattle",
297
+ billing_state: "WA",
298
+ billing_postal_code: "98133",
299
+ billing_country: "US",
300
+ shipping_name: "Jim Doe",
301
+ shipping_address: "1235 Fake Ave.",
302
+ shipping_address2: "Suite 345",
303
+ shipping_city: "Shoreline",
304
+ shipping_state: "WA",
305
+ shipping_postal_code: "98134",
306
+ shipping_region: "King County",
307
+ shipping_country: "US",
308
+ email: "support@paytrace.com",
309
+ csc: 993,
310
+ invoice: "fake_invoice",
311
+ description: "fake_description",
312
+ tax_amount: 19.98,
313
+ customer_reference_id: "cust_ref_id",
314
+ discretionary_data: {hair_color: "red"}
315
+ }
339
316
 
317
+ PayTrace::Transaction.transaction_id_refund(params)
318
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~Refund|AMOUNT~19.99|TRANXID~1234|BNAME~John Doe|BADDRESS~1234 Fake St.|BADDRESS2~Suite 123|BCITY~Seattle|BSTATE~WA|BZIP~98133|BCOUNTRY~US|SNAME~Jim Doe|SADDRESS~1235 Fake Ave.|SADDRESS2~Suite 345|SCITY~Shoreline|SSTATE~WA|SZIP~98134|SCOUNTY~King County|SCOUNTRY~US|EMAIL~support@paytrace.com|CSC~993|INVOICE~fake_invoice|DESCRIPTION~fake_description|TAX~19.98|CUSTREF~cust_ref_id|hair_color~red"
319
+ end
340
320
  end
341
321
 
342
- it "can do a reference sales request " do
343
-
344
- t = PayTrace::Transaction.new({
345
- amount: '1.00',
346
- optional:{transaction_id: '1234'}
347
- })
348
-
349
- r = PayTrace::API::Request.new
350
- t.set_request(r)
351
-
352
- url = r.to_parms_string
322
+ describe "adding address info" do
323
+ it "can take a shipping address" do
324
+ PayTrace::Transaction.customer_id_sale({
325
+ amount: 19.99,
326
+ customer_id: 'MMouse',
327
+ shipping_name: "Joe Blow",
328
+ shipping_address: "1234 happy lane",
329
+ shipping_address2: "suit 234",
330
+ shipping_city:"Seattle",
331
+ shipping_state:"WA",
332
+ shipping_country:"USA",
333
+ shipping_postal_code:"98107"
334
+ })
335
+
336
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~SALE|AMOUNT~19.99|CUSTID~MMouse|SNAME~Joe Blow|SADDRESS~1234 happy lane|SADDRESS2~suit 234|SCITY~Seattle|SSTATE~WA|SCOUNTRY~USA|SZIP~98107|"
337
+ end
353
338
 
354
- url.must_match /\|AMOUNT~1.00\|/
355
- url.must_match /\|TRANXID~1234|/
339
+ it "can take a billing address" do
340
+ PayTrace::Transaction.customer_id_sale({
341
+ amount: 19.99,
342
+ customer_id: 'MMouse',
343
+ billing_name: "Joe Blow",
344
+ billing_address: "1234 happy lane",
345
+ billing_address2: "suit 234",
346
+ billing_city:"Seattle",
347
+ billing_state:"WA",
348
+ billing_country:"USA",
349
+ billing_postal_code:"98107"
350
+ })
351
+
352
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~SALE|AMOUNT~19.99|CUSTID~MMouse|BNAME~Joe Blow|BADDRESS~1234 happy lane|BADDRESS2~suit 234|BCITY~Seattle|BSTATE~WA|BCOUNTRY~USA|BZIP~98107|"
353
+ end
356
354
  end
357
355
 
358
- it "can create an approval code call" do
359
- t = PayTrace::Transaction.new({amount: "23.12",
360
- credit_card: PayTrace::CreditCard.new({
361
- card_number: "1234123412341234",
362
- expiration_year: 24,
363
- expiration_month: 10 }),
364
- type: PayTrace::TransactionTypes::ForcedSale,
365
- optional:{approval_code:'1234'}
366
- })
367
-
368
- r = PayTrace::API::Request.new
369
- t.set_request(r)
370
-
371
- url = r.to_parms_string
372
-
373
- url.must_match /\|APPROVAL~1234\|/
374
- url.must_match /\|TRANXTYPE~Force\|/
375
-
356
+ it "can create and send a void transaction" do
357
+ PayTrace::Transaction.void({transaction_id: "111"})
358
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~Void|TRANXID~111|"
376
359
  end
377
360
 
378
- it "can create a new cash_advance sale" do
379
- cc = PayTrace::CreditCard.new( {
380
- swipe: '%B4055010000000005^J/SCOTT^1212101001020001000000701000000?;4055010000000005=12121010010270100001?'
381
- })
382
-
383
- optional = {
384
- billing_address:{
385
- name:"John Doe",
386
- street:"1234 happy lane",
387
- street2:"apt#2",
388
- city:"Seattle",
389
- state:"WA",
390
- country: "US",
391
- postal_code:"98107"
392
- },
393
- id_number: "1234",
394
- id_expiration:"12/20/2020",
395
- cc_last_4: "1234",
396
- cash_advance: "Y"
397
-
398
-
399
- }
400
- t = PayTrace::Transaction.new({
401
- amount: '1.00',
402
- credit_card:cc,
403
- type: PayTrace::TransactionTypes::SALE,
404
- optional:optional
405
- })
406
-
407
- r = PayTrace::API::Request.new
408
- t.set_request(r)
409
-
410
- url = r.to_parms_string
411
-
412
- url.must_match /\|AMOUNT~1.00\|/
413
- url.must_match /\|SWIPE~%B4055010000000005/
414
- url.must_match /\|CASHADVANCE~Y\|/
415
- url.must_match /\|PHOTOID~1234\|/
416
- url.must_match /\|LAST4~1234\|/
417
- url.must_match /\|BADDRESS~1234 happy lane\|/
418
-
419
-
420
-
421
-
361
+ describe "forced sales" do
362
+ it "can create a forced sale for a swiped credit card" do
363
+ PayTrace::Transaction.swiped_forced_sale(amount: 19.99, swipe: "this is some fake swipe data", approval_code: 111)
364
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~Force|AMOUNT~19.99|SWIPE~this is some fake swipe data|APPROVAL~111|"
365
+ end
366
+
367
+ it "can create a forced sale for a keyed-in credit card" do
368
+ params = {
369
+ amount: 19.98,
370
+ card_number: 1234123412341234,
371
+ expiration_month: 10,
372
+ expiration_year: 24,
373
+ approval_code: 123
374
+ }
375
+ PayTrace::Transaction.keyed_forced_sale(params)
376
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~Force|AMOUNT~19.98|CC~1234123412341234|EXPMNTH~10|EXPYR~24|APPROVAL~123|"
377
+ end
378
+
379
+ it "can create a forced sale for a given customer ID" do
380
+ PayTrace::Transaction.customer_id_forced_sale(amount: 19.99, customer_id: "MMouse", approval_code: 111)
381
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~Force|AMOUNT~19.99|CUSTID~MMouse|APPROVAL~111|"
382
+ end
383
+
384
+ it "can create a forced sale for a given transaction ID" do
385
+ PayTrace::Transaction.transaction_id_forced_sale(transaction_id: 1234, approval_code: 111)
386
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~Force|TRANXID~1234|APPROVAL~111|"
387
+ end
422
388
  end
423
389
 
390
+ it "can perform a capture transaction" do
391
+ PayTrace::Transaction.capture(transaction_id: 1234)
392
+ assert_last_request_equals "METHOD~PROCESSTRANX|TRANXTYPE~Capture|TRANXID~1234|"
393
+ end
424
394
  end