killbill-braintree_blue 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +4 -5
- data/.travis.yml +22 -3
- data/Gemfile +1 -1
- data/Gemfile.head +5 -0
- data/Gemfile.lock +134 -0
- data/Jarfile +9 -8
- data/Jarfile.lock +56 -0
- data/LICENSE +2 -2
- data/README.md +37 -0
- data/VERSION +1 -1
- data/braintree_blue.yml +22 -13
- data/killbill-braintree_blue.gemspec +20 -16
- data/lib/braintree_blue/api.rb +36 -21
- data/lib/braintree_blue/models/payment_method.rb +15 -15
- data/lib/braintree_blue/models/response.rb +2 -4
- data/lib/braintree_blue.rb +0 -1
- data/pom.xml +2 -2
- data/release.sh +34 -14
- data/spec/braintree_blue/base_plugin_spec.rb +7 -11
- data/spec/braintree_blue/braintree_blue_payment_method_spec.rb +36 -32
- data/spec/braintree_blue/braintree_blue_response_spec.rb +27 -21
- data/spec/braintree_blue/remote/integration_spec.rb +75 -20
- metadata +74 -43
@@ -4,30 +4,31 @@ module Killbill #:nodoc:
|
|
4
4
|
|
5
5
|
self.table_name = 'braintree_blue_payment_methods'
|
6
6
|
|
7
|
-
|
7
|
+
# Note: the ActiveMerchant Braintree implementation puts the customer id in the authorization field, not the token
|
8
|
+
def self.from_response(kb_account_id, kb_payment_method_id, kb_tenant_id, b_customer_id, response, options, extra_params = {}, model = ::Killbill::BraintreeBlue::BraintreeBluePaymentMethod)
|
9
|
+
braintree_customer_id = options[:customer] || b_customer_id || self.braintree_customer_id_from_kb_account_id(kb_account_id, kb_tenant_id)
|
8
10
|
|
9
|
-
|
11
|
+
primary_response = response.respond_to?(:responses) ? response.primary_response : response
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
13
|
+
# Unfortunately, the ActiveMerchant Braintree implementation will drop that information when adding a card to an existing customer
|
14
|
+
customer_response = primary_response.params['braintree_customer'] || {}
|
15
|
+
|
16
|
+
token = options[:token] || primary_response.params['credit_card_token']
|
17
|
+
card_response = (customer_response['credit_cards'] || []).first || {}
|
18
|
+
cc_exp_dates = (card_response['expiration_date'] || '').split('/')
|
18
19
|
|
19
20
|
super(kb_account_id,
|
20
21
|
kb_payment_method_id,
|
21
22
|
kb_tenant_id,
|
22
|
-
|
23
|
+
token,
|
23
24
|
response,
|
24
25
|
options,
|
25
26
|
{
|
26
|
-
:braintree_customer_id =>
|
27
|
-
:token
|
27
|
+
:braintree_customer_id => braintree_customer_id,
|
28
|
+
:token => token,
|
28
29
|
:cc_type => card_response['card_type'],
|
29
|
-
:cc_exp_month =>
|
30
|
-
:cc_exp_year =>
|
30
|
+
:cc_exp_month => cc_exp_dates.first,
|
31
|
+
:cc_exp_year => cc_exp_dates.last,
|
31
32
|
:cc_last_4 => card_response['last_4'],
|
32
33
|
:cc_first_name => customer_response['first_name'],
|
33
34
|
:cc_last_name => customer_response['last_name']
|
@@ -49,7 +50,6 @@ module Killbill #:nodoc:
|
|
49
50
|
raise "Kill Bill account #{kb_account_id} mapping to multiple Braintree customers: #{braintree_customer_ids}" if braintree_customer_ids.size > 1
|
50
51
|
braintree_customer_ids.first
|
51
52
|
end
|
52
|
-
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
@@ -7,7 +7,6 @@ module Killbill #:nodoc:
|
|
7
7
|
has_one :braintree_blue_transaction
|
8
8
|
|
9
9
|
def self.from_response(api_call, kb_account_id, kb_payment_id, kb_payment_transaction_id, transaction_type, payment_processor_account_id, kb_tenant_id, response, extra_params = {}, model = ::Killbill::BraintreeBlue::BraintreeBlueResponse)
|
10
|
-
|
11
10
|
super(api_call,
|
12
11
|
kb_account_id,
|
13
12
|
kb_payment_id,
|
@@ -31,7 +30,7 @@ module Killbill #:nodoc:
|
|
31
30
|
}.merge!(extra_params),
|
32
31
|
model)
|
33
32
|
end
|
34
|
-
|
33
|
+
|
35
34
|
def self.search_where_clause(t, search_key)
|
36
35
|
where_clause = t[:params_braintree_customer_id].eq(search_key)
|
37
36
|
.or(t[:params_braintree_customer_credit_card_token].eq(search_key))
|
@@ -40,8 +39,7 @@ module Killbill #:nodoc:
|
|
40
39
|
where_clause = where_clause.and(t[:success].eq(true))
|
41
40
|
|
42
41
|
super.or(where_clause)
|
43
|
-
end
|
44
|
-
|
42
|
+
end
|
45
43
|
end
|
46
44
|
end
|
47
45
|
end
|
data/lib/braintree_blue.rb
CHANGED
data/pom.xml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
2
|
<!--
|
3
|
-
~ Copyright 2014 The Billing Project, LLC
|
3
|
+
~ Copyright 2014-2015 The Billing Project, LLC
|
4
4
|
~
|
5
5
|
~ The Billing Project licenses this file to you under the Apache License, version 2.0
|
6
6
|
~ (the "License"); you may not use this file except in compliance with the
|
@@ -25,7 +25,7 @@
|
|
25
25
|
<groupId>org.kill-bill.billing.plugin.ruby</groupId>
|
26
26
|
<artifactId>braintree_blue-plugin</artifactId>
|
27
27
|
<packaging>pom</packaging>
|
28
|
-
<version>0.0
|
28
|
+
<version>0.1.0</version>
|
29
29
|
<name>braintree_blue-plugin</name>
|
30
30
|
<url>http://github.com/killbill/killbill-braintree_blue-plugin</url>
|
31
31
|
<description>Plugin for accessing BraintreeBlue as a payment gateway</description>
|
data/release.sh
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
set -e
|
2
2
|
|
3
|
+
BUNDLE=${BUNDLE-"bundle exec"}
|
4
|
+
MVN=${MVN-"mvn"}
|
5
|
+
|
3
6
|
if [ 'GNU' != "$(tar --help | grep GNU | head -1 | awk '{print $1}')" ]; then
|
4
7
|
echo 'Unable to release: make sure to use GNU tar'
|
5
8
|
exit 1
|
@@ -14,28 +17,45 @@ else
|
|
14
17
|
fi
|
15
18
|
|
16
19
|
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
|
20
|
+
if [[ -z "$NO_RELEASE" && "$VERSION" != "$(cat $PWD/VERSION)" ]]; then
|
18
21
|
echo 'Unable to release: make sure the versions in pom.xml and VERSION match'
|
19
22
|
exit 1
|
20
23
|
fi
|
21
24
|
|
22
25
|
echo 'Cleaning up'
|
23
|
-
rake killbill:clean
|
26
|
+
$BUNDLE rake killbill:clean
|
27
|
+
|
28
|
+
echo 'Building gem'
|
29
|
+
$BUNDLE rake build
|
24
30
|
|
25
|
-
|
26
|
-
|
31
|
+
if [[ -z "$NO_RELEASE" ]]; then
|
32
|
+
echo 'Pushing the gem to Rubygems'
|
33
|
+
$BUNDLE rake release
|
34
|
+
fi
|
27
35
|
|
28
36
|
echo 'Building artifact'
|
29
|
-
rake killbill:package
|
37
|
+
$BUNDLE rake killbill:package
|
30
38
|
|
31
39
|
ARTIFACT="$PWD/pkg/killbill-braintree_blue-$VERSION.tar.gz"
|
32
40
|
echo "Pushing $ARTIFACT to Maven Central"
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
41
|
+
|
42
|
+
if [[ -z "$NO_RELEASE" ]]; then
|
43
|
+
GOAL=gpg:sign-and-deploy-file
|
44
|
+
REPOSITORY_ID=ossrh-releases
|
45
|
+
URL=https://oss.sonatype.org/service/local/staging/deploy/maven2/
|
46
|
+
else
|
47
|
+
GOAL=deploy:deploy-file
|
48
|
+
REPOSITORY_ID=sonatype-nexus-snapshots
|
49
|
+
URL=https://oss.sonatype.org/content/repositories/snapshots/
|
50
|
+
VERSION="$VERSION-SNAPSHOT"
|
51
|
+
fi
|
52
|
+
|
53
|
+
$MVN $GOAL \
|
54
|
+
-DgroupId=org.kill-bill.billing.plugin.ruby \
|
55
|
+
-DartifactId=braintree_blue-plugin \
|
56
|
+
-Dversion=$VERSION \
|
57
|
+
-Dpackaging=tar.gz \
|
58
|
+
-DrepositoryId=$REPOSITORY_ID \
|
59
|
+
-Durl=$URL \
|
60
|
+
-Dfile=$ARTIFACT \
|
61
|
+
-DpomFile=pom.xml
|
@@ -1,9 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Killbill::BraintreeBlue::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, 'braintree_blue.yml'),
|
9
|
+
file = File.new(File.join(dir, 'braintree_blue.yml'), 'w+')
|
7
10
|
file.write(<<-eos)
|
8
11
|
:braintree_blue:
|
9
12
|
:test: true
|
@@ -14,11 +17,7 @@ describe Killbill::BraintreeBlue::PaymentPlugin do
|
|
14
17
|
eos
|
15
18
|
file.close
|
16
19
|
|
17
|
-
@plugin
|
18
|
-
@plugin.logger = Logger.new(STDOUT)
|
19
|
-
@plugin.logger.level = Logger::INFO
|
20
|
-
@plugin.conf_dir = File.dirname(file)
|
21
|
-
@plugin.kb_apis = Killbill::Plugin::KillbillApi.new('braintree_blue', {})
|
20
|
+
@plugin = build_plugin(::Killbill::BraintreeBlue::PaymentPlugin, 'braintree_blue', File.dirname(file))
|
22
21
|
|
23
22
|
# Start the plugin here - since the config file will be deleted
|
24
23
|
@plugin.start_plugin
|
@@ -29,8 +28,8 @@ describe Killbill::BraintreeBlue::PaymentPlugin do
|
|
29
28
|
@plugin.stop_plugin
|
30
29
|
end
|
31
30
|
|
32
|
-
it 'should generate forms correctly' do
|
33
31
|
=begin
|
32
|
+
it 'should generate forms correctly' do
|
34
33
|
kb_account_id = SecureRandom.uuid
|
35
34
|
kb_tenant_id = SecureRandom.uuid
|
36
35
|
context = @plugin.kb_apis.create_context(kb_tenant_id)
|
@@ -45,12 +44,9 @@ describe Killbill::BraintreeBlue::PaymentPlugin do
|
|
45
44
|
form.form_url.should == 'https://braintree_blue.com'
|
46
45
|
|
47
46
|
form_fields = @plugin.properties_to_hash(form.form_fields)
|
48
|
-
=end
|
49
47
|
end
|
50
48
|
|
51
49
|
it 'should receive notifications correctly' do
|
52
|
-
=begin
|
53
|
-
|
54
50
|
description = 'description'
|
55
51
|
|
56
52
|
kb_tenant_id = SecureRandom.uuid
|
@@ -59,6 +55,6 @@ describe Killbill::BraintreeBlue::PaymentPlugin do
|
|
59
55
|
|
60
56
|
notification = ""
|
61
57
|
gw_notification = @plugin.process_notification notification, properties, context
|
62
|
-
=end
|
63
58
|
end
|
59
|
+
=end
|
64
60
|
end
|
@@ -11,22 +11,24 @@ describe Killbill::BraintreeBlue::BraintreeBluePaymentMethod do
|
|
11
11
|
do_search('foo', kb_tenant_id).size.should == 0
|
12
12
|
|
13
13
|
pm = Killbill::BraintreeBlue::BraintreeBluePaymentMethod.create :kb_account_id => '11-22-33-44',
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
14
|
+
:kb_payment_method_id => '55-66-77-88',
|
15
|
+
:kb_tenant_id => kb_tenant_id,
|
16
|
+
:braintree_customer_id => '123xka',
|
17
|
+
:token => '38102343',
|
18
|
+
:cc_first_name => 'ccFirstName',
|
19
|
+
:cc_last_name => 'ccLastName',
|
20
|
+
:cc_type => 'ccType',
|
21
|
+
:cc_exp_month => 10,
|
22
|
+
:cc_exp_year => 11,
|
23
|
+
:cc_last_4 => 1234,
|
24
|
+
:address1 => 'address1',
|
25
|
+
:address2 => 'address2',
|
26
|
+
:city => 'city',
|
27
|
+
:state => 'state',
|
28
|
+
:zip => 'zip',
|
29
|
+
:country => 'country',
|
30
|
+
:created_at => Time.now,
|
31
|
+
:updated_at => Time.now
|
30
32
|
|
31
33
|
do_search('foo', kb_tenant_id).size.should == 0
|
32
34
|
do_search(pm.token, kb_tenant_id).size.should == 1
|
@@ -39,22 +41,24 @@ describe Killbill::BraintreeBlue::BraintreeBluePaymentMethod do
|
|
39
41
|
do_search('Name', kb_tenant_id).size.should == 1
|
40
42
|
|
41
43
|
pm2 = Killbill::BraintreeBlue::BraintreeBluePaymentMethod.create :kb_account_id => '22-33-44-55',
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
44
|
+
:kb_payment_method_id => '66-77-88-99',
|
45
|
+
:kb_tenant_id => kb_tenant_id,
|
46
|
+
:braintree_customer_id => '123xka',
|
47
|
+
:token => '49384029302',
|
48
|
+
:cc_first_name => 'ccFirstName',
|
49
|
+
:cc_last_name => 'ccLastName',
|
50
|
+
:cc_type => 'ccType',
|
51
|
+
:cc_exp_month => 10,
|
52
|
+
:cc_exp_year => 11,
|
53
|
+
:cc_last_4 => 1234,
|
54
|
+
:address1 => 'address1',
|
55
|
+
:address2 => 'address2',
|
56
|
+
:city => 'city',
|
57
|
+
:state => 'state',
|
58
|
+
:zip => 'zip',
|
59
|
+
:country => 'country',
|
60
|
+
:created_at => Time.now,
|
61
|
+
:updated_at => Time.now
|
58
62
|
|
59
63
|
do_search('foo', kb_tenant_id).size.should == 0
|
60
64
|
do_search(pm.token, kb_tenant_id).size.should == 1
|
@@ -12,22 +12,26 @@ describe Killbill::BraintreeBlue::BraintreeBlueResponse do
|
|
12
12
|
do_search('foo', kb_tenant_id).size.should == 0
|
13
13
|
|
14
14
|
pm = Killbill::BraintreeBlue::BraintreeBlueResponse.create :api_call => 'charge',
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
15
|
+
:kb_payment_id => '11-22-33-44',
|
16
|
+
:kb_account_id => kb_account_id,
|
17
|
+
:kb_tenant_id => kb_tenant_id,
|
18
|
+
:authorization => 'aa-bb-cc-dd',
|
19
|
+
:params_braintree_customer_id => '123456',
|
20
|
+
:params_braintree_customer_credit_card_token => '38102343',
|
21
|
+
:success => true,
|
22
|
+
:created_at => Time.now,
|
23
|
+
:updated_at => Time.now
|
22
24
|
# Not successful
|
23
25
|
ignored2 = Killbill::BraintreeBlue::BraintreeBlueResponse.create :api_call => 'charge',
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
26
|
+
:kb_payment_id => pm.kb_payment_id,
|
27
|
+
:kb_account_id => kb_account_id,
|
28
|
+
:kb_tenant_id => kb_tenant_id,
|
29
|
+
:authorization => pm.authorization,
|
30
|
+
:params_braintree_customer_id => pm.params_braintree_customer_id,
|
31
|
+
:params_braintree_customer_credit_card_token => pm.params_braintree_customer_credit_card_token,
|
32
|
+
:success => false,
|
33
|
+
:created_at => Time.now,
|
34
|
+
:updated_at => Time.now
|
31
35
|
|
32
36
|
do_search('foo', kb_tenant_id).size.should == 0
|
33
37
|
do_search(pm.authorization, kb_tenant_id).size.should == 1
|
@@ -35,13 +39,15 @@ describe Killbill::BraintreeBlue::BraintreeBlueResponse do
|
|
35
39
|
do_search(pm.params_braintree_customer_credit_card_token, kb_tenant_id).size.should == 1
|
36
40
|
|
37
41
|
pm2 = Killbill::BraintreeBlue::BraintreeBlueResponse.create :api_call => 'charge',
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
:kb_payment_id => '11-22-33-44',
|
43
|
+
:kb_account_id => kb_account_id,
|
44
|
+
:kb_tenant_id => kb_tenant_id,
|
45
|
+
:authorization => 'AA-BB-CC-DD',
|
46
|
+
:params_braintree_customer_id => '1234567',
|
47
|
+
:params_braintree_customer_credit_card_token => pm.params_braintree_customer_credit_card_token,
|
48
|
+
:success => true,
|
49
|
+
:created_at => Time.now,
|
50
|
+
:updated_at => Time.now
|
45
51
|
|
46
52
|
do_search('foo', kb_tenant_id).size.should == 0
|
47
53
|
do_search(pm.authorization, kb_tenant_id).size.should == 1
|
@@ -7,30 +7,28 @@ describe Killbill::BraintreeBlue::PaymentPlugin do
|
|
7
7
|
include ::Killbill::Plugin::ActiveMerchant::RSpec
|
8
8
|
|
9
9
|
before(:each) do
|
10
|
-
|
10
|
+
::Killbill::BraintreeBlue::BraintreeBluePaymentMethod.delete_all
|
11
|
+
::Killbill::BraintreeBlue::BraintreeBlueResponse.delete_all
|
12
|
+
::Killbill::BraintreeBlue::BraintreeBlueTransaction.delete_all
|
11
13
|
|
12
|
-
@
|
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('braintree_blue', 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::BraintreeBlue::PaymentPlugin, 'braintree_blue')
|
24
15
|
@plugin.start_plugin
|
25
16
|
|
17
|
+
@call_context = build_call_context
|
18
|
+
|
26
19
|
@properties = []
|
27
|
-
|
20
|
+
pm_overrides = {
|
21
|
+
# ActiveMerchant wants zip to be a string
|
22
|
+
:zip => '12345',
|
23
|
+
:cc_verification_value => 123
|
24
|
+
}
|
25
|
+
@pm = create_payment_method(::Killbill::BraintreeBlue::BraintreeBluePaymentMethod, nil, @call_context.tenant_id, @properties, pm_overrides)
|
28
26
|
@amount = BigDecimal.new('100')
|
29
27
|
@currency = 'USD'
|
30
28
|
|
31
29
|
kb_payment_id = SecureRandom.uuid
|
32
30
|
1.upto(6) do
|
33
|
-
@kb_payment = @payment_api.add_payment(kb_payment_id)
|
31
|
+
@kb_payment = @plugin.kb_apis.proxied_services[:payment_api].add_payment(kb_payment_id)
|
34
32
|
end
|
35
33
|
end
|
36
34
|
|
@@ -38,8 +36,63 @@ describe Killbill::BraintreeBlue::PaymentPlugin do
|
|
38
36
|
@plugin.stop_plugin
|
39
37
|
end
|
40
38
|
|
39
|
+
# See https://github.com/killbill/killbill-braintree-blue-plugin/issues/3
|
40
|
+
it 'should be able to add multiple cards to the same customer' do
|
41
|
+
kb_account_id = SecureRandom.uuid
|
42
|
+
kb_tenant_id = @call_context.tenant_id
|
43
|
+
::Killbill::BraintreeBlue::BraintreeBluePaymentMethod.braintree_customer_id_from_kb_account_id(kb_account_id, kb_tenant_id).should be_nil
|
44
|
+
|
45
|
+
properties = []
|
46
|
+
pm_overrides = {
|
47
|
+
:zip => '12345',
|
48
|
+
:cc_verification_value => 123
|
49
|
+
}
|
50
|
+
create_payment_method(::Killbill::BraintreeBlue::BraintreeBluePaymentMethod, kb_account_id, kb_tenant_id, properties, pm_overrides.dup)
|
51
|
+
b_customer_id = ::Killbill::BraintreeBlue::BraintreeBluePaymentMethod.braintree_customer_id_from_kb_account_id(kb_account_id, kb_tenant_id)
|
52
|
+
b_customer_id.should_not be_nil
|
53
|
+
|
54
|
+
# Add a second card on the same account (same Braintree customer)
|
55
|
+
pm_overrides[:cc_number] = '4111111111111111'
|
56
|
+
create_payment_method(::Killbill::BraintreeBlue::BraintreeBluePaymentMethod, kb_account_id, kb_tenant_id, properties, pm_overrides.dup)
|
57
|
+
::Killbill::BraintreeBlue::BraintreeBluePaymentMethod.braintree_customer_id_from_kb_account_id(kb_account_id, kb_tenant_id).should == b_customer_id
|
58
|
+
|
59
|
+
pms = @plugin.get_payment_methods(kb_account_id, false, properties, @call_context)
|
60
|
+
pms.size.should == 2
|
61
|
+
|
62
|
+
# Verify tokens are different, and don't match the Braintree customer id
|
63
|
+
pm1 = @plugin.get_payment_method_detail(kb_account_id, pms[0].payment_method_id, properties, @call_context)
|
64
|
+
pm2 = @plugin.get_payment_method_detail(kb_account_id, pms[1].payment_method_id, properties, @call_context)
|
65
|
+
pm1.external_payment_method_id.should_not == pm2.external_payment_method_id
|
66
|
+
pm1.external_payment_method_id.should_not == b_customer_id
|
67
|
+
pm2.external_payment_method_id.should_not == b_customer_id
|
68
|
+
|
69
|
+
# Add a third card on the same account (same Braintree customer)
|
70
|
+
pm_overrides[:cc_number] = '5555555555554444'
|
71
|
+
create_payment_method(::Killbill::BraintreeBlue::BraintreeBluePaymentMethod, kb_account_id, kb_tenant_id, properties, pm_overrides.dup)
|
72
|
+
::Killbill::BraintreeBlue::BraintreeBluePaymentMethod.braintree_customer_id_from_kb_account_id(kb_account_id, kb_tenant_id).should == b_customer_id
|
73
|
+
|
74
|
+
pms = @plugin.get_payment_methods(kb_account_id, false, properties, @call_context)
|
75
|
+
pms.size.should == 3
|
76
|
+
|
77
|
+
# Verify tokens are different, and don't match the Braintree customer id
|
78
|
+
pm1 = @plugin.get_payment_method_detail(kb_account_id, pms[0].payment_method_id, properties, @call_context)
|
79
|
+
pm2 = @plugin.get_payment_method_detail(kb_account_id, pms[1].payment_method_id, properties, @call_context)
|
80
|
+
pm3 = @plugin.get_payment_method_detail(kb_account_id, pms[2].payment_method_id, properties, @call_context)
|
81
|
+
pm1.external_payment_method_id.should_not == pm2.external_payment_method_id
|
82
|
+
pm1.external_payment_method_id.should_not == pm3.external_payment_method_id
|
83
|
+
pm2.external_payment_method_id.should_not == pm3.external_payment_method_id
|
84
|
+
pm1.external_payment_method_id.should_not == b_customer_id
|
85
|
+
pm2.external_payment_method_id.should_not == b_customer_id
|
86
|
+
pm3.external_payment_method_id.should_not == b_customer_id
|
87
|
+
end
|
88
|
+
|
41
89
|
it 'should be able to charge a Credit Card directly' do
|
42
|
-
properties = build_pm_properties
|
90
|
+
properties = build_pm_properties(nil,
|
91
|
+
{
|
92
|
+
# ActiveMerchant wants zip to be a string
|
93
|
+
:zip => '12345',
|
94
|
+
:cc_verification_value => 123
|
95
|
+
})
|
43
96
|
|
44
97
|
# We created the payment method, hence the rows
|
45
98
|
Killbill::BraintreeBlue::BraintreeBlueResponse.all.size.should == 1
|
@@ -53,15 +106,16 @@ describe Killbill::BraintreeBlue::PaymentPlugin do
|
|
53
106
|
responses = Killbill::BraintreeBlue::BraintreeBlueResponse.all
|
54
107
|
responses.size.should == 2
|
55
108
|
responses[0].api_call.should == 'add_payment_method'
|
56
|
-
responses[0].message.should == '
|
109
|
+
responses[0].message.should == 'OK'
|
57
110
|
responses[1].api_call.should == 'purchase'
|
58
|
-
responses[1].message.should == '
|
111
|
+
responses[1].message.should == '1000 Approved'
|
59
112
|
transactions = Killbill::BraintreeBlue::BraintreeBlueTransaction.all
|
60
113
|
transactions.size.should == 1
|
61
114
|
transactions[0].api_call.should == 'purchase'
|
62
115
|
end
|
63
116
|
|
64
|
-
|
117
|
+
# TODO Settlement?
|
118
|
+
xit 'should be able to charge and refund' do
|
65
119
|
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)
|
66
120
|
payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
|
67
121
|
payment_response.amount.should == @amount
|
@@ -74,7 +128,8 @@ describe Killbill::BraintreeBlue::PaymentPlugin do
|
|
74
128
|
refund_response.transaction_type.should == :REFUND
|
75
129
|
end
|
76
130
|
|
77
|
-
|
131
|
+
# TODO Settlement?
|
132
|
+
xit 'should be able to auth, capture and refund' do
|
78
133
|
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)
|
79
134
|
payment_response.status.should eq(:PROCESSED), payment_response.gateway_error
|
80
135
|
payment_response.amount.should == @amount
|