paytrace 0.1.23 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/paytrace/address.rb +2 -0
- data/lib/paytrace/api/gateway.rb +19 -4
- data/lib/paytrace/api/request.rb +72 -28
- data/lib/paytrace/api/response.rb +19 -11
- data/lib/paytrace/batch_operations.rb +8 -30
- data/lib/paytrace/check_transaction.rb +119 -84
- data/lib/paytrace/configuration.rb +2 -0
- data/lib/paytrace/customer.rb +95 -97
- data/lib/paytrace/debug.rb +36 -0
- data/lib/paytrace/email_receipt_request.rb +4 -28
- data/lib/paytrace/recurring_transaction.rb +20 -67
- data/lib/paytrace/transaction.rb +680 -267
- data/lib/paytrace/version.rb +1 -1
- data/lib/paytrace.rb +0 -4
- data/paytrace.gemspec +1 -0
- data/run_all_integrations.sh +15 -0
- data/test/paytrace/api/gateway_spec.rb +8 -0
- data/test/paytrace/api/request_spec.rb +84 -28
- data/test/paytrace/api/response_spec.rb +2 -2
- data/test/paytrace/batch_operations_spec.rb +5 -5
- data/test/paytrace/{check_transactions_spec.rb → check_transaction_spec.rb} +40 -19
- data/test/paytrace/customer_spec.rb +86 -110
- data/test/paytrace/email_receipt_request_spec.rb +9 -8
- data/test/paytrace/level3_data_spec.rb +28 -2
- data/test/paytrace/recurring_transaction_spec.rb +8 -16
- data/test/paytrace/transaction_spec.rb +300 -330
- data/test/scripts/run_adjust_amount.rb +1 -1
- data/test/scripts/run_attach_signature.rb +2 -2
- data/test/scripts/run_calculate_shipping_costs.rb +2 -3
- data/test/scripts/run_change_password.rb +2 -0
- data/test/scripts/run_check_transactions.rb +2 -3
- data/test/scripts/run_create_customer.rb +16 -23
- data/test/scripts/run_email_request.rb +3 -5
- data/test/scripts/run_export_batches.rb +6 -3
- data/test/scripts/run_export_customers.rb +1 -1
- data/test/scripts/run_export_transactions.rb +2 -2
- data/test/scripts/run_level3_data.rb +1 -1
- data/test/scripts/run_recur_payments_integration.rb +24 -32
- data/test/scripts/run_settle_transaction.rb +2 -2
- data/test/test_helper.rb +12 -1
- metadata +19 -7
- data/lib/paytrace/credit_card.rb +0 -32
- data/test/paytrace/credit_card_spec.rb +0 -26
data/lib/paytrace/version.rb
CHANGED
data/lib/paytrace.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require "paytrace/version"
|
2
2
|
require "paytrace/configuration"
|
3
|
-
require "paytrace/credit_card"
|
4
3
|
require "paytrace/customer"
|
5
4
|
require "paytrace/transaction"
|
6
5
|
require "paytrace/email_receipt_request"
|
@@ -12,6 +11,3 @@ require 'paytrace/exceptions'
|
|
12
11
|
require 'paytrace/recurring_transaction'
|
13
12
|
require 'paytrace/check_transaction'
|
14
13
|
require 'paytrace/batch_operations'
|
15
|
-
|
16
|
-
module PayTrace
|
17
|
-
end
|
data/paytrace.gemspec
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
ruby test/scripts/run_adjust_amount.rb
|
4
|
+
ruby test/scripts/run_change_password.rb
|
5
|
+
ruby test/scripts/run_email_request.rb
|
6
|
+
ruby test/scripts/run_export_transactions.rb
|
7
|
+
ruby test/scripts/run_settle_transaction.rb
|
8
|
+
ruby test/scripts/run_attach_signature.rb
|
9
|
+
ruby test/scripts/run_check_transactions.rb
|
10
|
+
ruby test/scripts/run_export_batches.rb
|
11
|
+
ruby test/scripts/run_level3_data.rb
|
12
|
+
ruby test/scripts/run_calculate_shipping_costs.rb
|
13
|
+
ruby test/scripts/run_create_customer.rb
|
14
|
+
ruby test/scripts/run_export_customers.rb
|
15
|
+
ruby test/scripts/run_recur_payments_integration.rb
|
@@ -83,6 +83,14 @@ describe PayTrace::API::Gateway do
|
|
83
83
|
faraday.verify_stubbed_calls
|
84
84
|
end
|
85
85
|
|
86
|
+
it "includes the last response object" do
|
87
|
+
PayTrace::API::Gateway.debug = true
|
88
|
+
request = PayTrace::API::Request.new
|
89
|
+
gateway = PayTrace::API::Gateway.new
|
90
|
+
response = gateway.send_request(request)
|
91
|
+
PayTrace::API::Gateway.last_response_object.must_equal response
|
92
|
+
end
|
93
|
+
|
86
94
|
it "raises an ErrorResponse exception for errors" do
|
87
95
|
PayTrace::API::Gateway.debug = true # to enable mock response
|
88
96
|
PayTrace::API::Gateway.raise_exceptions = true
|
@@ -24,40 +24,96 @@ describe PayTrace::API::Request do
|
|
24
24
|
to_url.must_equal "UN~request_test|PSWD~request_password|TERMS~Y|"
|
25
25
|
end
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
27
|
+
describe "#set_param" do
|
28
|
+
it "can manually set params" do
|
29
|
+
r = PayTrace::API::Request.new
|
30
|
+
r.set_param(:billing_name, "Fred Jones")
|
31
|
+
r.params[:billing_name].must_equal ["Fred Jones"]
|
32
|
+
end
|
32
33
|
|
33
|
-
|
34
|
-
|
35
|
-
r = PayTrace::API::Request.new
|
36
|
-
r.set_params([:billing_name, :billing_postal_code], params)
|
37
|
-
r.params[:billing_name].must_equal ["Fred Jones"]
|
38
|
-
r.params[:billing_postal_code].must_equal [98133]
|
39
|
-
end
|
34
|
+
it "invokes set_request on values sent to set_param" do
|
35
|
+
request = PayTrace::API::Request.new
|
40
36
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
r.set_params([[:billing_name, :name], [:billing_postal_code, :postal_code]], params)
|
45
|
-
r.params[:billing_name].must_equal ["Ron Jones"]
|
46
|
-
r.params[:billing_postal_code].must_equal [98134]
|
47
|
-
end
|
37
|
+
mock = MiniTest::Mock.new
|
38
|
+
mock.expect(:nil?, false)
|
39
|
+
mock.expect(:set_request, nil, [request])
|
48
40
|
|
49
|
-
|
50
|
-
|
41
|
+
request.set_param(:billing_name, mock)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "correctly sets a value named :discretionary_data as discretionary data" do
|
45
|
+
r = PayTrace::API::Request.new
|
46
|
+
r.set_param(:discretionary_data, {hair_color: 'red'})
|
47
|
+
|
48
|
+
r.params[:discretionary_data].must_equal nil
|
49
|
+
r.discretionary_data[:hair_color].must_equal 'red'
|
50
|
+
end
|
51
|
+
|
52
|
+
it "properly appends discretionary data" do
|
53
|
+
r = PayTrace::API::Request.new
|
54
|
+
r.set_param(:billing_name, "Fred Jones")
|
55
|
+
r.set_discretionary(:hair_color, "red")
|
56
|
+
|
57
|
+
r.to_parms_string.must_equal "UN~#{PayTrace.configuration.user_name}|PSWD~#{PayTrace.configuration.password}|TERMS~Y|" +
|
58
|
+
"BNAME~Fred Jones|hair_color~red|"
|
59
|
+
end
|
60
|
+
|
61
|
+
it "raises a validation exception for unknown fields" do
|
62
|
+
r = PayTrace::API::Request.new
|
51
63
|
|
52
|
-
|
64
|
+
-> { r.set_param(:foo, "bar") }.must_raise PayTrace::Exceptions::ValidationError
|
65
|
+
end
|
53
66
|
end
|
54
67
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
68
|
+
describe "#set_params" do
|
69
|
+
it "can bulk set params" do
|
70
|
+
params = {billing_name: "Fred Jones", billing_postal_code: 98133}
|
71
|
+
r = PayTrace::API::Request.new
|
72
|
+
r.set_params(params, [:billing_name, :billing_postal_code])
|
73
|
+
r.params[:billing_name].must_equal ["Fred Jones"]
|
74
|
+
r.params[:billing_postal_code].must_equal [98133]
|
75
|
+
end
|
76
|
+
|
77
|
+
it "can alias parameters in set_params" do
|
78
|
+
params = {name: "Ron Jones", postal_code: 98134}
|
79
|
+
r = PayTrace::API::Request.new
|
80
|
+
r.set_params(params, [[:billing_name, :name], [:billing_postal_code, :postal_code]])
|
81
|
+
r.params[:billing_name].must_equal ["Ron Jones"]
|
82
|
+
r.params[:billing_postal_code].must_equal [98134]
|
83
|
+
end
|
84
|
+
|
85
|
+
it "attempts to fetch parameter values from an object if supplied" do
|
86
|
+
mock = MiniTest::Mock.new
|
87
|
+
|
88
|
+
mock.expect(:is_a?, false, [Hash])
|
89
|
+
mock.expect(:send, "1234 Fake Ave.", [:send, :billing_address])
|
90
|
+
|
91
|
+
r = PayTrace::API::Request.new
|
92
|
+
r.set_params(mock, [:billing_address])
|
93
|
+
mock.verify
|
94
|
+
r.params[:billing_address].must_equal ["1234 Fake Ave."]
|
95
|
+
end
|
96
|
+
|
97
|
+
it "raises an exception for missing required parameters" do
|
98
|
+
params = {}
|
99
|
+
r = PayTrace::API::Request.new
|
100
|
+
|
101
|
+
-> { r.set_params(params, [:billing_name]) }.must_raise PayTrace::Exceptions::ValidationError
|
102
|
+
end
|
59
103
|
|
60
|
-
|
61
|
-
"
|
104
|
+
it "raises an exception for extra unrecognized parameters" do
|
105
|
+
params = {billing_name: "1234 Fake Blvd."}
|
106
|
+
r = PayTrace::API::Request.new
|
107
|
+
|
108
|
+
-> { r.set_params(params, []) }.must_raise PayTrace::Exceptions::ValidationError
|
109
|
+
end
|
110
|
+
|
111
|
+
it "does not raise an exception for optional parameters" do
|
112
|
+
params = {billing_address: "1234 Fake St."}
|
113
|
+
r = PayTrace::API::Request.new
|
114
|
+
|
115
|
+
# MiniTest does not have a "wont_raise" predicate, but an exception is the same as failure...
|
116
|
+
r.set_params(params, [], [:billing_address])
|
117
|
+
end
|
62
118
|
end
|
63
119
|
end
|
@@ -5,7 +5,7 @@ describe PayTrace::API::Response do
|
|
5
5
|
it "parses a successful transaction response" do
|
6
6
|
from_server = "RESPONSE~101. Your transaction was successfully approved.|TRANSACTIONID~93|APPCODE~TAS671|APPMSG~APPROVAL TAS671 - Approved and completed|AVSRESPONSE~0|CSCRESPONSE~|"
|
7
7
|
response = PayTrace::API::Response.new(from_server)
|
8
|
-
response.
|
8
|
+
response.get_response().must_equal "101. Your transaction was successfully approved."
|
9
9
|
end
|
10
10
|
|
11
11
|
it "parses multiple error responses" do
|
@@ -24,7 +24,7 @@ describe PayTrace::API::Response do
|
|
24
24
|
from_server ="ERROR~35. Please provide a valid Credit Card Number.|ERROR~43. Please provide a valid Expiration Month.|"
|
25
25
|
response = PayTrace::API::Response.new(from_server)
|
26
26
|
actual ="35. Please provide a valid Credit Card Number.,43. Please provide a valid Expiration Month.,"
|
27
|
-
response.
|
27
|
+
response.get_response().must_equal actual
|
28
28
|
end
|
29
29
|
|
30
30
|
|
@@ -10,16 +10,16 @@ describe PayTrace::BatchOperations do
|
|
10
10
|
PayTrace::API::Gateway.reset_trace()
|
11
11
|
end
|
12
12
|
|
13
|
-
describe "
|
13
|
+
describe "export_single" do
|
14
14
|
it "generates the correct request" do
|
15
15
|
PayTrace::API::Gateway.next_response = "RESULT~Ok"
|
16
|
-
result = PayTrace::BatchOperations.
|
16
|
+
result = PayTrace::BatchOperations.export_single()
|
17
17
|
PayTrace::API::Gateway.last_request.must_equal base_url(PayTrace::BatchOperations::EXPORT_SINGLE_METHOD)
|
18
18
|
end
|
19
19
|
|
20
20
|
it "accepts an optional batch number" do
|
21
21
|
PayTrace::API::Gateway.next_response = "RESULT~Ok"
|
22
|
-
result = PayTrace::BatchOperations.
|
22
|
+
result = PayTrace::BatchOperations.export_single(batch_number: 12345)
|
23
23
|
PayTrace::API::Gateway.last_request.must_equal base_url(PayTrace::BatchOperations::EXPORT_SINGLE_METHOD) + "BATCHNUMBER~12345|"
|
24
24
|
end
|
25
25
|
end
|
@@ -27,7 +27,7 @@ describe PayTrace::BatchOperations do
|
|
27
27
|
describe "exportMultiple" do
|
28
28
|
it "generates the correct request" do
|
29
29
|
PayTrace::API::Gateway.next_response = "RESULT~Ok"
|
30
|
-
result = PayTrace::BatchOperations.
|
30
|
+
result = PayTrace::BatchOperations.export_multiple(start_date: "03/01/2014", end_date: "06/01/2014")
|
31
31
|
PayTrace::API::Gateway.last_request.must_equal base_url(PayTrace::BatchOperations::EXPORT_MULTIPLE_METHOD) +
|
32
32
|
"SDATE~03/01/2014|EDATE~06/01/2014|"
|
33
33
|
end
|
@@ -36,7 +36,7 @@ describe PayTrace::BatchOperations do
|
|
36
36
|
describe "exportDetails" do
|
37
37
|
it "generates the correct request" do
|
38
38
|
PayTrace::API::Gateway.next_response = "RESULT~Ok"
|
39
|
-
result = PayTrace::BatchOperations.
|
39
|
+
result = PayTrace::BatchOperations.export_details(batch_number: 12346)
|
40
40
|
PayTrace::API::Gateway.last_request.must_equal base_url(PayTrace::BatchOperations::EXPORT_DETAILS_METHOD) + "BATCHNUMBER~12346|"
|
41
41
|
end
|
42
42
|
end
|
@@ -21,9 +21,8 @@ describe PayTrace::CheckTransaction do
|
|
21
21
|
account_number: 1234567,
|
22
22
|
routing_number: 1234568
|
23
23
|
}
|
24
|
-
result = PayTrace::CheckTransaction.
|
25
|
-
|
26
|
-
"CHECKTYPE~foo|AMOUNT~17.29|DDA~1234567|TR~1234568|"
|
24
|
+
result = PayTrace::CheckTransaction.sale(params)
|
25
|
+
assert_last_request_equals "METHOD~ProcessCheck|CHECKTYPE~foo|AMOUNT~17.29|DDA~1234567|TR~1234568|"
|
27
26
|
end
|
28
27
|
|
29
28
|
# UN, PSWD, TERMS, METHOD, CHECKTYPE, AMOUNT, CUSTID
|
@@ -34,9 +33,8 @@ describe PayTrace::CheckTransaction do
|
|
34
33
|
amount: 17.28,
|
35
34
|
customer_id: 'MMouse'
|
36
35
|
}
|
37
|
-
result = PayTrace::CheckTransaction.
|
38
|
-
|
39
|
-
"CHECKTYPE~bar|AMOUNT~17.28|CUSTID~MMouse|"
|
36
|
+
result = PayTrace::CheckTransaction.customer_id_sale(params)
|
37
|
+
assert_last_request_equals "METHOD~ProcessCheck|CHECKTYPE~bar|AMOUNT~17.28|CUSTID~MMouse|"
|
40
38
|
end
|
41
39
|
|
42
40
|
|
@@ -73,7 +71,7 @@ describe PayTrace::CheckTransaction do
|
|
73
71
|
shipping_address: sa
|
74
72
|
}
|
75
73
|
|
76
|
-
result = PayTrace::CheckTransaction.
|
74
|
+
result = PayTrace::CheckTransaction.customer_id_sale(params)
|
77
75
|
PayTrace::API::Gateway.last_request.must_equal base_url(PayTrace::CheckTransaction::PROCESS_SALE_METHOD) +
|
78
76
|
"CHECKTYPE~baz|AMOUNT~17.29|CUSTID~DDuck|BNAME~John Doe|BADDRESS~1234 Main Street|BADDRESS2~Apartment 1B|BCITY~Shoreline|BSTATE~WA|BZIP~98133|BCOUNTRY~US|SNAME~Jane Doe|SADDRESS~1235 Moon Street|SADDRESS2~Apartment 2C|SCITY~Shortline|SSTATE~WA|SZIP~98134|SCOUNTRY~US|"
|
79
77
|
end
|
@@ -83,6 +81,7 @@ describe PayTrace::CheckTransaction do
|
|
83
81
|
PayTrace::API::Gateway.next_response = "RESULT~Ok"
|
84
82
|
|
85
83
|
params = {
|
84
|
+
check_type: 'foo',
|
86
85
|
email: 'foo@bar.com',
|
87
86
|
description: 'You bought something with a check, yo!',
|
88
87
|
invoice: '12345',
|
@@ -91,10 +90,9 @@ describe PayTrace::CheckTransaction do
|
|
91
90
|
tax_amount: 2.11,
|
92
91
|
customer_reference_id: '1234AB'
|
93
92
|
}
|
94
|
-
result = PayTrace::CheckTransaction.
|
93
|
+
result = PayTrace::CheckTransaction.customer_id_sale(params)
|
95
94
|
|
96
|
-
|
97
|
-
"AMOUNT~17.27|CUSTID~YosemiteSam|EMAIL~foo@bar.com|INVOICE~12345|DESCRIPTION~You bought something with a check, yo!|TAX~2.11|CUSTREF~1234AB|"
|
95
|
+
assert_last_request_equals "METHOD~ProcessCheck|CHECKTYPE~foo|AMOUNT~17.27|CUSTID~YosemiteSam|EMAIL~foo@bar.com|INVOICE~12345|DESCRIPTION~You bought something with a check, yo!|TAX~2.11|CUSTREF~1234AB|"
|
98
96
|
end
|
99
97
|
|
100
98
|
it "accepts discretionary data" do
|
@@ -107,10 +105,9 @@ describe PayTrace::CheckTransaction do
|
|
107
105
|
routing_number: 1234568,
|
108
106
|
discretionary_data: {hair_color: :red}
|
109
107
|
}
|
110
|
-
result = PayTrace::CheckTransaction.
|
108
|
+
result = PayTrace::CheckTransaction.sale(params)
|
111
109
|
|
112
|
-
|
113
|
-
"CHECKTYPE~foo|AMOUNT~17.29|DDA~1234567|TR~1234568|hair_color~red|"
|
110
|
+
assert_last_request_equals "METHOD~ProcessCheck|CHECKTYPE~foo|AMOUNT~17.29|DDA~1234567|TR~1234568|hair_color~red|"
|
114
111
|
end
|
115
112
|
end
|
116
113
|
|
@@ -125,10 +122,10 @@ describe PayTrace::CheckTransaction do
|
|
125
122
|
routing_number: 1234568,
|
126
123
|
discretionary_data: {hair_color: :red}
|
127
124
|
}
|
128
|
-
result = PayTrace::CheckTransaction.
|
125
|
+
result = PayTrace::CheckTransaction.hold(params)
|
129
126
|
|
130
127
|
PayTrace::API::Gateway.last_request.must_equal base_url(PayTrace::CheckTransaction::PROCESS_SALE_METHOD) +
|
131
|
-
"AMOUNT~17.29|DDA~1234567|TR~1234568|
|
128
|
+
"CHECKTYPE~Hold|AMOUNT~17.29|DDA~1234567|TR~1234568|hair_color~red|"
|
132
129
|
end
|
133
130
|
|
134
131
|
describe "refund transactions" do
|
@@ -136,12 +133,36 @@ describe PayTrace::CheckTransaction do
|
|
136
133
|
PayTrace::API::Gateway.next_response = "RESULT~Ok"
|
137
134
|
params = {
|
138
135
|
check_type: 'foo',
|
139
|
-
|
136
|
+
amount: 19.99,
|
137
|
+
routing_number: 325081403,
|
138
|
+
account_number: 1234567890
|
139
|
+
}
|
140
|
+
result = PayTrace::CheckTransaction.refund(params)
|
141
|
+
|
142
|
+
assert_last_request_equals "METHOD~ProcessCheck|CHECKTYPE~Refund|AMOUNT~19.99|DDA~1234567890|TR~325081403|"
|
143
|
+
end
|
144
|
+
|
145
|
+
it "accepts a customer ID" do
|
146
|
+
PayTrace::API::Gateway.next_response = "RESULT~Ok"
|
147
|
+
params = {
|
148
|
+
check_type: 'foo',
|
149
|
+
amount: 19.99,
|
150
|
+
customer_id: 1234
|
151
|
+
}
|
152
|
+
result = PayTrace::CheckTransaction.refund_by_customer_id(params)
|
153
|
+
|
154
|
+
assert_last_request_equals "METHOD~ProcessCheck|CHECKTYPE~Refund|AMOUNT~19.99|CUSTID~1234|"
|
155
|
+
end
|
156
|
+
|
157
|
+
it "accepts a check ID" do
|
158
|
+
PayTrace::API::Gateway.next_response = "RESULT~Ok"
|
159
|
+
params = {
|
160
|
+
check_type: 'foo',
|
161
|
+
check_id: 1235
|
140
162
|
}
|
141
|
-
result = PayTrace::CheckTransaction.
|
163
|
+
result = PayTrace::CheckTransaction.refund_existing_check_id(params)
|
142
164
|
|
143
|
-
|
144
|
-
"CHECKID~12345678|CHECKTYPE~Refund|"
|
165
|
+
assert_last_request_equals "METHOD~ProcessCheck|CHECKTYPE~Refund|CHECKID~1235|"
|
145
166
|
end
|
146
167
|
end
|
147
168
|
|
@@ -1,10 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '../../test_helper.rb')
|
2
2
|
|
3
3
|
describe PayTrace::Customer 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.next_response = "RESPONSE~ok|CUSTOMERID~12345|CUSTID~john_doe"
|
@@ -15,7 +11,7 @@ describe PayTrace::Customer do
|
|
15
11
|
PayTrace::API::Gateway.next_response = "CUSTOMERRECORD~CUSTID=741356+CUSTOMERID=741356+CC=************5454+EXPMNTH=12+EXPYR=17+SNAME=+SADDRESS=+SADDRESS2=+SCITY=+SCOUNTY=+SSTATE=+SZIP=+SCOUNTRY=US+BNAME=DUMMY1+BADDRESS=+BADDRESS2=+BCITY=+BSTATE=+BZIP=+BCOUNTRY=US+EMAIL=+PHONE=+FAX=+WHEN=2/7/2014 5:02:08 PM+USER=demo123+IP=131.191.89.5+DDA=123412341234+TR=051000017+hair_color=+|"
|
16
12
|
records = PayTrace::Customer.export()
|
17
13
|
|
18
|
-
|
14
|
+
assert_last_request_equals "METHOD~ExportCustomers|"
|
19
15
|
records.count.must_equal 1
|
20
16
|
records.must_be_instance_of Array
|
21
17
|
records[0].must_be_instance_of Hash
|
@@ -26,7 +22,7 @@ describe PayTrace::Customer do
|
|
26
22
|
PayTrace::API::Gateway.next_response = "CUSTOMERRECORD~CUSTID=12345+BNAME=John Doe+LASTTRANX=01/01/2014+LASTCHECK=02/01/2014+WHEN=03/01/2014"
|
27
23
|
records = PayTrace::Customer.export_inactive({days_inactive: 30})
|
28
24
|
|
29
|
-
|
25
|
+
assert_last_request_equals "METHOD~ExportInactiveCustomers|DAYS~30|"
|
30
26
|
records.count.must_equal 1
|
31
27
|
records.must_be_instance_of Array
|
32
28
|
records[0].must_be_instance_of Hash
|
@@ -38,75 +34,63 @@ describe PayTrace::Customer do
|
|
38
34
|
describe "create customer profile" do
|
39
35
|
# first call path: create from credit card information
|
40
36
|
it "can be created from credit card information" do
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
37
|
+
params = {
|
38
|
+
customer_id: "foo_bar",
|
39
|
+
billing_name: "Foo Bar",
|
40
|
+
card_number: "1234123412341234",
|
41
|
+
expiration_month: 12,
|
42
|
+
expiration_year: 2014
|
43
|
+
}
|
44
|
+
PayTrace::Customer.from_cc_info(params)
|
45
|
+
assert_last_request_equals "METHOD~CreateCustomer|CUSTID~foo_bar|BNAME~Foo Bar|CC~1234123412341234|EXPMNTH~12|EXPYR~2014|"
|
46
46
|
end
|
47
47
|
|
48
48
|
# second call path: create from a transaction ID
|
49
49
|
it "can be created from a transaction ID" do
|
50
50
|
PayTrace::Customer.from_transaction_id({customer_id: "foo_bar", transaction_id: 12345678})
|
51
|
-
|
51
|
+
assert_last_request_equals "METHOD~CreateCustomer|CUSTID~foo_bar|TRANXID~12345678|"
|
52
52
|
end
|
53
53
|
|
54
54
|
# all billing address fields are accepted
|
55
55
|
it "accepts full billing address information" do
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
56
|
+
params = {
|
57
|
+
customer_id: "foo_bar",
|
58
|
+
billing_name: "Foo Bar",
|
59
|
+
billing_address: "1234 Main Street",
|
60
|
+
billing_address2: "Apartment 1B",
|
61
|
+
billing_city: "Shoreline",
|
62
|
+
billing_state: "WA",
|
63
|
+
billing_country: "USA",
|
64
|
+
billing_postal_code: 98133,
|
65
|
+
card_number: "1234123412341234",
|
66
|
+
expiration_month: 12,
|
67
|
+
expiration_year: 2014
|
68
|
+
}
|
69
|
+
|
70
|
+
PayTrace::Customer.from_cc_info(params)
|
71
|
+
assert_last_request_equals "METHOD~CreateCustomer|CUSTID~foo_bar|BNAME~Foo Bar|BADDRESS~1234 Main Street|" +
|
70
72
|
"BADDRESS2~Apartment 1B|BCITY~Shoreline|BSTATE~WA|BZIP~98133|BCOUNTRY~USA|" +
|
71
73
|
"CC~1234123412341234|EXPMNTH~12|EXPYR~2014|"
|
72
74
|
end
|
73
75
|
|
74
76
|
# you can include a shipping address, too
|
75
77
|
it "accepts a shipping address" do
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
PayTrace::Customer.from_transaction_id({customer_id: "foo_bar", transaction_id: 12345678, shipping_address: shipping_addr})
|
89
|
-
PayTrace::API::Gateway.last_request.must_equal base_url + "METHOD~CreateCustomer|CUSTID~foo_bar|TRANXID~12345678|SNAME~Foo Bar|SADDRESS~1234 Main Street|" +
|
90
|
-
"SADDRESS2~Apartment 1B|SCITY~Shoreline|SCOUNTY~Snohomish|SSTATE~WA|SZIP~98133|SCOUNTRY~USA|"
|
91
|
-
end
|
78
|
+
params = {
|
79
|
+
customer_id: "foo_bar",
|
80
|
+
transaction_id: 12345678,
|
81
|
+
shipping_name: "Foo Bar",
|
82
|
+
shipping_address: "1234 Main Street",
|
83
|
+
shipping_address2: "Apartment 1B",
|
84
|
+
shipping_city: "Shoreline",
|
85
|
+
shipping_state: "WA",
|
86
|
+
shipping_region: "Snohomish",
|
87
|
+
shipping_country: "USA",
|
88
|
+
shipping_postal_code: 98133
|
89
|
+
}
|
92
90
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
name: "Foo Bar",
|
97
|
-
street: "1234 Main Street",
|
98
|
-
street2: "Apartment 1B",
|
99
|
-
city: "Shoreline",
|
100
|
-
state: "WA",
|
101
|
-
region: "region",
|
102
|
-
country: "USA",
|
103
|
-
postal_code: 98133,
|
104
|
-
address_type: :billing
|
105
|
-
})
|
106
|
-
|
107
|
-
PayTrace::Customer.from_transaction_id({customer_id: "foo_bar", transaction_id: 12345678, billing_address: billing_addr})
|
108
|
-
PayTrace::API::Gateway.last_request.must_equal base_url + "METHOD~CreateCustomer|CUSTID~foo_bar|TRANXID~12345678|BADDRESS~1234 Main Street|" +
|
109
|
-
"BADDRESS2~Apartment 1B|BCITY~Shoreline|BSTATE~WA|BZIP~98133|BCOUNTRY~USA|"
|
91
|
+
PayTrace::Customer.from_transaction_id(params)
|
92
|
+
assert_last_request_equals "METHOD~CreateCustomer|CUSTID~foo_bar|TRANXID~12345678|SNAME~Foo Bar|SADDRESS~1234 Main Street|" +
|
93
|
+
"SADDRESS2~Apartment 1B|SCITY~Shoreline|SCOUNTY~Snohomish|SSTATE~WA|SZIP~98133|SCOUNTRY~USA|"
|
110
94
|
end
|
111
95
|
|
112
96
|
# there are additional fields (email, phone, discretionary data, etc.) that can be sent
|
@@ -115,8 +99,8 @@ describe PayTrace::Customer do
|
|
115
99
|
customer_id: "foo_bar",
|
116
100
|
transaction_id: 12345678,
|
117
101
|
email: "support@paytrace.com",
|
118
|
-
|
119
|
-
|
102
|
+
customer_phone: "123-555-1212",
|
103
|
+
customer_fax: "456-555-1212",
|
120
104
|
customer_password: "none_shall_pass",
|
121
105
|
account_number: 123456789,
|
122
106
|
routing_number: 12345678,
|
@@ -124,7 +108,7 @@ describe PayTrace::Customer do
|
|
124
108
|
}
|
125
109
|
|
126
110
|
PayTrace::Customer.from_transaction_id(params)
|
127
|
-
|
111
|
+
assert_last_request_equals "METHOD~CreateCustomer|CUSTID~foo_bar|TRANXID~12345678|EMAIL~support@paytrace.com|" +
|
128
112
|
"PHONE~123-555-1212|FAX~456-555-1212|CUSTPSWD~none_shall_pass|DDA~123456789|TR~12345678|" +
|
129
113
|
"hair_color~red|"
|
130
114
|
end
|
@@ -132,80 +116,72 @@ describe PayTrace::Customer do
|
|
132
116
|
|
133
117
|
describe "update customer profile" do
|
134
118
|
it "accepts a billing address" do
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
PayTrace::API::Gateway.last_request.must_equal base_url + "METHOD~UpdateCustomer|NEWCUSTID~joanie_doe|" +
|
119
|
+
params = {
|
120
|
+
customer_id: "john doe",
|
121
|
+
new_customer_id: "joanie_doe",
|
122
|
+
billing_name: "Foo Bar",
|
123
|
+
billing_address: "1234 Main Street",
|
124
|
+
billing_address2: "Apartment 1B",
|
125
|
+
billing_city: "Shoreline",
|
126
|
+
billing_state: "WA",
|
127
|
+
billing_country: "USA",
|
128
|
+
billing_postal_code: 98133
|
129
|
+
}
|
130
|
+
|
131
|
+
PayTrace::Customer.update(params)
|
132
|
+
|
133
|
+
assert_last_request_equals "METHOD~UpdateCustomer|CUSTID~john doe|" +
|
151
134
|
"BNAME~Foo Bar|BADDRESS~1234 Main Street|" +
|
152
|
-
"BADDRESS2~Apartment 1B|BCITY~Shoreline|BSTATE~WA|BZIP~98133|BCOUNTRY~USA|"
|
135
|
+
"BADDRESS2~Apartment 1B|BCITY~Shoreline|BSTATE~WA|BZIP~98133|BCOUNTRY~USA|NEWCUSTID~joanie_doe|"
|
153
136
|
end
|
154
137
|
|
155
138
|
it "accepts a shipping address" do
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
139
|
+
params = {
|
140
|
+
customer_id: "john doe",
|
141
|
+
new_customer_id: "joanie_doe",
|
142
|
+
shipping_name: "Foo Bar",
|
143
|
+
shipping_address: "1234 Main Street",
|
144
|
+
shipping_address2: "Apartment 1B",
|
145
|
+
shipping_city: "Shoreline",
|
146
|
+
shipping_state: "WA",
|
147
|
+
shipping_region: "Snohomish",
|
148
|
+
shipping_country: "USA",
|
149
|
+
shipping_postal_code: 98133
|
150
|
+
}
|
151
|
+
|
152
|
+
PayTrace::Customer.update(params)
|
153
|
+
|
154
|
+
assert_last_request_equals "METHOD~UpdateCustomer|CUSTID~john doe|" +
|
172
155
|
"SNAME~Foo Bar|SADDRESS~1234 Main Street|SADDRESS2~Apartment 1B|SCITY~Shoreline|SCOUNTY~Snohomish|" +
|
173
|
-
"SSTATE~WA|SZIP~98133|SCOUNTRY~USA|"
|
156
|
+
"SSTATE~WA|SZIP~98133|SCOUNTRY~USA|NEWCUSTID~joanie_doe|"
|
174
157
|
end
|
175
158
|
|
176
159
|
it "accepts extra customer information" do
|
177
160
|
params = {
|
161
|
+
customer_id: "bar_foo",
|
178
162
|
new_customer_id: "foo_bar",
|
179
163
|
email: "support@paytrace.com",
|
180
|
-
|
181
|
-
|
164
|
+
customer_phone: "123-555-1212",
|
165
|
+
customer_fax: "456-555-1212",
|
182
166
|
customer_password: "none_shall_pass",
|
183
167
|
account_number: 123456789,
|
184
168
|
routing_number: 12345678,
|
185
169
|
discretionary_data: {hair_color: "red"}
|
186
170
|
}
|
187
171
|
|
188
|
-
|
189
|
-
c.update(params)
|
172
|
+
PayTrace::Customer.update(params)
|
190
173
|
|
191
|
-
|
174
|
+
assert_last_request_equals "METHOD~UpdateCustomer|CUSTID~bar_foo|" +
|
192
175
|
"EMAIL~support@paytrace.com|PHONE~123-555-1212|FAX~456-555-1212|CUSTPSWD~none_shall_pass|DDA~123456789|" +
|
193
|
-
"TR~12345678|hair_color~red|"
|
176
|
+
"TR~12345678|NEWCUSTID~foo_bar|hair_color~red|"
|
194
177
|
end
|
195
178
|
end
|
196
179
|
|
197
180
|
describe "delete customer profile" do
|
198
|
-
it "works with an instantiated Customer object" do
|
199
|
-
c = PayTrace::Customer.new("foo_bar")
|
200
|
-
c.delete
|
201
|
-
|
202
|
-
PayTrace::API::Gateway.last_request.must_equal base_url + "METHOD~DeleteCustomer|CUSTID~foo_bar|"
|
203
|
-
end
|
204
|
-
|
205
181
|
it "works with a static class method" do
|
206
182
|
PayTrace::Customer.delete("foob_barb")
|
207
183
|
|
208
|
-
|
184
|
+
assert_last_request_equals "METHOD~DeleteCustomer|CUSTID~foob_barb|"
|
209
185
|
end
|
210
186
|
end
|
211
187
|
end
|