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.
Files changed (79) hide show
  1. data/License.pdf +0 -0
  2. data/README.rdoc +124 -0
  3. data/Rakefile +74 -0
  4. data/generators/authorize_net_direct_post/USAGE +20 -0
  5. data/generators/authorize_net_direct_post/authorize_net_direct_post_generator.rb +21 -0
  6. data/generators/authorize_net_direct_post/templates/README-AuthorizeNet +49 -0
  7. data/generators/authorize_net_direct_post/templates/config.yml.erb +8 -0
  8. data/generators/authorize_net_direct_post/templates/config.yml.rails3.erb +8 -0
  9. data/generators/authorize_net_direct_post/templates/controller.rb.erb +31 -0
  10. data/generators/authorize_net_direct_post/templates/initializer.rb +4 -0
  11. data/generators/authorize_net_direct_post/templates/layout.erb +18 -0
  12. data/generators/authorize_net_direct_post/templates/payment.erb +10 -0
  13. data/generators/authorize_net_direct_post/templates/payment.rails3.erb +10 -0
  14. data/generators/authorize_net_direct_post/templates/receipt.erb +1 -0
  15. data/generators/authorize_net_direct_post/templates/relay_response.erb +1 -0
  16. data/generators/authorize_net_sim/USAGE +20 -0
  17. data/generators/authorize_net_sim/authorize_net_sim_generator.rb +19 -0
  18. data/generators/authorize_net_sim/templates/README-AuthorizeNet +52 -0
  19. data/generators/authorize_net_sim/templates/config.yml.erb +8 -0
  20. data/generators/authorize_net_sim/templates/config.yml.rails3.erb +8 -0
  21. data/generators/authorize_net_sim/templates/controller.rb.erb +21 -0
  22. data/generators/authorize_net_sim/templates/initializer.rb +4 -0
  23. data/generators/authorize_net_sim/templates/layout.erb +18 -0
  24. data/generators/authorize_net_sim/templates/payment.erb +6 -0
  25. data/generators/authorize_net_sim/templates/payment.rails3.erb +6 -0
  26. data/generators/authorize_net_sim/templates/thank_you.erb +1 -0
  27. data/generators/generator_extensions.rb +75 -0
  28. data/init.rb +2 -0
  29. data/install.rb +1 -0
  30. data/lib/app/helpers/authorize_net_helper.rb +24 -0
  31. data/lib/authorize-net.rb +4 -0
  32. data/lib/authorize_net.rb +92 -0
  33. data/lib/authorize_net/addresses/address.rb +29 -0
  34. data/lib/authorize_net/addresses/shipping_address.rb +26 -0
  35. data/lib/authorize_net/aim/response.rb +131 -0
  36. data/lib/authorize_net/aim/transaction.rb +184 -0
  37. data/lib/authorize_net/arb/response.rb +34 -0
  38. data/lib/authorize_net/arb/subscription.rb +72 -0
  39. data/lib/authorize_net/arb/transaction.rb +146 -0
  40. data/lib/authorize_net/authorize_net.rb +154 -0
  41. data/lib/authorize_net/cim/customer_profile.rb +19 -0
  42. data/lib/authorize_net/cim/payment_profile.rb +37 -0
  43. data/lib/authorize_net/cim/response.rb +110 -0
  44. data/lib/authorize_net/cim/transaction.rb +678 -0
  45. data/lib/authorize_net/customer.rb +27 -0
  46. data/lib/authorize_net/email_receipt.rb +24 -0
  47. data/lib/authorize_net/fields.rb +736 -0
  48. data/lib/authorize_net/key_value_response.rb +117 -0
  49. data/lib/authorize_net/key_value_transaction.rb +291 -0
  50. data/lib/authorize_net/line_item.rb +25 -0
  51. data/lib/authorize_net/order.rb +42 -0
  52. data/lib/authorize_net/payment_methods/credit_card.rb +74 -0
  53. data/lib/authorize_net/payment_methods/echeck.rb +72 -0
  54. data/lib/authorize_net/reporting/batch.rb +19 -0
  55. data/lib/authorize_net/reporting/batch_statistics.rb +19 -0
  56. data/lib/authorize_net/reporting/fds_filter.rb +11 -0
  57. data/lib/authorize_net/reporting/response.rb +127 -0
  58. data/lib/authorize_net/reporting/transaction.rb +116 -0
  59. data/lib/authorize_net/reporting/transaction_details.rb +25 -0
  60. data/lib/authorize_net/response.rb +27 -0
  61. data/lib/authorize_net/sim/hosted_payment_form.rb +38 -0
  62. data/lib/authorize_net/sim/hosted_receipt_page.rb +37 -0
  63. data/lib/authorize_net/sim/response.rb +142 -0
  64. data/lib/authorize_net/sim/transaction.rb +138 -0
  65. data/lib/authorize_net/transaction.rb +66 -0
  66. data/lib/authorize_net/xml_response.rb +172 -0
  67. data/lib/authorize_net/xml_transaction.rb +275 -0
  68. data/lib/generators/authorize_net/direct_post_generator.rb +51 -0
  69. data/lib/generators/authorize_net/sim_generator.rb +47 -0
  70. data/spec/aim_spec.rb +310 -0
  71. data/spec/arb_spec.rb +191 -0
  72. data/spec/authorize_net_spec.rb +200 -0
  73. data/spec/cim_spec.rb +450 -0
  74. data/spec/reporting_spec.rb +431 -0
  75. data/spec/sim_spec.rb +97 -0
  76. data/spec/spec.opts +5 -0
  77. data/spec/spec_helper.rb +2 -0
  78. data/uninstall.rb +1 -0
  79. metadata +223 -0
@@ -0,0 +1,200 @@
1
+ require "spec_helper"
2
+
3
+ describe AuthorizeNet do
4
+
5
+ it "should have a module called AuthorizeNet" do
6
+ defined?(AuthorizeNet).should be_true
7
+ AuthorizeNet.class.should equal(Module)
8
+ end
9
+
10
+ it "should have a module called AIM" do
11
+ defined?(AuthorizeNet::AIM).should be_true
12
+ AuthorizeNet::AIM.class.should equal(Module)
13
+ end
14
+
15
+ end
16
+
17
+ describe AuthorizeNet::CreditCard do
18
+
19
+ before do
20
+ @card_number = '4111111111111111'
21
+ @expiry = '01' + (Time.now + (3600 * 24 * 365)).strftime('%y')
22
+ end
23
+
24
+ it "should support instantiation" do
25
+ AuthorizeNet::CreditCard.new(@card_number, @expiry).should be_instance_of(AuthorizeNet::CreditCard)
26
+ end
27
+
28
+ it "should support converting itself into a hash" do
29
+ card = AuthorizeNet::CreditCard.new(@card_number, @expiry)
30
+ card.should respond_to(:to_hash)
31
+ card.to_hash.should be_kind_of(Hash)
32
+ end
33
+
34
+ it "should have the right payment method type" do
35
+ card = AuthorizeNet::CreditCard.new(@card_number, @expiry)
36
+ fields = card.to_hash
37
+ fields[:method].should == AuthorizeNet::PaymentMethodType::CREDIT_CARD
38
+ end
39
+
40
+ it "should respond to attributes" do
41
+ card = AuthorizeNet::CreditCard.new(@card_number, @expiry)
42
+ card.card_number.should == @card_number
43
+ card.expiration.should == @expiry
44
+ card.card_code.should be_nil
45
+ end
46
+ end
47
+
48
+ describe AuthorizeNet::ECheck do
49
+
50
+ before do
51
+ @routing_number = '322271627'
52
+ @account_number = '123456789'
53
+ @bank_name = 'JPMorgan Chase Bank'
54
+ @account_holder_name = 'John Doe'
55
+ end
56
+
57
+ it "should support instantiation" do
58
+ AuthorizeNet::ECheck.new(@routing_number, @account_number, @bank_name, @account_holder_name).should be_instance_of(AuthorizeNet::ECheck)
59
+ end
60
+
61
+ it "should support converting itself into a hash" do
62
+ echeck = AuthorizeNet::ECheck.new(@routing_number, @account_number, @bank_name, @account_holder_name)
63
+ echeck.should respond_to(:to_hash)
64
+ echeck.to_hash.should be_kind_of(Hash)
65
+ end
66
+
67
+ it "should support payment method code retrival" do
68
+ echeck = AuthorizeNet::ECheck.new(@routing_number, @account_number, @bank_name, @account_holder_name)
69
+ fields = echeck.to_hash
70
+ fields[:method].should == AuthorizeNet::PaymentMethodType::ECHECK
71
+ end
72
+ end
73
+
74
+ describe AuthorizeNet::Address do
75
+
76
+ before do
77
+ end
78
+
79
+ it "should support instantiation" do
80
+ AuthorizeNet::Address.new.should be_instance_of(AuthorizeNet::Address)
81
+ end
82
+
83
+ it "should support converting itself into a hash" do
84
+ address = AuthorizeNet::Address.new
85
+ address.should respond_to(:to_hash)
86
+ address.to_hash.should be_kind_of(Hash)
87
+ end
88
+
89
+ it "should ignore unknown fields" do
90
+ address = AuthorizeNet::Address.new(:tax => '123')
91
+ hash = address.to_hash
92
+ hash.should be_kind_of(Hash)
93
+ hash.should == {}
94
+ end
95
+
96
+ it "should accept known fields" do
97
+ address = AuthorizeNet::Address.new(:first_name => '123')
98
+ hash = address.to_hash
99
+ hash.should be_kind_of(Hash)
100
+ hash.should == {:first_name => '123'}
101
+ end
102
+ end
103
+
104
+ describe AuthorizeNet::ShippingAddress do
105
+
106
+ before do
107
+ end
108
+
109
+ it "should support instantiation" do
110
+ AuthorizeNet::ShippingAddress.new.should be_instance_of(AuthorizeNet::ShippingAddress)
111
+ end
112
+
113
+ it "should support converting itself into a hash" do
114
+ address = AuthorizeNet::ShippingAddress.new
115
+ address.should respond_to(:to_hash)
116
+ address.to_hash.should be_kind_of(Hash)
117
+ end
118
+
119
+ it "should ignore unknown fields" do
120
+ address = AuthorizeNet::ShippingAddress.new(:pie => '123')
121
+ hash = address.to_hash
122
+ hash.should be_kind_of(Hash)
123
+ hash.should == {}
124
+ end
125
+
126
+ it "should accept known fields" do
127
+ address = AuthorizeNet::ShippingAddress.new(:first_name => '123')
128
+ hash = address.to_hash
129
+ hash.should be_kind_of(Hash)
130
+ hash.should == {:ship_to_first_name => '123'}
131
+ end
132
+ end
133
+
134
+ describe AuthorizeNet::Customer do
135
+
136
+ before do
137
+ end
138
+
139
+ it "should support instantiation" do
140
+ AuthorizeNet::Customer.new.should be_instance_of(AuthorizeNet::Customer)
141
+ end
142
+
143
+ it "should support converting itself into a hash" do
144
+ customer = AuthorizeNet::Customer.new
145
+ customer.should respond_to(:to_hash)
146
+ customer.to_hash.should be_kind_of(Hash)
147
+ end
148
+
149
+ it "should ignore unknown fields" do
150
+ customer = AuthorizeNet::Customer.new(:name => '123')
151
+ hash = customer.to_hash
152
+ hash.should be_kind_of(Hash)
153
+ hash.should == {}
154
+ end
155
+
156
+ it "should accept known fields" do
157
+ customer = AuthorizeNet::Customer.new(:id => '123')
158
+ hash = customer.to_hash
159
+ hash.should be_kind_of(Hash)
160
+ hash.should == {:cust_id => '123'}
161
+ end
162
+
163
+ it "should accept an address record" do
164
+ address = AuthorizeNet::Address.new(:first_name => 'Tester', :last_name => 'Testerson')
165
+ customer = AuthorizeNet::Customer.new(:address => address)
166
+ hash = customer.to_hash
167
+ hash.should be_kind_of(Hash)
168
+ hash.should == {:first_name => 'Tester', :last_name => 'Testerson'}
169
+ end
170
+ end
171
+
172
+ describe AuthorizeNet::EmailReceipt do
173
+
174
+ before do
175
+ end
176
+
177
+ it "should support instantiation" do
178
+ AuthorizeNet::EmailReceipt.new.should be_instance_of(AuthorizeNet::EmailReceipt)
179
+ end
180
+
181
+ it "should support converting itself into a hash" do
182
+ email = AuthorizeNet::EmailReceipt.new
183
+ email.should respond_to(:to_hash)
184
+ email.to_hash.should be_kind_of(Hash)
185
+ end
186
+
187
+ it "should ignore unknown fields" do
188
+ email = AuthorizeNet::EmailReceipt.new(:name => '123')
189
+ hash = email.to_hash
190
+ hash.should be_kind_of(Hash)
191
+ hash.should == {}
192
+ end
193
+
194
+ it "should accept known fields" do
195
+ email = AuthorizeNet::EmailReceipt.new(:header => '123')
196
+ hash = email.to_hash
197
+ hash.should be_kind_of(Hash)
198
+ hash.should == {:header => '123'}
199
+ end
200
+ end
@@ -0,0 +1,450 @@
1
+ require "spec_helper"
2
+
3
+ describe AuthorizeNet::CIM::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
+ @chrs = [('a'..'z'),('A'..'Z'),('0'..'9')].map{|i| i.to_a}.flatten
16
+ end
17
+
18
+ before do
19
+ @gateway = :sandbox
20
+ @credit_card = AuthorizeNet::CreditCard.new('4111111111111111', '01' + (Time.now + (3600 * 24 * 365)).strftime('%y'))
21
+ @profile = AuthorizeNet::CIM::CustomerProfile.new(:email => 'test@example.com', :id => (0..19).map{@chrs[rand(@chrs.length)]}.join)
22
+ @address = AuthorizeNet::Address.new(:first_name => 'Jane', :last_name => 'Doe', :address => '123 Fake St', :city => 'Raccoon Junction', :state => 'WY', :zip => '99999')
23
+ @partial_auth_address = AuthorizeNet::Address.new(:first_name => 'Jane', :last_name => 'Doe', :address => '123 Fake St', :city => 'Raccoon Junction', :state => 'WY', :zip => '46225')
24
+ @payment_profile = AuthorizeNet::CIM::PaymentProfile.new(:payment_method => @credit_card)
25
+ @partial_auth_payment_profile = AuthorizeNet::CIM::PaymentProfile.new(:payment_method => @credit_card, :billing_address => @partial_auth_address)
26
+ end
27
+
28
+ def create_profile(profile)
29
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
30
+ transaction.should respond_to(:create_profile)
31
+ response = transaction.create_profile(profile)
32
+ response.success?.should be_true
33
+ response.profile_id.nil?.should be_false
34
+ return response.profile_id
35
+ end
36
+
37
+ def delete_profile(profile)
38
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
39
+ response = transaction.delete_profile(profile)
40
+ response.success?.should be_true
41
+ end
42
+
43
+ it "should support instantiation" do
44
+ AuthorizeNet::CIM::Transaction.new(@api_login, @api_key).should be_instance_of(AuthorizeNet::CIM::Transaction)
45
+ end
46
+
47
+ it "should not have a response if the transaction hasn't been run" do
48
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => @gateway)
49
+ transaction.has_response?.should be_false
50
+ end
51
+
52
+ it "should support the returning its response object" do
53
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => @gateway)
54
+ transaction.should respond_to(:response)
55
+ end
56
+
57
+ it "should know if its running against the sandbox or not" do
58
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
59
+ transaction.test?.should be_true
60
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :live)
61
+ transaction.test?.should be_false
62
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => 'moose')
63
+ transaction.test?.should be_true
64
+ end
65
+
66
+ it "should be able to create customer profiles" do
67
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
68
+ transaction.should respond_to(:create_profile)
69
+ response = transaction.create_profile(@profile)
70
+ response.success?.should be_true
71
+ response.profile_id.nil?.should be_false
72
+ response.address_ids.nil?.should be_true
73
+ response.payment_profile_ids.nil?.should be_true
74
+ response.validation_responses.nil?.should be_true
75
+ end
76
+
77
+ it "should be able to create customer profiles with payment profiles included" do
78
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
79
+ transaction.should respond_to(:create_profile)
80
+ @profile.payment_profiles = AuthorizeNet::CIM::PaymentProfile.new(:payment_method => @credit_card)
81
+ response = transaction.create_profile(@profile)
82
+ response.success?.should be_true
83
+ response.profile_id.nil?.should be_false
84
+ response.address_ids.nil?.should be_true
85
+ response.payment_profile_ids.nil?.should be_false
86
+ response.validation_responses.nil?.should be_true
87
+ end
88
+
89
+ it "should be able to create customer profiles with payment profiles included and validated" do
90
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
91
+ transaction.should respond_to(:create_profile)
92
+ @profile.payment_profiles = AuthorizeNet::CIM::PaymentProfile.new(:payment_method => @credit_card)
93
+ response = transaction.create_profile(@profile, :validation_mode => :testMode)
94
+ response.success?.should be_true
95
+ response.profile_id.nil?.should be_false
96
+ response.address_ids.nil?.should be_true
97
+ response.payment_profile_ids.nil?.should be_false
98
+ valdiation_responses = response.validation_responses
99
+ valdiation_responses.nil?.should be_false
100
+ valdiation_responses.length.should == 1
101
+ valdiation_responses[0].should be_instance_of(AuthorizeNet::AIM::Response)
102
+ valdiation_responses[0].success?.should be_true
103
+ end
104
+
105
+ it "should be able to delete customer profiles" do
106
+ # create a profile to delete
107
+ profile_id = create_profile(@profile)
108
+
109
+ # delete it
110
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
111
+ transaction.should respond_to(:delete_profile)
112
+ response = transaction.delete_profile(profile_id)
113
+ response.success?.should be_true
114
+ end
115
+
116
+ it "should be able to retrieve customer profiles" do
117
+ # create a profile to fetch
118
+ @profile.payment_profiles = AuthorizeNet::CIM::PaymentProfile.new(:payment_method => @credit_card)
119
+ profile_id = create_profile(@profile)
120
+
121
+ # fetch the profile
122
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
123
+ transaction.should respond_to(:get_profile)
124
+ response = transaction.get_profile(profile_id)
125
+ response.success?.should be_true
126
+ profile = response.profile
127
+ profile.should be_instance_of(AuthorizeNet::CIM::CustomerProfile)
128
+ profile.payment_profiles.length.should == 1
129
+ profile.payment_profiles.first.should be_instance_of(AuthorizeNet::CIM::PaymentProfile)
130
+
131
+ # delete it
132
+ delete_profile(profile)
133
+ end
134
+
135
+ it "should be able to update customer profiles" do
136
+ # build a profile
137
+ profile_id = create_profile(@profile)
138
+
139
+ @profile.customer_profile_id = profile_id
140
+ @profile.fax = '5551112222'
141
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
142
+ transaction.should respond_to(:update_profile)
143
+ response = transaction.update_profile(@profile)
144
+ response.success?.should be_true
145
+
146
+ delete_profile(profile_id)
147
+ end
148
+
149
+ describe "performing actions on payment profiles" do
150
+
151
+ def create_payment_profile(payment_profile, profile, validation_mode = :none)
152
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
153
+ transaction.should respond_to(:create_payment_profile)
154
+ response = transaction.create_payment_profile(payment_profile, profile, :validation_mode => validation_mode)
155
+ response.success?.should be_true
156
+ response.payment_profile_id.nil?.should be_false
157
+ response.validation_responses.nil?.should be_true
158
+ return response.payment_profile_id
159
+ end
160
+
161
+ before do
162
+ @profile.customer_profile_id = create_profile(@profile)
163
+ @payment_profile.customer_payment_profile_id = create_payment_profile(@payment_profile, @profile)
164
+ end
165
+
166
+ after do
167
+ delete_profile(@profile)
168
+ end
169
+
170
+ it "should be able to create payment profiles" do
171
+ # handled by our before/after filters
172
+ end
173
+
174
+ it "should be able to delete payment profiles" do
175
+ # delete the payment profile
176
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
177
+ transaction.should respond_to(:delete_payment_profile)
178
+ response = transaction.delete_payment_profile(@payment_profile, @profile)
179
+ response.success?.should be_true
180
+ end
181
+
182
+ it "should be able to retrieve payment profiles" do
183
+ # get the payment profile
184
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
185
+ transaction.should respond_to(:get_payment_profile)
186
+ response = transaction.get_payment_profile(@payment_profile, @profile)
187
+ response.success?.should be_true
188
+ response.payment_profile.should be_kind_of(AuthorizeNet::CIM::PaymentProfile)
189
+ end
190
+
191
+ it "should be able to update payment profiles" do
192
+ @payment_profile.cust_type = :business
193
+
194
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
195
+ transaction.should respond_to(:update_payment_profile)
196
+ response = transaction.update_payment_profile(@payment_profile, @profile)
197
+ response.success?.should be_true
198
+ end
199
+
200
+ it "should be able to validate payment profiles" do
201
+ @payment_profile.cust_type = :business
202
+
203
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
204
+ transaction.should respond_to(:update_payment_profile)
205
+ response = transaction.update_payment_profile(@payment_profile, @profile, :validation_mode => :testMode)
206
+ response.success?.should be_true
207
+ response.validation_response.nil?.should be_false
208
+ response.validation_response.should be_instance_of(AuthorizeNet::AIM::Response)
209
+ response.validation_response.success?.should be_true
210
+ end
211
+
212
+ describe "should be able to create payment transactions" do
213
+
214
+ before do
215
+ @amount = (rand(10000) + 100) / 100.0
216
+ end
217
+
218
+ it "should support authorization and capture transactions" do
219
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
220
+ transaction.should respond_to(:create_transaction_auth_capture)
221
+ response = transaction.create_transaction_auth_capture(@amount, @profile, @payment_profile, AuthorizeNet::Order.new())
222
+ response.success?.should be_true
223
+ direct_response = response.direct_response
224
+ direct_response.should be_instance_of(AuthorizeNet::AIM::Response)
225
+ direct_response.success?.should be_true
226
+ end
227
+
228
+ it "should support authorization only transactions" do
229
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
230
+ transaction.should respond_to(:create_transaction_auth_only)
231
+ response = transaction.create_transaction_auth_only(@amount, @profile, @payment_profile, AuthorizeNet::Order.new())
232
+ response.success?.should be_true
233
+ direct_response = response.direct_response
234
+ direct_response.should be_instance_of(AuthorizeNet::AIM::Response)
235
+ direct_response.success?.should be_true
236
+ end
237
+
238
+ it "should support prior authorization capture transactions" do
239
+ # create an auth only transaction
240
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
241
+ response = transaction.create_transaction_auth_only(@amount + 10, @profile, @payment_profile, AuthorizeNet::Order.new())
242
+ response.success?.should be_true
243
+ direct_response = response.direct_response
244
+ direct_response.success?.should be_true
245
+
246
+ # capture it
247
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
248
+ transaction.should respond_to(:create_transaction_prior_auth_capture)
249
+ response = transaction.create_transaction_prior_auth_capture(direct_response.transaction_id, @amount)
250
+ response.success?.should be_true
251
+ direct_response = response.direct_response
252
+ direct_response.should be_instance_of(AuthorizeNet::AIM::Response)
253
+ direct_response.success?.should be_true
254
+ end
255
+
256
+ it "should support voiding a transaction" do
257
+ # create a transaction
258
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
259
+ response = transaction.create_transaction_auth_capture(@amount, @profile, @payment_profile, AuthorizeNet::Order.new())
260
+ response.success?.should be_true
261
+ direct_response = response.direct_response
262
+ direct_response.success?.should be_true
263
+
264
+ # void it
265
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
266
+ transaction.should respond_to(:create_transaction_void)
267
+ response = transaction.create_transaction_void(direct_response.transaction_id)
268
+ response.success?.should be_true
269
+ direct_response = response.direct_response
270
+ direct_response.should be_instance_of(AuthorizeNet::AIM::Response)
271
+ direct_response.success?.should be_true
272
+ end
273
+
274
+ it "should support refunding a transaction"
275
+
276
+ it "should support capture only transactions"
277
+
278
+ it "should be able to support multiple payment profiles" do
279
+ @partial_auth_payment_profile.customer_payment_profile_id = create_payment_profile(@partial_auth_payment_profile, @profile)
280
+ @partial_auth_payment_profile.customer_payment_profile_id.nil?.should be_false
281
+ end
282
+
283
+ it "should support validating a payment profile" do
284
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
285
+ transaction.should respond_to(:validate_payment_profile)
286
+ response = transaction.validate_payment_profile(@payment_profile, @profile)
287
+ response.success?.should be_true
288
+ direct_response = response.direct_response
289
+ direct_response.should be_instance_of(AuthorizeNet::AIM::Response)
290
+ direct_response.success?.should be_true
291
+ end
292
+
293
+ it "should support custom delimiters" do
294
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
295
+ response = transaction.create_transaction_auth_capture(@amount, @profile, @payment_profile, AuthorizeNet::Order.new(), :aim_options => {:delim_char => '$'})
296
+ response.success?.should be_true
297
+ direct_response = response.direct_response
298
+ direct_response.success?.should be_true
299
+ end
300
+
301
+ it "should support custom fields" do
302
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
303
+ response = transaction.create_transaction_auth_capture(@amount, @profile, @payment_profile, AuthorizeNet::Order.new(), :custom_fields => {:foo => '123', :bar => '456'})
304
+ response.success?.should be_true
305
+ direct_response = response.direct_response
306
+ direct_response.success?.should be_true
307
+ direct_response.custom_fields[:foo].should == '123'
308
+ direct_response.custom_fields[:bar].should == '456'
309
+ end
310
+
311
+ it "should support custom fields with custom delimeters" do
312
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
313
+ response = transaction.create_transaction_auth_capture(@amount, @profile, @payment_profile, AuthorizeNet::Order.new(), :custom_fields => {:foo => '123', :bar => '456'}, :aim_options => {:delim_char => '$'})
314
+ response.success?.should be_true
315
+ direct_response = response.direct_response
316
+ direct_response.success?.should be_true
317
+ direct_response.custom_fields[:foo].should == '123'
318
+ direct_response.custom_fields[:bar].should == '456'
319
+ end
320
+
321
+ describe "should be able to update split transaction statuses" do
322
+
323
+ before do
324
+ # create partial payment profile
325
+ @partial_auth_payment_profile.customer_payment_profile_id = create_payment_profile(@partial_auth_payment_profile, @profile)
326
+
327
+ # create partial payment transaciton
328
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
329
+ transaction.should respond_to(:create_transaction_auth_capture)
330
+ response = transaction.create_transaction_auth_capture(@amount, @profile, @partial_auth_payment_profile, AuthorizeNet::Order.new(), :aim_options => {:allow_partial_auth => true})
331
+ response.success?.should be_true
332
+ direct_response = response.direct_response
333
+ direct_response.should be_instance_of(AuthorizeNet::AIM::Response)
334
+ direct_response.success?.should be_false
335
+ direct_response.response_code.should == AuthorizeNet::AIM::Response::ResponseCode::HELD
336
+ direct_response.fields[:amount].should == 1.23
337
+ direct_response.fields[:split_tender_id].nil?.should be_false
338
+ new_amount = @amount - direct_response.fields[:amount]
339
+ @split_tender_id = direct_response.fields[:split_tender_id]
340
+
341
+ # create transaction for the remaining value
342
+
343
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
344
+ transaction.should respond_to(:create_transaction_auth_capture)
345
+ response = transaction.create_transaction_auth_capture(new_amount, @profile, @partial_auth_payment_profile, AuthorizeNet::Order.new(), :aim_options => {:split_tender_id => @split_tender_id})
346
+ response.success?.should be_true
347
+ direct_response = response.direct_response
348
+ direct_response.should be_instance_of(AuthorizeNet::AIM::Response)
349
+ direct_response.success?.should be_true
350
+ end
351
+
352
+ it "should be able to complete a split transaction" do
353
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
354
+ transaction.should respond_to(:update_split_tender)
355
+ response = transaction.update_split_tender(@split_tender_id, :completed)
356
+ response.success?.should be_true
357
+ end
358
+
359
+ it "should be able to void a split transaction" do
360
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
361
+ transaction.should respond_to(:update_split_tender)
362
+ response = transaction.update_split_tender(@split_tender_id, :voided)
363
+ response.success?.should be_true
364
+ end
365
+ end
366
+ end
367
+ end
368
+
369
+ describe "performing actions on addresses" do
370
+
371
+ def create_address(address, profile)
372
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
373
+ transaction.should respond_to(:create_address)
374
+ response = transaction.create_address(address, profile)
375
+ response.success?.should be_true
376
+ response.address_id.nil?.should be_false
377
+
378
+ return response.address_id
379
+ end
380
+
381
+ before do
382
+ @profile.customer_profile_id = create_profile(@profile)
383
+ @address.customer_address_id = create_address(@address, @profile)
384
+ end
385
+
386
+ after do
387
+ delete_profile(@profile)
388
+ end
389
+
390
+ it "should be able to create addresses" do
391
+ # our before and after filters handle it all
392
+ end
393
+
394
+ it "should be able to delete addresses" do
395
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
396
+ transaction.should respond_to(:delete_address)
397
+ response = transaction.delete_address(@address, @profile)
398
+ response.success?.should be_true
399
+ end
400
+
401
+ it "should be able to retrieve addresses" do
402
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
403
+ transaction.should respond_to(:get_address)
404
+ response = transaction.get_address(@address, @profile)
405
+ response.success?.should be_true
406
+ response.address.should be_kind_of(AuthorizeNet::Address)
407
+ end
408
+
409
+ it "should be able to update addresses" do
410
+ @address.zip = '55555'
411
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
412
+ transaction.should respond_to(:update_address)
413
+ response = transaction.update_address(@address, @profile)
414
+ response.success?.should be_true
415
+ end
416
+
417
+ end
418
+
419
+ it "should be able to get all profile ids" do
420
+ transaction = AuthorizeNet::CIM::Transaction.new(@api_login, @api_key, :gateway => :sandbox)
421
+ transaction.should respond_to(:get_profile_ids)
422
+ response = transaction.get_profile_ids
423
+ response.should be_kind_of(AuthorizeNet::CIM::Response)
424
+ response.success?.should be_true
425
+ response.profile_ids.nil?.should be_false
426
+ end
427
+ end
428
+
429
+ describe AuthorizeNet::CIM::Response do
430
+
431
+ before :all do
432
+ begin
433
+ creds = YAML.load_file(File.dirname(__FILE__) + "/credentials.yml")
434
+ @api_key = creds['api_transaction_key']
435
+ @api_login = creds['api_login_id']
436
+ rescue Errno::ENOENT => e
437
+ @api_key = "TEST"
438
+ @api_login = "TEST"
439
+ warn "WARNING: Running w/o valid AuthorizeNet sandbox credentials. Create spec/credentials.yml."
440
+ end
441
+ end
442
+
443
+ before do
444
+
445
+ end
446
+
447
+ it "should support instantiation" do
448
+ AuthorizeNet::CIM::Response.new('', nil).should be_instance_of(AuthorizeNet::CIM::Response)
449
+ end
450
+ end