paytrace 0.1.23 → 1.0.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.
- 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
|