killbill-cybersource 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/release.sh ADDED
@@ -0,0 +1,41 @@
1
+ set -e
2
+
3
+ if [ 'GNU' != "$(tar --help | grep GNU | head -1 | awk '{print $1}')" ]; then
4
+ echo 'Unable to release: make sure to use GNU tar'
5
+ exit 1
6
+ fi
7
+
8
+ if $(ruby -e'require "java"'); then
9
+ # Good
10
+ echo 'Detected JRuby'
11
+ else
12
+ echo 'Unable to release: make sure to use JRuby'
13
+ exit 1
14
+ fi
15
+
16
+ VERSION=`grep -E '<version>([0-9]+\.[0-9]+\.[0-9]+)</version>' pom.xml | sed 's/[\t \n]*<version>\(.*\)<\/version>[\t \n]*/\1/'`
17
+ if [ "$VERSION" != "$(cat $PWD/VERSION)" ]; then
18
+ echo 'Unable to release: make sure the versions in pom.xml and VERSION match'
19
+ exit 1
20
+ fi
21
+
22
+ echo 'Cleaning up'
23
+ rake killbill:clean ; rake build
24
+
25
+ echo 'Pushing the gem to Rubygems'
26
+ rake release
27
+
28
+ echo 'Building artifact'
29
+ rake killbill:package
30
+
31
+ ARTIFACT="$PWD/pkg/killbill-cybersource-$VERSION.tar.gz"
32
+ echo "Pushing $ARTIFACT to Maven Central"
33
+ mvn gpg:sign-and-deploy-file \
34
+ -DgroupId=org.kill-bill.billing.plugin.ruby \
35
+ -DartifactId=cybersource-plugin \
36
+ -Dversion=$VERSION \
37
+ -Dpackaging=tar.gz \
38
+ -DrepositoryId=ossrh-releases \
39
+ -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ \
40
+ -Dfile=$ARTIFACT \
41
+ -DpomFile=pom.xml
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe Killbill::Cybersource::PaymentPlugin do
4
+ before(:each) do
5
+ Dir.mktmpdir do |dir|
6
+ file = File.new(File.join(dir, 'cybersource.yml'), "w+")
7
+ file.write(<<-eos)
8
+ :cybersource:
9
+ :test: true
10
+ # As defined by spec_helper.rb
11
+ :database:
12
+ :adapter: 'sqlite3'
13
+ :database: 'test.db'
14
+ eos
15
+ file.close
16
+
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)
21
+
22
+ # Start the plugin here - since the config file will be deleted
23
+ @plugin.start_plugin
24
+ end
25
+ end
26
+
27
+ it 'should start and stop correctly' do
28
+ @plugin.stop_plugin
29
+ end
30
+ end
@@ -0,0 +1,92 @@
1
+ require 'spec_helper'
2
+
3
+ ActiveMerchant::Billing::Base.mode = :test
4
+
5
+ describe Killbill::Cybersource::PaymentPlugin do
6
+
7
+ include ::Killbill::Plugin::ActiveMerchant::RSpec
8
+
9
+ before(:each) do
10
+ @plugin = Killbill::Cybersource::PaymentPlugin.new
11
+
12
+ @account_api = ::Killbill::Plugin::ActiveMerchant::RSpec::FakeJavaUserAccountApi.new
13
+ svcs = {:account_user_api => @account_api}
14
+ @plugin.kb_apis = Killbill::Plugin::KillbillApi.new('cybersource', svcs)
15
+
16
+ @call_context = Killbill::Plugin::Model::CallContext.new
17
+ @call_context.tenant_id = '00000011-0022-0033-0044-000000000055'
18
+ @call_context = @call_context.to_ruby(@call_context)
19
+
20
+ @plugin.logger = Logger.new(STDOUT)
21
+ @plugin.logger.level = Logger::INFO
22
+ @plugin.conf_dir = File.expand_path(File.dirname(__FILE__) + '../../../../')
23
+ @plugin.start_plugin
24
+ end
25
+
26
+ after(:each) do
27
+ @plugin.stop_plugin
28
+ end
29
+
30
+ it 'should be able to charge a Credit Card directly' do
31
+ properties = build_pm_properties
32
+ amount = BigDecimal.new("100")
33
+ currency = 'USD'
34
+
35
+ payment_response = @plugin.purchase_payment SecureRandom.uuid, SecureRandom.uuid, SecureRandom.uuid, nil, amount, currency, properties, @call_context
36
+ payment_response.amount.should == amount
37
+ payment_response.status.should == :PROCESSED
38
+ payment_response.transaction_type.should == :PURCHASE
39
+ end
40
+
41
+ it 'should be able to charge and refund' do
42
+ pm = create_payment_method(Killbill::Cybersource::CybersourcePaymentMethod, nil, @call_context.tenant_id)
43
+ amount = BigDecimal.new("100")
44
+ currency = 'USD'
45
+ kb_payment_id = SecureRandom.uuid
46
+ kb_payment_transaction_id = SecureRandom.uuid
47
+
48
+ payment_response = @plugin.purchase_payment pm.kb_account_id, kb_payment_id, kb_payment_transaction_id, pm.kb_payment_method_id, amount, currency, [], @call_context
49
+ payment_response.amount.should == amount
50
+ payment_response.status.should == :PROCESSED
51
+ payment_response.transaction_type.should == :PURCHASE
52
+
53
+ # Try a full refund
54
+ refund_response = @plugin.refund_payment pm.kb_account_id, kb_payment_id, kb_payment_transaction_id, pm.kb_payment_method_id, amount, currency, [], @call_context
55
+ refund_response.amount.should == amount
56
+ refund_response.status.should == :PROCESSED
57
+ refund_response.transaction_type.should == :REFUND
58
+ end
59
+
60
+ it 'should be able to auth, capture and refund' do
61
+ pm = create_payment_method(Killbill::Cybersource::CybersourcePaymentMethod, nil, @call_context.tenant_id)
62
+ amount = BigDecimal.new("100")
63
+ currency = 'USD'
64
+ kb_payment_id = SecureRandom.uuid
65
+
66
+ payment_response = @plugin.authorize_payment pm.kb_account_id, kb_payment_id, SecureRandom.uuid, pm.kb_payment_method_id, amount, currency, [], @call_context
67
+ payment_response.amount.should == amount
68
+ payment_response.status.should == :PROCESSED
69
+ payment_response.transaction_type.should == :AUTHORIZE
70
+
71
+ # Try multiple partial captures
72
+ partial_capture_amount = BigDecimal.new("10")
73
+ 1.upto(3) do
74
+ payment_response = @plugin.capture_payment pm.kb_account_id, kb_payment_id, SecureRandom.uuid, pm.kb_payment_method_id, partial_capture_amount, currency, [], @call_context
75
+ payment_response.amount.should == partial_capture_amount
76
+ payment_response.status.should == :PROCESSED
77
+ payment_response.transaction_type.should == :CAPTURE
78
+ end
79
+
80
+ # Try a partial refund
81
+ refund_response = @plugin.refund_payment pm.kb_account_id, kb_payment_id, SecureRandom.uuid, pm.kb_payment_method_id, partial_capture_amount, currency, [], @call_context
82
+ refund_response.amount.should == partial_capture_amount
83
+ refund_response.status.should == :PROCESSED
84
+ refund_response.transaction_type.should == :REFUND
85
+
86
+ # Try to capture again
87
+ payment_response = @plugin.capture_payment pm.kb_account_id, kb_payment_id, SecureRandom.uuid, pm.kb_payment_method_id, partial_capture_amount, currency, [], @call_context
88
+ payment_response.amount.should == partial_capture_amount
89
+ payment_response.status.should == :PROCESSED
90
+ payment_response.transaction_type.should == :CAPTURE
91
+ end
92
+ end
@@ -0,0 +1,24 @@
1
+ require 'bundler'
2
+ require 'cybersource'
3
+ require 'killbill/helpers/active_merchant/killbill_spec_helper'
4
+
5
+ require 'logger'
6
+
7
+ require 'rspec'
8
+
9
+ RSpec.configure do |config|
10
+ config.color_enabled = true
11
+ config.tty = true
12
+ config.formatter = 'documentation'
13
+ end
14
+
15
+ require 'active_record'
16
+ ActiveRecord::Base.establish_connection(
17
+ :adapter => 'sqlite3',
18
+ :database => 'test.db'
19
+ )
20
+ # For debugging
21
+ #ActiveRecord::Base.logger = Logger.new(STDOUT)
22
+ # Create the schema
23
+ require File.expand_path(File.dirname(__FILE__) + '../../db/schema.rb')
24
+
metadata ADDED
@@ -0,0 +1,286 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: killbill-cybersource
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kill Bill core team
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: killbill
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 3.1.9
20
+ requirement: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: 3.1.9
25
+ prerelease: false
26
+ type: :runtime
27
+ - !ruby/object:Gem::Dependency
28
+ name: activemerchant
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.42.9
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: 1.42.9
39
+ prerelease: false
40
+ type: :runtime
41
+ - !ruby/object:Gem::Dependency
42
+ name: activerecord
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 4.1.0
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ~>
51
+ - !ruby/object:Gem::Version
52
+ version: 4.1.0
53
+ prerelease: false
54
+ type: :runtime
55
+ - !ruby/object:Gem::Dependency
56
+ name: actionpack
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 4.1.0
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ~>
65
+ - !ruby/object:Gem::Version
66
+ version: 4.1.0
67
+ prerelease: false
68
+ type: :runtime
69
+ - !ruby/object:Gem::Dependency
70
+ name: actionview
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 4.1.0
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ~>
79
+ - !ruby/object:Gem::Version
80
+ version: 4.1.0
81
+ prerelease: false
82
+ type: :runtime
83
+ - !ruby/object:Gem::Dependency
84
+ name: activesupport
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 4.1.0
90
+ requirement: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ~>
93
+ - !ruby/object:Gem::Version
94
+ version: 4.1.0
95
+ prerelease: false
96
+ type: :runtime
97
+ - !ruby/object:Gem::Dependency
98
+ name: money
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 6.1.1
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ~>
107
+ - !ruby/object:Gem::Version
108
+ version: 6.1.1
109
+ prerelease: false
110
+ type: :runtime
111
+ - !ruby/object:Gem::Dependency
112
+ name: monetize
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 0.3.0
118
+ requirement: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ~>
121
+ - !ruby/object:Gem::Version
122
+ version: 0.3.0
123
+ prerelease: false
124
+ type: :runtime
125
+ - !ruby/object:Gem::Dependency
126
+ name: sinatra
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: 1.3.4
132
+ requirement: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ~>
135
+ - !ruby/object:Gem::Version
136
+ version: 1.3.4
137
+ prerelease: false
138
+ type: :runtime
139
+ - !ruby/object:Gem::Dependency
140
+ name: activerecord-jdbcmysql-adapter
141
+ version_requirements: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ~>
144
+ - !ruby/object:Gem::Version
145
+ version: 1.3.7
146
+ requirement: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ~>
149
+ - !ruby/object:Gem::Version
150
+ version: 1.3.7
151
+ prerelease: false
152
+ type: :runtime
153
+ - !ruby/object:Gem::Dependency
154
+ name: jruby-openssl
155
+ version_requirements: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ~>
158
+ - !ruby/object:Gem::Version
159
+ version: 0.9.4
160
+ requirement: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ~>
163
+ - !ruby/object:Gem::Version
164
+ version: 0.9.4
165
+ prerelease: false
166
+ type: :runtime
167
+ - !ruby/object:Gem::Dependency
168
+ name: jbundler
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: 0.4.1
174
+ requirement: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ~>
177
+ - !ruby/object:Gem::Version
178
+ version: 0.4.1
179
+ prerelease: false
180
+ type: :development
181
+ - !ruby/object:Gem::Dependency
182
+ name: rake
183
+ version_requirements: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '>='
186
+ - !ruby/object:Gem::Version
187
+ version: 10.0.0
188
+ requirement: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - '>='
191
+ - !ruby/object:Gem::Version
192
+ version: 10.0.0
193
+ prerelease: false
194
+ type: :development
195
+ - !ruby/object:Gem::Dependency
196
+ name: rspec
197
+ version_requirements: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ~>
200
+ - !ruby/object:Gem::Version
201
+ version: 2.12.0
202
+ requirement: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - ~>
205
+ - !ruby/object:Gem::Version
206
+ version: 2.12.0
207
+ prerelease: false
208
+ type: :development
209
+ - !ruby/object:Gem::Dependency
210
+ name: activerecord-jdbcsqlite3-adapter
211
+ version_requirements: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ~>
214
+ - !ruby/object:Gem::Version
215
+ version: 1.3.7
216
+ requirement: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - ~>
219
+ - !ruby/object:Gem::Version
220
+ version: 1.3.7
221
+ prerelease: false
222
+ type: :development
223
+ description: Kill Bill payment plugin for Cybersource.
224
+ email: killbilling-users@googlegroups.com
225
+ executables: []
226
+ extensions: []
227
+ extra_rdoc_files: []
228
+ files:
229
+ - .gitignore
230
+ - .travis.yml
231
+ - Gemfile
232
+ - Jarfile
233
+ - LICENSE
234
+ - NEWS
235
+ - README.md
236
+ - Rakefile
237
+ - VERSION
238
+ - config.ru
239
+ - cybersource.yml
240
+ - db/ddl.sql
241
+ - db/schema.rb
242
+ - killbill-cybersource.gemspec
243
+ - killbill.properties
244
+ - lib/cybersource.rb
245
+ - lib/cybersource/api.rb
246
+ - lib/cybersource/application.rb
247
+ - lib/cybersource/models/payment_method.rb
248
+ - lib/cybersource/models/response.rb
249
+ - lib/cybersource/models/transaction.rb
250
+ - lib/cybersource/private_api.rb
251
+ - lib/cybersource/views/form.erb
252
+ - pom.xml
253
+ - release.sh
254
+ - spec/cybersource/base_plugin_spec.rb
255
+ - spec/cybersource/remote/integration_spec.rb
256
+ - spec/spec_helper.rb
257
+ homepage: http://kill-bill.org
258
+ licenses:
259
+ - Apache License (2.0)
260
+ metadata: {}
261
+ post_install_message:
262
+ rdoc_options:
263
+ - --exclude
264
+ - .
265
+ require_paths:
266
+ - lib
267
+ required_ruby_version: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - '>='
270
+ - !ruby/object:Gem::Version
271
+ version: 1.9.3
272
+ required_rubygems_version: !ruby/object:Gem::Requirement
273
+ requirements:
274
+ - - '>='
275
+ - !ruby/object:Gem::Version
276
+ version: '0'
277
+ requirements: []
278
+ rubyforge_project:
279
+ rubygems_version: 2.2.2
280
+ signing_key:
281
+ specification_version: 4
282
+ summary: Plugin to use Cybersource as a gateway.
283
+ test_files:
284
+ - spec/cybersource/base_plugin_spec.rb
285
+ - spec/cybersource/remote/integration_spec.rb
286
+ - spec/spec_helper.rb