killbill-cybersource 0.0.4 → 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.
@@ -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: []