authorize-net 1.5.2
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.
- data/License.pdf +0 -0
- data/README.rdoc +124 -0
- data/Rakefile +74 -0
- data/generators/authorize_net_direct_post/USAGE +20 -0
- data/generators/authorize_net_direct_post/authorize_net_direct_post_generator.rb +21 -0
- data/generators/authorize_net_direct_post/templates/README-AuthorizeNet +49 -0
- data/generators/authorize_net_direct_post/templates/config.yml.erb +8 -0
- data/generators/authorize_net_direct_post/templates/config.yml.rails3.erb +8 -0
- data/generators/authorize_net_direct_post/templates/controller.rb.erb +31 -0
- data/generators/authorize_net_direct_post/templates/initializer.rb +4 -0
- data/generators/authorize_net_direct_post/templates/layout.erb +18 -0
- data/generators/authorize_net_direct_post/templates/payment.erb +10 -0
- data/generators/authorize_net_direct_post/templates/payment.rails3.erb +10 -0
- data/generators/authorize_net_direct_post/templates/receipt.erb +1 -0
- data/generators/authorize_net_direct_post/templates/relay_response.erb +1 -0
- data/generators/authorize_net_sim/USAGE +20 -0
- data/generators/authorize_net_sim/authorize_net_sim_generator.rb +19 -0
- data/generators/authorize_net_sim/templates/README-AuthorizeNet +52 -0
- data/generators/authorize_net_sim/templates/config.yml.erb +8 -0
- data/generators/authorize_net_sim/templates/config.yml.rails3.erb +8 -0
- data/generators/authorize_net_sim/templates/controller.rb.erb +21 -0
- data/generators/authorize_net_sim/templates/initializer.rb +4 -0
- data/generators/authorize_net_sim/templates/layout.erb +18 -0
- data/generators/authorize_net_sim/templates/payment.erb +6 -0
- data/generators/authorize_net_sim/templates/payment.rails3.erb +6 -0
- data/generators/authorize_net_sim/templates/thank_you.erb +1 -0
- data/generators/generator_extensions.rb +75 -0
- data/init.rb +2 -0
- data/install.rb +1 -0
- data/lib/app/helpers/authorize_net_helper.rb +24 -0
- data/lib/authorize-net.rb +4 -0
- data/lib/authorize_net.rb +92 -0
- data/lib/authorize_net/addresses/address.rb +29 -0
- data/lib/authorize_net/addresses/shipping_address.rb +26 -0
- data/lib/authorize_net/aim/response.rb +131 -0
- data/lib/authorize_net/aim/transaction.rb +184 -0
- data/lib/authorize_net/arb/response.rb +34 -0
- data/lib/authorize_net/arb/subscription.rb +72 -0
- data/lib/authorize_net/arb/transaction.rb +146 -0
- data/lib/authorize_net/authorize_net.rb +154 -0
- data/lib/authorize_net/cim/customer_profile.rb +19 -0
- data/lib/authorize_net/cim/payment_profile.rb +37 -0
- data/lib/authorize_net/cim/response.rb +110 -0
- data/lib/authorize_net/cim/transaction.rb +678 -0
- data/lib/authorize_net/customer.rb +27 -0
- data/lib/authorize_net/email_receipt.rb +24 -0
- data/lib/authorize_net/fields.rb +736 -0
- data/lib/authorize_net/key_value_response.rb +117 -0
- data/lib/authorize_net/key_value_transaction.rb +291 -0
- data/lib/authorize_net/line_item.rb +25 -0
- data/lib/authorize_net/order.rb +42 -0
- data/lib/authorize_net/payment_methods/credit_card.rb +74 -0
- data/lib/authorize_net/payment_methods/echeck.rb +72 -0
- data/lib/authorize_net/reporting/batch.rb +19 -0
- data/lib/authorize_net/reporting/batch_statistics.rb +19 -0
- data/lib/authorize_net/reporting/fds_filter.rb +11 -0
- data/lib/authorize_net/reporting/response.rb +127 -0
- data/lib/authorize_net/reporting/transaction.rb +116 -0
- data/lib/authorize_net/reporting/transaction_details.rb +25 -0
- data/lib/authorize_net/response.rb +27 -0
- data/lib/authorize_net/sim/hosted_payment_form.rb +38 -0
- data/lib/authorize_net/sim/hosted_receipt_page.rb +37 -0
- data/lib/authorize_net/sim/response.rb +142 -0
- data/lib/authorize_net/sim/transaction.rb +138 -0
- data/lib/authorize_net/transaction.rb +66 -0
- data/lib/authorize_net/xml_response.rb +172 -0
- data/lib/authorize_net/xml_transaction.rb +275 -0
- data/lib/generators/authorize_net/direct_post_generator.rb +51 -0
- data/lib/generators/authorize_net/sim_generator.rb +47 -0
- data/spec/aim_spec.rb +310 -0
- data/spec/arb_spec.rb +191 -0
- data/spec/authorize_net_spec.rb +200 -0
- data/spec/cim_spec.rb +450 -0
- data/spec/reporting_spec.rb +431 -0
- data/spec/sim_spec.rb +97 -0
- data/spec/spec.opts +5 -0
- data/spec/spec_helper.rb +2 -0
- data/uninstall.rb +1 -0
- metadata +223 -0
@@ -0,0 +1,431 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe AuthorizeNet::Reporting do
|
4
|
+
before :all do
|
5
|
+
begin
|
6
|
+
creds = YAML.load_file(File.dirname(__FILE__) + "/credentials.yml")
|
7
|
+
@api_key = creds['api_transaction_key']
|
8
|
+
@api_login = creds['api_login_id']
|
9
|
+
rescue Errno::ENOENT => e
|
10
|
+
@api_key = "TEST"
|
11
|
+
@api_login = "TEST"
|
12
|
+
warn "WARNING: Running w/o valid AuthorizeNet sandbox credentials. Create spec/credentials.yml."
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should support instantiation" do
|
17
|
+
transaction = AuthorizeNet::Reporting::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
|
18
|
+
transaction.should be_kind_of(AuthorizeNet::Reporting::Transaction)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should be able to fetch a list of settled batches" do
|
22
|
+
transaction = AuthorizeNet::Reporting::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
|
23
|
+
transaction.should respond_to(:get_settled_batch_list)
|
24
|
+
response = transaction.get_settled_batch_list
|
25
|
+
response.success?.should be_true
|
26
|
+
response.should respond_to(:batch_list)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should be able to fetch a list of settled batches with start and end dates" do
|
30
|
+
transaction = AuthorizeNet::Reporting::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
|
31
|
+
transaction.should respond_to(:get_settled_batch_list)
|
32
|
+
response = transaction.get_settled_batch_list(Time.now() - (1 * 3600 * 12), Time.now())
|
33
|
+
response.success?.should be_true
|
34
|
+
response.should respond_to(:batch_list)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should be able to fetch a list of settled batches with statistics" do
|
38
|
+
transaction = AuthorizeNet::Reporting::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
|
39
|
+
transaction.should respond_to(:get_settled_batch_list)
|
40
|
+
response = transaction.get_settled_batch_list(nil, nil, true)
|
41
|
+
response.success?.should be_true
|
42
|
+
response.should respond_to(:batch_list)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should be able to fetch a transaction list" do
|
46
|
+
transaction = AuthorizeNet::Reporting::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
|
47
|
+
transaction.should respond_to(:get_transaction_list)
|
48
|
+
response = transaction.get_transaction_list('111111')
|
49
|
+
response.success?.should be_true
|
50
|
+
response.should respond_to(:transactions)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should be able to fetch transaction details" do
|
54
|
+
# create a transaction to fetch
|
55
|
+
transaction = AuthorizeNet::AIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
|
56
|
+
credit_card = AuthorizeNet::CreditCard.new('4111111111111111', '1120')
|
57
|
+
transaction.set_fields(:duplicate_window => 0)
|
58
|
+
response = transaction.purchase(10.0, credit_card)
|
59
|
+
|
60
|
+
# fetch the transaction
|
61
|
+
transaction = AuthorizeNet::Reporting::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
|
62
|
+
transaction.should respond_to(:get_transaction_details)
|
63
|
+
response = transaction.get_transaction_details(response.transaction_id)
|
64
|
+
response.success?.should be_true
|
65
|
+
response.should respond_to(:transaction)
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "parsing batch statistics" do
|
69
|
+
before do
|
70
|
+
@response = '<getSettledBatchListResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
|
71
|
+
<messages>
|
72
|
+
<resultCode>Ok</resultCode>
|
73
|
+
<message>
|
74
|
+
<code>I00001</code>
|
75
|
+
<text>Successful.</text>
|
76
|
+
</message>
|
77
|
+
</messages>
|
78
|
+
<batchList>
|
79
|
+
<batch>
|
80
|
+
<batchId>834677</batchId>
|
81
|
+
<settlementTimeUTC>2010-12-07T23:57:05Z</settlementTimeUTC>
|
82
|
+
<settlementTimeLocal>2010-12-07T15:57:05</settlementTimeLocal>
|
83
|
+
<settlementState>settledSuccessfully</settlementState>
|
84
|
+
<paymentMethod>creditCard</paymentMethod>
|
85
|
+
<statistics>
|
86
|
+
<statistic>
|
87
|
+
<accountType>Visa</accountType>
|
88
|
+
<chargeAmount>799.92</chargeAmount>
|
89
|
+
<chargeCount>17</chargeCount>
|
90
|
+
<refundAmount>0.00</refundAmount>
|
91
|
+
<refundCount>0</refundCount>
|
92
|
+
<voidCount>4</voidCount>
|
93
|
+
<declineCount>0</declineCount>
|
94
|
+
<errorCount>0</errorCount>
|
95
|
+
</statistic>
|
96
|
+
</statistics>
|
97
|
+
</batch>
|
98
|
+
<batch>
|
99
|
+
<batchId>834801</batchId>
|
100
|
+
<settlementTimeUTC>2010-12-08T00:17:57Z</settlementTimeUTC>
|
101
|
+
<settlementTimeLocal>2010-12-07T16:17:57</settlementTimeLocal>
|
102
|
+
<settlementState>settledSuccessfully</settlementState>
|
103
|
+
<paymentMethod>creditCard</paymentMethod>
|
104
|
+
<statistics>
|
105
|
+
<statistic>
|
106
|
+
<accountType>Visa</accountType>
|
107
|
+
<chargeAmount>594.77</chargeAmount>
|
108
|
+
<chargeCount>16</chargeCount>
|
109
|
+
<refundAmount>0.00</refundAmount>
|
110
|
+
<refundCount>0</refundCount>
|
111
|
+
<voidCount>4</voidCount>
|
112
|
+
<declineCount>0</declineCount>
|
113
|
+
<errorCount>0</errorCount>
|
114
|
+
</statistic>
|
115
|
+
</statistics>
|
116
|
+
</batch>
|
117
|
+
<batch>
|
118
|
+
<batchId>835158</batchId>
|
119
|
+
<settlementTimeUTC>2010-12-08T00:29:31Z</settlementTimeUTC>
|
120
|
+
<settlementTimeLocal>2010-12-07T16:29:31</settlementTimeLocal>
|
121
|
+
<settlementState>settledSuccessfully</settlementState>
|
122
|
+
<paymentMethod>creditCard</paymentMethod>
|
123
|
+
<statistics>
|
124
|
+
<statistic>
|
125
|
+
<accountType>Visa</accountType>
|
126
|
+
<chargeAmount>786.22</chargeAmount>
|
127
|
+
<chargeCount>17</chargeCount>
|
128
|
+
<refundAmount>0.00</refundAmount>
|
129
|
+
<refundCount>0</refundCount>
|
130
|
+
<voidCount>4</voidCount>
|
131
|
+
<declineCount>0</declineCount>
|
132
|
+
<errorCount>0</errorCount>
|
133
|
+
</statistic>
|
134
|
+
</statistics>
|
135
|
+
</batch>
|
136
|
+
<batch>
|
137
|
+
<batchId>835509</batchId>
|
138
|
+
<settlementTimeUTC>2010-12-08T09:40:51Z</settlementTimeUTC>
|
139
|
+
<settlementTimeLocal>2010-12-08T01:40:51</settlementTimeLocal>
|
140
|
+
<settlementState>settledSuccessfully</settlementState>
|
141
|
+
<paymentMethod>creditCard</paymentMethod>
|
142
|
+
<statistics>
|
143
|
+
<statistic>
|
144
|
+
<accountType>Visa</accountType>
|
145
|
+
<chargeAmount>180.00</chargeAmount>
|
146
|
+
<chargeCount>18</chargeCount>
|
147
|
+
<refundAmount>0.00</refundAmount>
|
148
|
+
<refundCount>0</refundCount>
|
149
|
+
<voidCount>0</voidCount>
|
150
|
+
<declineCount>0</declineCount>
|
151
|
+
<errorCount>0</errorCount>
|
152
|
+
</statistic>
|
153
|
+
</statistics>
|
154
|
+
</batch>
|
155
|
+
<batch>
|
156
|
+
<batchId>835896</batchId>
|
157
|
+
<settlementTimeUTC>2010-12-08T17:21:43Z</settlementTimeUTC>
|
158
|
+
<settlementTimeLocal>2010-12-08T09:21:43</settlementTimeLocal>
|
159
|
+
<settlementState>settledSuccessfully</settlementState>
|
160
|
+
<paymentMethod>creditCard</paymentMethod>
|
161
|
+
<statistics>
|
162
|
+
<statistic>
|
163
|
+
<accountType>Visa</accountType>
|
164
|
+
<chargeAmount>3357.32</chargeAmount>
|
165
|
+
<chargeCount>67</chargeCount>
|
166
|
+
<refundAmount>0.00</refundAmount>
|
167
|
+
<refundCount>0</refundCount>
|
168
|
+
<voidCount>16</voidCount>
|
169
|
+
<declineCount>1</declineCount>
|
170
|
+
<errorCount>0</errorCount>
|
171
|
+
</statistic>
|
172
|
+
</statistics>
|
173
|
+
</batch>
|
174
|
+
<batch>
|
175
|
+
<batchId>836099</batchId>
|
176
|
+
<settlementTimeUTC>2010-12-08T19:52:26Z</settlementTimeUTC>
|
177
|
+
<settlementTimeLocal>2010-12-08T11:52:26</settlementTimeLocal>
|
178
|
+
<settlementState>settledSuccessfully</settlementState>
|
179
|
+
<paymentMethod>creditCard</paymentMethod>
|
180
|
+
<statistics>
|
181
|
+
<statistic>
|
182
|
+
<accountType>Visa</accountType>
|
183
|
+
<chargeAmount>973.24</chargeAmount>
|
184
|
+
<chargeCount>17</chargeCount>
|
185
|
+
<refundAmount>0.00</refundAmount>
|
186
|
+
<refundCount>0</refundCount>
|
187
|
+
<voidCount>4</voidCount>
|
188
|
+
<declineCount>0</declineCount>
|
189
|
+
<errorCount>0</errorCount>
|
190
|
+
</statistic>
|
191
|
+
<statistic>
|
192
|
+
<accountType>MasterCard</accountType>
|
193
|
+
<chargeAmount>973.24</chargeAmount>
|
194
|
+
<chargeCount>17</chargeCount>
|
195
|
+
<refundAmount>0.00</refundAmount>
|
196
|
+
<refundCount>0</refundCount>
|
197
|
+
<voidCount>4</voidCount>
|
198
|
+
<declineCount>0</declineCount>
|
199
|
+
<errorCount>0</errorCount>
|
200
|
+
</statistic>
|
201
|
+
</statistics>
|
202
|
+
</batch>
|
203
|
+
</batchList>
|
204
|
+
</getSettledBatchListResponse>'
|
205
|
+
end
|
206
|
+
|
207
|
+
it "should be able to build a batch statistics entity" do
|
208
|
+
# stub our connection response
|
209
|
+
net_response = Net::HTTPOK.new('1.1', 200, 'OK')
|
210
|
+
net_response.stub!(:body).and_return(@response)
|
211
|
+
connection = Net::HTTP.new('http://www.example.com')
|
212
|
+
connection.stub!(:start).and_return(net_response)
|
213
|
+
Net::HTTP.stub!(:new).and_return(connection)
|
214
|
+
|
215
|
+
transaction = AuthorizeNet::Reporting::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
|
216
|
+
transaction.should respond_to(:get_settled_batch_list)
|
217
|
+
response = transaction.get_settled_batch_list(nil, nil, true)
|
218
|
+
response.success?.should be_true
|
219
|
+
response.should respond_to(:batch_list)
|
220
|
+
batches = response.batch_list
|
221
|
+
batches.length.should == 6
|
222
|
+
batches.each do |batch|
|
223
|
+
batch.statistics.should be_kind_of(Array)
|
224
|
+
batch.statistics[0].should be_kind_of(AuthorizeNet::Reporting::BatchStatistics)
|
225
|
+
if batch.id == '836099'
|
226
|
+
batch.statistics.length.should == 2
|
227
|
+
batch.statistics[1].account_type.should == 'MasterCard'
|
228
|
+
batch.payment_method.should == 'creditCard'
|
229
|
+
batch.statistics[1].charge_amount.should == 973.24
|
230
|
+
batch.statistics[1].void_count.should == 4
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
describe "parsing transaction details" do
|
237
|
+
it "should be able to build a transaction details object from the transaction list response" do
|
238
|
+
@response = '<getTransactionListResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
|
239
|
+
<messages>
|
240
|
+
<resultCode>Ok</resultCode>
|
241
|
+
<message>
|
242
|
+
<code>I00001</code>
|
243
|
+
<text>Successful.</text>
|
244
|
+
</message>
|
245
|
+
</messages>
|
246
|
+
<transactions>
|
247
|
+
<transaction>
|
248
|
+
<transId>2156238989</transId>
|
249
|
+
<submitTimeUTC>2010-12-07T23:50:02Z</submitTimeUTC>
|
250
|
+
<submitTimeLocal>2010-12-07T15:50:02</submitTimeLocal>
|
251
|
+
<transactionStatus>settledSuccessfully</transactionStatus>
|
252
|
+
<accountType>Visa</accountType>
|
253
|
+
<accountNumber>XXXX1111</accountNumber>
|
254
|
+
<settleAmount>38.37</settleAmount>
|
255
|
+
</transaction>
|
256
|
+
<transaction>
|
257
|
+
<transId>2156238988</transId>
|
258
|
+
<submitTimeUTC>2010-12-07T23:50:01Z</submitTimeUTC>
|
259
|
+
<submitTimeLocal>2010-12-07T15:50:01</submitTimeLocal>
|
260
|
+
<transactionStatus>voided</transactionStatus>
|
261
|
+
<accountType>Visa</accountType>
|
262
|
+
<accountNumber>XXXX1111</accountNumber>
|
263
|
+
<settleAmount>0.00</settleAmount>
|
264
|
+
</transaction>
|
265
|
+
<transaction>
|
266
|
+
<transId>2156246780</transId>
|
267
|
+
<submitTimeUTC>2010-12-08T09:31:01Z</submitTimeUTC>
|
268
|
+
<submitTimeLocal>2010-12-08T01:31:01</submitTimeLocal>
|
269
|
+
<transactionStatus>settledSuccessfully</transactionStatus>
|
270
|
+
<invoiceNumber>0.0119129953556076</invoiceNumber>
|
271
|
+
<firstName>John</firstName>
|
272
|
+
<lastName>Doe</lastName>
|
273
|
+
<accountType>Visa</accountType>
|
274
|
+
<accountNumber>XXXX1111</accountNumber>
|
275
|
+
<settleAmount>10.00</settleAmount>
|
276
|
+
</transaction>
|
277
|
+
</transactions>
|
278
|
+
</getTransactionListResponse>'
|
279
|
+
|
280
|
+
# stub our connection response
|
281
|
+
net_response = Net::HTTPOK.new('1.1', 200, 'OK')
|
282
|
+
net_response.stub!(:body).and_return(@response)
|
283
|
+
connection = Net::HTTP.new('http://www.example.com')
|
284
|
+
connection.stub!(:start).and_return(net_response)
|
285
|
+
Net::HTTP.stub!(:new).and_return(connection)
|
286
|
+
|
287
|
+
transaction = AuthorizeNet::Reporting::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
|
288
|
+
transaction.should respond_to(:get_transaction_list)
|
289
|
+
response = transaction.get_settled_batch_list('111111')
|
290
|
+
response.success?.should be_true
|
291
|
+
response.should respond_to(:transactions)
|
292
|
+
transactions = response.transactions
|
293
|
+
transactions.length.should == 3
|
294
|
+
transactions[0].account_type.should == 'Visa'
|
295
|
+
transactions[0].settle_amount.should == 38.37
|
296
|
+
transactions[0].submitted_at.should == DateTime.parse('2010-12-07T23:50:02Z')
|
297
|
+
transactions[0].status = 'voided'
|
298
|
+
customer = transactions[2].customer
|
299
|
+
customer.nil?.should be_false
|
300
|
+
customer.address.nil?.should be_false
|
301
|
+
customer.address.first_name.should == 'John'
|
302
|
+
customer.address.last_name.should == 'Doe'
|
303
|
+
order = transactions[2].order
|
304
|
+
order.nil?.should be_false
|
305
|
+
order.invoice_num.should == '0.0119129953556076'
|
306
|
+
end
|
307
|
+
|
308
|
+
it "should be able to build a transaction details object from the transaction details response" do
|
309
|
+
@response = '<getTransactionDetailsResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
|
310
|
+
<messages>
|
311
|
+
<resultCode>Ok</resultCode>
|
312
|
+
<message>
|
313
|
+
<code>I00001</code>
|
314
|
+
<text>Successful.</text>
|
315
|
+
</message>
|
316
|
+
</messages>
|
317
|
+
<transaction>
|
318
|
+
<transId>2156246780</transId>
|
319
|
+
<submitTimeUTC>2010-12-08T09:31:01.01Z</submitTimeUTC>
|
320
|
+
<submitTimeLocal>2010-12-08T01:31:01.01</submitTimeLocal>
|
321
|
+
<transactionType>authCaptureTransaction</transactionType>
|
322
|
+
<transactionStatus>settledSuccessfully</transactionStatus>
|
323
|
+
<responseCode>1</responseCode>
|
324
|
+
<responseReasonCode>1</responseReasonCode>
|
325
|
+
<responseReasonDescription>Approval</responseReasonDescription>
|
326
|
+
<authCode>5N3WKF</authCode>
|
327
|
+
<AVSResponse>Y</AVSResponse>
|
328
|
+
<batch>
|
329
|
+
<batchId>835509</batchId>
|
330
|
+
<settlementTimeUTC>2010-12-08T09:40:51.12Z</settlementTimeUTC>
|
331
|
+
<settlementTimeLocal>2010-12-08T01:40:51.12</settlementTimeLocal>
|
332
|
+
<settlementState>settledSuccessfully</settlementState>
|
333
|
+
</batch>
|
334
|
+
<order>
|
335
|
+
<invoiceNumber>0.0119129953556076</invoiceNumber>
|
336
|
+
<description>a test subscription</description>
|
337
|
+
</order>
|
338
|
+
<authAmount>10.00</authAmount>
|
339
|
+
<settleAmount>10.00</settleAmount>
|
340
|
+
<lineItems>
|
341
|
+
<lineItem>
|
342
|
+
<itemId>ITEM00001</itemId>
|
343
|
+
<name>name of item sold</name>
|
344
|
+
<description>Description of item sold</description>
|
345
|
+
<quantity>1</quantity>
|
346
|
+
<unitPrice>6.95</unitPrice>
|
347
|
+
<taxable>true</taxable>
|
348
|
+
</lineItem>
|
349
|
+
<lineItem>
|
350
|
+
<itemId>ITEM00002</itemId>
|
351
|
+
<name>name of item sold</name>
|
352
|
+
<description>Description of item sold</description>
|
353
|
+
<quantity>1</quantity>
|
354
|
+
<unitPrice>7.95</unitPrice>
|
355
|
+
<taxable>true</taxable>
|
356
|
+
</lineItem>
|
357
|
+
</lineItems>
|
358
|
+
<taxExempt>false</taxExempt>
|
359
|
+
<payment>
|
360
|
+
<creditCard>
|
361
|
+
<cardNumber>XXXX1111</cardNumber>
|
362
|
+
<expirationDate>XXXX</expirationDate>
|
363
|
+
<cardType>Visa</cardType>
|
364
|
+
</creditCard>
|
365
|
+
</payment>
|
366
|
+
<customer>
|
367
|
+
<type>individual</type>
|
368
|
+
<id>ABC00001</id>
|
369
|
+
<email>mark@example.com</email>
|
370
|
+
</customer>
|
371
|
+
<billTo>
|
372
|
+
<firstName>John</firstName>
|
373
|
+
<lastName>Doe</lastName>
|
374
|
+
</billTo>
|
375
|
+
<recurringBilling>false</recurringBilling>
|
376
|
+
<customerIP>127.0.0.1</customerIP>
|
377
|
+
</transaction>
|
378
|
+
</getTransactionDetailsResponse>'
|
379
|
+
|
380
|
+
# stub our connection response
|
381
|
+
net_response = Net::HTTPOK.new('1.1', 200, 'OK')
|
382
|
+
net_response.stub!(:body).and_return(@response)
|
383
|
+
connection = Net::HTTP.new('http://www.example.com')
|
384
|
+
connection.stub!(:start).and_return(net_response)
|
385
|
+
Net::HTTP.stub!(:new).and_return(connection)
|
386
|
+
|
387
|
+
transaction = AuthorizeNet::Reporting::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
|
388
|
+
transaction.should respond_to(:get_transaction_details)
|
389
|
+
response = transaction.get_transaction_details('2156246780')
|
390
|
+
response.success?.should be_true
|
391
|
+
response.should respond_to(:transaction)
|
392
|
+
transaction = response.transaction
|
393
|
+
|
394
|
+
transaction.should be_kind_of(AuthorizeNet::Reporting::TransactionDetails)
|
395
|
+
transaction.response_code.should == "1"
|
396
|
+
transaction.response_reason_code.should == "1"
|
397
|
+
transaction.response_reason_description.should == "Approval"
|
398
|
+
transaction.auth_code.should == "5N3WKF"
|
399
|
+
transaction.avs_response.should == 'Y'
|
400
|
+
transaction.auth_amount.should == 10.00
|
401
|
+
transaction.settle_amount.should == 10.00
|
402
|
+
transaction.recurring_billing.should be_true
|
403
|
+
|
404
|
+
transaction.order.should be_kind_of(AuthorizeNet::Order)
|
405
|
+
transaction.order.line_items.should be_kind_of(Array)
|
406
|
+
transaction.order.line_items.length.should == 2
|
407
|
+
transaction.order.line_items[0].should be_kind_of(AuthorizeNet::LineItem)
|
408
|
+
transaction.order.tax_exempt.should be_false
|
409
|
+
|
410
|
+
transaction.payment_method.should be_kind_of(AuthorizeNet::CreditCard)
|
411
|
+
transaction.payment_method.card_number.should == 'XXXX1111'
|
412
|
+
|
413
|
+
transaction.batch.should be_kind_of(AuthorizeNet::Reporting::Batch)
|
414
|
+
transaction.batch.id.should == '835509'
|
415
|
+
transaction.batch.settled_at.should == DateTime.civil(2010, 12, 8, 9, 40, 51)
|
416
|
+
|
417
|
+
transaction.bill_to.should be_kind_of(AuthorizeNet::Address)
|
418
|
+
transaction.bill_to.first_name.should == 'John'
|
419
|
+
transaction.bill_to.last_name.should == 'Doe'
|
420
|
+
|
421
|
+
transaction.customer.should be_kind_of(AuthorizeNet::Customer)
|
422
|
+
transaction.customer.ip.should == '127.0.0.1'
|
423
|
+
transaction.customer.id.should == 'ABC00001'
|
424
|
+
transaction.customer.email.should == 'mark@example.com'
|
425
|
+
transaction.customer.payment_profiles.should be_kind_of(Array)
|
426
|
+
transaction.customer.payment_profiles.length.should == 1
|
427
|
+
transaction.customer.payment_profiles[0].cust_type.should == 'individual'
|
428
|
+
end
|
429
|
+
end
|
430
|
+
|
431
|
+
end
|
data/spec/sim_spec.rb
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe AuthorizeNet::SIM::Transaction do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
begin
|
7
|
+
creds = YAML.load_file(File.dirname(__FILE__) + "/credentials.yml")
|
8
|
+
@api_key = creds['api_transaction_key']
|
9
|
+
@api_login = creds['api_login_id']
|
10
|
+
rescue Errno::ENOENT => e
|
11
|
+
@api_key = "TEST"
|
12
|
+
@api_login = "TEST"
|
13
|
+
warn "WARNING: Running w/o valid AuthorizeNet sandbox credentials. Create spec/credentials.yml."
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
before do
|
18
|
+
@amount = 10.00
|
19
|
+
@fingerprint = 'a8ea7b27729daf76d4a67bdb7d0a2fa3'
|
20
|
+
@sequence = '123456789'
|
21
|
+
@timestamp = '987654321'
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should support instantiation" do
|
25
|
+
AuthorizeNet::SIM::Transaction.new(@api_login, @api_key, @amount).should be_instance_of(AuthorizeNet::SIM::Transaction)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should generate a correct fingerprint" do
|
29
|
+
transaction = AuthorizeNet::SIM::Transaction.new('TEST', 'TEST', @amount, :sequence => @sequence, :timestamp => @timestamp)
|
30
|
+
transaction.fingerprint.should == @fingerprint
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should provide the actual values used to build the fingerprint" do
|
34
|
+
transaction = AuthorizeNet::SIM::Transaction.new('TEST', 'TEST', @amount)
|
35
|
+
hash = transaction.fingerprint_fields
|
36
|
+
transaction2 = AuthorizeNet::SIM::Transaction.new('TEST', 'TEST', @amount, :sequence => hash[:fp_sequence], :timestamp => hash[:fp_timestamp])
|
37
|
+
hash[:fp_hash].should == transaction2.fingerprint
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should provide a hash of all the form fields, ready for conversion to HTML" do
|
41
|
+
transaction = AuthorizeNet::SIM::Transaction.new('TEST', 'TEST', @amount)
|
42
|
+
transaction.form_fields.should be_kind_of(Hash)
|
43
|
+
transaction.form_fields.should have_key(:x_fp_hash)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should know if its in test mode" do
|
47
|
+
transaction = AuthorizeNet::SIM::Transaction.new(@api_login, @api_key, @amount, :test => true)
|
48
|
+
transaction.test?.should be_true
|
49
|
+
transaction = AuthorizeNet::SIM::Transaction.new(@api_login, @api_key, @amount, :test => false)
|
50
|
+
transaction.test?.should be_false
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe AuthorizeNet::SIM::Response do
|
55
|
+
|
56
|
+
before :all do
|
57
|
+
begin
|
58
|
+
creds = YAML.load_file(File.dirname(__FILE__) + "/credentials.yml")
|
59
|
+
@api_key = creds['api_transaction_key']
|
60
|
+
@api_login = creds['api_login_id']
|
61
|
+
rescue Errno::ENOENT => e
|
62
|
+
@api_key = "TEST"
|
63
|
+
@api_login = "TEST"
|
64
|
+
warn "WARNING: Running w/o valid AuthorizeNet sandbox credentials. Create spec/credentials.yml."
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
before do
|
69
|
+
@amount = (rand(10000) + 100) / 100.0
|
70
|
+
@fingerprint = 'a8ea7b27729daf76d4a67bdb7d0a2fa3'
|
71
|
+
@sequence = '123456789'
|
72
|
+
@timestamp = '987654321'
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should support instantiation" do
|
76
|
+
AuthorizeNet::SIM::Response.new('').should be_instance_of(AuthorizeNet::SIM::Response)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should support parsing the response into fields" do
|
80
|
+
response = AuthorizeNet::SIM::Response.new('x_first_name=John&x_last_name=Doe')
|
81
|
+
response.fields.should have_key(:first_name)
|
82
|
+
response.fields.should have_key(:last_name)
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should be able to build a Direct Post Method URL with fields from the response" do
|
86
|
+
response = AuthorizeNet::SIM::Response.new('x_first_name=John&x_last_name=Doe')
|
87
|
+
response.direct_post_url('http://www.example.com/').should == 'http://www.example.com/?x_first_name=John&x_last_name=Doe'
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe AuthorizeNet::SIM::HostedPaymentForm do
|
92
|
+
it "should support instantiation" do
|
93
|
+
AuthorizeNet::SIM::HostedPaymentForm.new().should be_instance_of(AuthorizeNet::SIM::HostedPaymentForm)
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
|