killbill-cybersource 0.0.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,9 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Killbill::Cybersource::PaymentPlugin do
4
+
5
+ include ::Killbill::Plugin::ActiveMerchant::RSpec
6
+
4
7
  before(:each) do
5
8
  Dir.mktmpdir do |dir|
6
- file = File.new(File.join(dir, 'cybersource.yml'), "w+")
9
+ file = File.new(File.join(dir, 'cybersource.yml'), 'w+')
7
10
  file.write(<<-eos)
8
11
  :cybersource:
9
12
  :test: true
@@ -14,10 +17,7 @@ describe Killbill::Cybersource::PaymentPlugin do
14
17
  eos
15
18
  file.close
16
19
 
17
- @plugin = Killbill::Cybersource::PaymentPlugin.new
18
- @plugin.logger = Logger.new(STDOUT)
19
- @plugin.logger.level = Logger::INFO
20
- @plugin.conf_dir = File.dirname(file)
20
+ @plugin = build_plugin(::Killbill::Cybersource::PaymentPlugin, 'cybersource', File.dirname(file))
21
21
 
22
22
  # Start the plugin here - since the config file will be deleted
23
23
  @plugin.start_plugin
@@ -7,30 +7,23 @@ describe Killbill::Cybersource::PaymentPlugin do
7
7
  include ::Killbill::Plugin::ActiveMerchant::RSpec
8
8
 
9
9
  before(:each) do
10
- @plugin = Killbill::Cybersource::PaymentPlugin.new
10
+ ::Killbill::Cybersource::CybersourcePaymentMethod.delete_all
11
+ ::Killbill::Cybersource::CybersourceResponse.delete_all
12
+ ::Killbill::Cybersource::CybersourceTransaction.delete_all
11
13
 
12
- @account_api = ::Killbill::Plugin::ActiveMerchant::RSpec::FakeJavaUserAccountApi.new
13
- @payment_api = ::Killbill::Plugin::ActiveMerchant::RSpec::FakeJavaPaymentApi.new
14
- svcs = {:account_user_api => @account_api, :payment_api => @payment_api}
15
- @plugin.kb_apis = Killbill::Plugin::KillbillApi.new('cybersource', svcs)
16
-
17
- @call_context = ::Killbill::Plugin::Model::CallContext.new
18
- @call_context.tenant_id = '00000011-0022-0033-0044-000000000055'
19
- @call_context = @call_context.to_ruby(@call_context)
20
-
21
- @plugin.logger = Logger.new(STDOUT)
22
- @plugin.logger.level = Logger::INFO
23
- @plugin.conf_dir = File.expand_path(File.dirname(__FILE__) + '../../../../')
14
+ @plugin = build_plugin(::Killbill::Cybersource::PaymentPlugin, 'cybersource')
24
15
  @plugin.start_plugin
25
16
 
26
- @pm = create_payment_method(::Killbill::Cybersource::CybersourcePaymentMethod, nil, @call_context.tenant_id)
17
+ @call_context = build_call_context
18
+
19
+ @properties = []
20
+ @pm = create_payment_method(::Killbill::Cybersource::CybersourcePaymentMethod, nil, @call_context.tenant_id, @properties)
27
21
  @amount = BigDecimal.new('100')
28
22
  @currency = 'USD'
29
- @properties = []
30
23
 
31
24
  kb_payment_id = SecureRandom.uuid
32
25
  1.upto(6) do
33
- @kb_payment = @payment_api.add_payment(kb_payment_id)
26
+ @kb_payment = @plugin.kb_apis.proxied_services[:payment_api].add_payment(kb_payment_id)
34
27
  end
35
28
  end
36
29
 
@@ -39,14 +32,19 @@ describe Killbill::Cybersource::PaymentPlugin do
39
32
  end
40
33
 
41
34
  it 'should be able to charge a Credit Card directly and calls should be idempotent' do
35
+ properties = build_pm_properties
36
+
42
37
  # We created the payment method, hence the rows
43
38
  Killbill::Cybersource::CybersourceResponse.all.size.should == 1
44
39
  Killbill::Cybersource::CybersourceTransaction.all.size.should == 0
45
40
 
46
- payment_response = @plugin.purchase_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[0].id, @pm.kb_payment_method_id, @amount, @currency, @properties, @call_context)
41
+ payment_response = @plugin.purchase_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[0].id, @pm.kb_payment_method_id, @amount, @currency, properties, @call_context)
42
+ payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
47
43
  payment_response.amount.should == @amount
48
- payment_response.status.should == :PROCESSED
49
44
  payment_response.transaction_type.should == :PURCHASE
45
+ payment_response.first_payment_reference_id.should_not be_nil
46
+ payment_response.second_payment_reference_id.should_not be_nil
47
+ payment_response.gateway_error_code.should_not be_nil
50
48
 
51
49
  responses = Killbill::Cybersource::CybersourceResponse.all
52
50
  responses.size.should == 2
@@ -62,6 +60,10 @@ describe Killbill::Cybersource::PaymentPlugin do
62
60
  payment_response.amount.should == @amount
63
61
  payment_response.status.should == :PROCESSED
64
62
  payment_response.transaction_type.should == :PURCHASE
63
+ # No extra data when handling dups - use the get API to retrieve the details (what Kill Bill does internally too)
64
+ payment_response.first_payment_reference_id.should be_nil
65
+ payment_response.second_payment_reference_id.should be_nil
66
+ payment_response.gateway_error_code.should be_nil
65
67
 
66
68
  responses = Killbill::Cybersource::CybersourceResponse.all
67
69
  responses.size.should == 3
@@ -81,70 +83,77 @@ describe Killbill::Cybersource::PaymentPlugin do
81
83
 
82
84
  it 'should be able to charge and refund' do
83
85
  payment_response = @plugin.purchase_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[0].id, @pm.kb_payment_method_id, @amount, @currency, @properties, @call_context)
86
+ payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
84
87
  payment_response.amount.should == @amount
85
- payment_response.status.should == :PROCESSED
86
88
  payment_response.transaction_type.should == :PURCHASE
87
89
 
88
90
  # Try a full refund
89
91
  refund_response = @plugin.refund_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[1].id, @pm.kb_payment_method_id, @amount, @currency, @properties, @call_context)
92
+ refund_response.status.should eq(:PROCESSED), refund_response.gateway_error
90
93
  refund_response.amount.should == @amount
91
- refund_response.status.should == :PROCESSED
92
94
  refund_response.transaction_type.should == :REFUND
93
95
  end
94
96
 
95
97
  it 'should be able to auth, capture and refund' do
96
98
  payment_response = @plugin.authorize_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[0].id, @pm.kb_payment_method_id, @amount, @currency, @properties, @call_context)
99
+ payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
97
100
  payment_response.amount.should == @amount
98
- payment_response.status.should == :PROCESSED
99
101
  payment_response.transaction_type.should == :AUTHORIZE
100
102
 
101
103
  # Try multiple partial captures
102
104
  partial_capture_amount = BigDecimal.new('10')
103
105
  1.upto(3) do |i|
104
106
  payment_response = @plugin.capture_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[i].id, @pm.kb_payment_method_id, partial_capture_amount, @currency, @properties, @call_context)
107
+ payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
105
108
  payment_response.amount.should == partial_capture_amount
106
- payment_response.status.should == :PROCESSED
107
109
  payment_response.transaction_type.should == :CAPTURE
108
110
  end
109
111
 
110
112
  # Try a partial refund
111
113
  refund_response = @plugin.refund_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[4].id, @pm.kb_payment_method_id, partial_capture_amount, @currency, @properties, @call_context)
114
+ refund_response.status.should eq(:PROCESSED), refund_response.gateway_error
112
115
  refund_response.amount.should == partial_capture_amount
113
- refund_response.status.should == :PROCESSED
114
116
  refund_response.transaction_type.should == :REFUND
115
117
 
116
118
  # Try to capture again
117
119
  payment_response = @plugin.capture_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[5].id, @pm.kb_payment_method_id, partial_capture_amount, @currency, @properties, @call_context)
120
+ payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
118
121
  payment_response.amount.should == partial_capture_amount
119
- payment_response.status.should == :PROCESSED
120
122
  payment_response.transaction_type.should == :CAPTURE
121
123
  end
122
124
 
123
125
  it 'should be able to auth and void' do
124
126
  payment_response = @plugin.authorize_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[0].id, @pm.kb_payment_method_id, @amount, @currency, @properties, @call_context)
127
+ payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
125
128
  payment_response.amount.should == @amount
126
- payment_response.status.should == :PROCESSED
127
129
  payment_response.transaction_type.should == :AUTHORIZE
128
130
 
129
131
  payment_response = @plugin.void_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[1].id, @pm.kb_payment_method_id, @properties, @call_context)
130
- payment_response.status.should == :PROCESSED
132
+ payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
131
133
  payment_response.transaction_type.should == :VOID
132
134
  end
133
135
 
134
136
  it 'should be able to auth, partial capture and void' do
135
137
  payment_response = @plugin.authorize_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[0].id, @pm.kb_payment_method_id, @amount, @currency, @properties, @call_context)
138
+ payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
136
139
  payment_response.amount.should == @amount
137
- payment_response.status.should == :PROCESSED
138
140
  payment_response.transaction_type.should == :AUTHORIZE
139
141
 
140
142
  partial_capture_amount = BigDecimal.new('10')
141
143
  payment_response = @plugin.capture_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[1].id, @pm.kb_payment_method_id, partial_capture_amount, @currency, @properties, @call_context)
144
+ payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
142
145
  payment_response.amount.should == partial_capture_amount
143
- payment_response.status.should == :PROCESSED
144
146
  payment_response.transaction_type.should == :CAPTURE
145
147
 
146
148
  payment_response = @plugin.void_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[2].id, @pm.kb_payment_method_id, @properties, @call_context)
147
- payment_response.status.should == :PROCESSED
149
+ payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
148
150
  payment_response.transaction_type.should == :VOID
149
151
  end
152
+
153
+ it 'should be able to credit' do
154
+ payment_response = @plugin.credit_payment(@pm.kb_account_id, @kb_payment.id, @kb_payment.transactions[0].id, @pm.kb_payment_method_id, @amount, @currency, @properties, @call_context)
155
+ payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
156
+ payment_response.amount.should == @amount
157
+ payment_response.transaction_type.should == :CREDIT
158
+ end
150
159
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: killbill-cybersource
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kill Bill core team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-02 00:00:00.000000000 Z
11
+ date: 2015-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: killbill
@@ -16,26 +16,40 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 3.1.11
19
+ version: 4.0.0
20
20
  requirement: !ruby/object:Gem::Requirement
21
21
  requirements:
22
22
  - - ~>
23
23
  - !ruby/object:Gem::Version
24
- version: 3.1.11
24
+ version: 4.0.0
25
25
  prerelease: false
26
26
  type: :runtime
27
27
  - !ruby/object:Gem::Dependency
28
- name: activemerchant
28
+ name: sinatra
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.3.4
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: 1.3.4
39
+ prerelease: false
40
+ type: :runtime
41
+ - !ruby/object:Gem::Dependency
42
+ name: thread_safe
29
43
  version_requirements: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - ~>
32
46
  - !ruby/object:Gem::Version
33
- version: 1.42.9
47
+ version: 0.3.4
34
48
  requirement: !ruby/object:Gem::Requirement
35
49
  requirements:
36
50
  - - ~>
37
51
  - !ruby/object:Gem::Version
38
- version: 1.42.9
52
+ version: 0.3.4
39
53
  prerelease: false
40
54
  type: :runtime
41
55
  - !ruby/object:Gem::Dependency
@@ -53,35 +67,49 @@ dependencies:
53
67
  prerelease: false
54
68
  type: :runtime
55
69
  - !ruby/object:Gem::Dependency
56
- name: actionpack
70
+ name: activerecord-bogacs
57
71
  version_requirements: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - ~>
60
74
  - !ruby/object:Gem::Version
61
- version: 4.1.0
75
+ version: '0.3'
62
76
  requirement: !ruby/object:Gem::Requirement
63
77
  requirements:
64
78
  - - ~>
65
79
  - !ruby/object:Gem::Version
66
- version: 4.1.0
80
+ version: '0.3'
67
81
  prerelease: false
68
82
  type: :runtime
69
83
  - !ruby/object:Gem::Dependency
70
- name: actionview
84
+ name: activerecord-jdbc-adapter
71
85
  version_requirements: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - ~>
74
88
  - !ruby/object:Gem::Version
75
- version: 4.1.0
89
+ version: '1.3'
76
90
  requirement: !ruby/object:Gem::Requirement
77
91
  requirements:
78
92
  - - ~>
79
93
  - !ruby/object:Gem::Version
80
- version: 4.1.0
94
+ version: '1.3'
95
+ prerelease: false
96
+ type: :runtime
97
+ - !ruby/object:Gem::Dependency
98
+ name: jruby-openssl
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 0.9.6
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ~>
107
+ - !ruby/object:Gem::Version
108
+ version: 0.9.6
81
109
  prerelease: false
82
110
  type: :runtime
83
111
  - !ruby/object:Gem::Dependency
84
- name: activesupport
112
+ name: actionpack
85
113
  version_requirements: !ruby/object:Gem::Requirement
86
114
  requirements:
87
115
  - - ~>
@@ -95,73 +123,73 @@ dependencies:
95
123
  prerelease: false
96
124
  type: :runtime
97
125
  - !ruby/object:Gem::Dependency
98
- name: money
126
+ name: actionview
99
127
  version_requirements: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - ~>
102
130
  - !ruby/object:Gem::Version
103
- version: 6.1.1
131
+ version: 4.1.0
104
132
  requirement: !ruby/object:Gem::Requirement
105
133
  requirements:
106
134
  - - ~>
107
135
  - !ruby/object:Gem::Version
108
- version: 6.1.1
136
+ version: 4.1.0
109
137
  prerelease: false
110
138
  type: :runtime
111
139
  - !ruby/object:Gem::Dependency
112
- name: monetize
140
+ name: activemerchant
113
141
  version_requirements: !ruby/object:Gem::Requirement
114
142
  requirements:
115
143
  - - ~>
116
144
  - !ruby/object:Gem::Version
117
- version: 0.3.0
145
+ version: 1.48.0
118
146
  requirement: !ruby/object:Gem::Requirement
119
147
  requirements:
120
148
  - - ~>
121
149
  - !ruby/object:Gem::Version
122
- version: 0.3.0
150
+ version: 1.48.0
123
151
  prerelease: false
124
152
  type: :runtime
125
153
  - !ruby/object:Gem::Dependency
126
- name: sinatra
154
+ name: offsite_payments
127
155
  version_requirements: !ruby/object:Gem::Requirement
128
156
  requirements:
129
157
  - - ~>
130
158
  - !ruby/object:Gem::Version
131
- version: 1.3.4
159
+ version: 2.1.0
132
160
  requirement: !ruby/object:Gem::Requirement
133
161
  requirements:
134
162
  - - ~>
135
163
  - !ruby/object:Gem::Version
136
- version: 1.3.4
164
+ version: 2.1.0
137
165
  prerelease: false
138
166
  type: :runtime
139
167
  - !ruby/object:Gem::Dependency
140
- name: activerecord-jdbcmysql-adapter
168
+ name: monetize
141
169
  version_requirements: !ruby/object:Gem::Requirement
142
170
  requirements:
143
171
  - - ~>
144
172
  - !ruby/object:Gem::Version
145
- version: 1.3.7
173
+ version: 1.1.0
146
174
  requirement: !ruby/object:Gem::Requirement
147
175
  requirements:
148
176
  - - ~>
149
177
  - !ruby/object:Gem::Version
150
- version: 1.3.7
178
+ version: 1.1.0
151
179
  prerelease: false
152
180
  type: :runtime
153
181
  - !ruby/object:Gem::Dependency
154
- name: jruby-openssl
182
+ name: money
155
183
  version_requirements: !ruby/object:Gem::Requirement
156
184
  requirements:
157
185
  - - ~>
158
186
  - !ruby/object:Gem::Version
159
- version: 0.9.4
187
+ version: 6.5.1
160
188
  requirement: !ruby/object:Gem::Requirement
161
189
  requirements:
162
190
  - - ~>
163
191
  - !ruby/object:Gem::Version
164
- version: 0.9.4
192
+ version: 6.5.1
165
193
  prerelease: false
166
194
  type: :runtime
167
195
  - !ruby/object:Gem::Dependency
@@ -170,12 +198,12 @@ dependencies:
170
198
  requirements:
171
199
  - - ~>
172
200
  - !ruby/object:Gem::Version
173
- version: 0.4.1
201
+ version: 0.4.3
174
202
  requirement: !ruby/object:Gem::Requirement
175
203
  requirements:
176
204
  - - ~>
177
205
  - !ruby/object:Gem::Version
178
- version: 0.4.1
206
+ version: 0.4.3
179
207
  prerelease: false
180
208
  type: :development
181
209
  - !ruby/object:Gem::Dependency
@@ -207,17 +235,31 @@ dependencies:
207
235
  prerelease: false
208
236
  type: :development
209
237
  - !ruby/object:Gem::Dependency
210
- name: activerecord-jdbcsqlite3-adapter
238
+ name: jdbc-sqlite3
211
239
  version_requirements: !ruby/object:Gem::Requirement
212
240
  requirements:
213
241
  - - ~>
214
242
  - !ruby/object:Gem::Version
215
- version: 1.3.7
243
+ version: '3.7'
216
244
  requirement: !ruby/object:Gem::Requirement
217
245
  requirements:
218
246
  - - ~>
219
247
  - !ruby/object:Gem::Version
220
- version: 1.3.7
248
+ version: '3.7'
249
+ prerelease: false
250
+ type: :development
251
+ - !ruby/object:Gem::Dependency
252
+ name: jdbc-mariadb
253
+ version_requirements: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - ~>
256
+ - !ruby/object:Gem::Version
257
+ version: '1.1'
258
+ requirement: !ruby/object:Gem::Requirement
259
+ requirements:
260
+ - - ~>
261
+ - !ruby/object:Gem::Version
262
+ version: '1.1'
221
263
  prerelease: false
222
264
  type: :development
223
265
  description: Kill Bill payment plugin for Cybersource.
@@ -229,7 +271,10 @@ files:
229
271
  - .gitignore
230
272
  - .travis.yml
231
273
  - Gemfile
274
+ - Gemfile.head
275
+ - Gemfile.lock
232
276
  - Jarfile
277
+ - Jarfile.lock
233
278
  - LICENSE
234
279
  - NEWS
235
280
  - README.md
@@ -255,7 +300,7 @@ files:
255
300
  - spec/cybersource/base_plugin_spec.rb
256
301
  - spec/cybersource/remote/integration_spec.rb
257
302
  - spec/spec_helper.rb
258
- homepage: http://kill-bill.org
303
+ homepage: http://killbill.io
259
304
  licenses:
260
305
  - Apache License (2.0)
261
306
  metadata: {}
@@ -277,11 +322,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
277
322
  version: '0'
278
323
  requirements: []
279
324
  rubyforge_project:
280
- rubygems_version: 2.2.2
325
+ rubygems_version: 2.1.9
281
326
  signing_key:
282
327
  specification_version: 4
283
328
  summary: Plugin to use Cybersource as a gateway.
284
- test_files:
285
- - spec/cybersource/base_plugin_spec.rb
286
- - spec/cybersource/remote/integration_spec.rb
287
- - spec/spec_helper.rb
329
+ test_files: []