killbill 1.0.0 → 1.0.1

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 (35) hide show
  1. data/Jarfile +3 -2
  2. data/README.md +21 -0
  3. data/VERSION +1 -1
  4. data/killbill.gemspec +4 -2
  5. data/lib/killbill.rb +3 -4
  6. data/lib/killbill/http_servlet.rb +99 -0
  7. data/lib/killbill/jpayment.rb +152 -0
  8. data/lib/killbill/jresponse/jconverter.rb +100 -0
  9. data/lib/killbill/jresponse/jpayment_method_response.rb +89 -0
  10. data/lib/killbill/jresponse/jpayment_method_response_internal.rb +54 -0
  11. data/lib/killbill/jresponse/jpayment_response.rb +59 -0
  12. data/lib/killbill/jresponse/jrefund_response.rb +60 -0
  13. data/lib/killbill/logger.rb +44 -0
  14. data/lib/killbill/payment.rb +16 -8
  15. data/lib/killbill/plugin.rb +59 -26
  16. data/lib/killbill/rake_task.rb +27 -8
  17. data/lib/killbill/response/payment_method_response.rb +31 -0
  18. data/lib/killbill/response/payment_method_response_internal.rb +20 -0
  19. data/lib/killbill/response/payment_response.rb +22 -0
  20. data/lib/killbill/response/payment_status.rb +10 -0
  21. data/lib/killbill/response/refund_response.rb +23 -0
  22. data/spec/killbill/base_plugin_spec.rb +7 -0
  23. data/spec/killbill/config_test.ru +7 -0
  24. data/spec/killbill/jpayment_spec.rb +121 -0
  25. data/spec/killbill/jresponse/jconverter_spec.rb +208 -0
  26. data/spec/killbill/jresponse/jpayment_method_response_internal_spec.rb +34 -0
  27. data/spec/killbill/jresponse/jpayment_method_response_spec.rb +53 -0
  28. data/spec/killbill/jresponse/jpayment_response_spec.rb +41 -0
  29. data/spec/killbill/jresponse/jrefund_response_spec.rb +41 -0
  30. data/spec/killbill/killbill_integration_spec.rb +4 -5
  31. data/spec/killbill/payment_plugin_spec.rb +7 -3
  32. data/spec/killbill/payment_test.rb +88 -0
  33. data/spec/killbill/rack_handler_spec.rb +16 -0
  34. data/spec/spec_helper.rb +5 -0
  35. metadata +79 -16
@@ -0,0 +1,31 @@
1
+ module Killbill
2
+ module Plugin
3
+
4
+ class PaymentMethodProperty
5
+
6
+ attr_reader :key,
7
+ :value,
8
+ :is_updatable
9
+
10
+ def initialize(key, value, is_updatable)
11
+ @key = key
12
+ @value = value
13
+ @is_updatable = is_updatable
14
+ end
15
+ end
16
+
17
+ class PaymentMethodResponse
18
+
19
+ attr_reader :external_payment_method_id,
20
+ :is_default,
21
+ :properties
22
+
23
+ def initialize(external_payment_method_id, is_default, properties)
24
+ @external_payment_method_id = external_payment_method_id
25
+ @is_default = is_default
26
+ @properties = properties
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,20 @@
1
+ module Killbill
2
+ module Plugin
3
+
4
+ class PaymentMethodResponseInternal
5
+
6
+ attr_reader :kb_account_id,
7
+ :kb_payment_method_id,
8
+ :is_default,
9
+ :external_payment_method_id
10
+
11
+ def initialize(kb_account_id, kb_payment_method_id, is_default, external_payment_method_id)
12
+ @kb_account_id = kb_account_id
13
+ @kb_payment_method_id = kb_payment_method_id
14
+ @is_default = is_default
15
+ @external_payment_method_id = external_payment_method_id
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ module Killbill
2
+ module Plugin
3
+ class PaymentResponse
4
+
5
+ attr_reader :amount_in_cents,
6
+ :created_date,
7
+ :effective_date,
8
+ :status,
9
+ :gateway_error,
10
+ :gateway_error_code
11
+
12
+ def initialize(amount_in_cents, created_date, effective_date, status, gateway_error=nil, gateway_error_code=nil)
13
+ @amount_in_cents = amount_in_cents
14
+ @created_date = created_date
15
+ @effective_date = effective_date
16
+ @status = status
17
+ @gateway_error = gateway_error
18
+ @gateway_error_code = gateway_error_code
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,10 @@
1
+ module Killbill
2
+ module Plugin
3
+
4
+ module PaymentStatus
5
+ SUCCESS = 1,
6
+ ERROR = 2,
7
+ UNDEFINED = 3
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,23 @@
1
+ module Killbill
2
+ module Plugin
3
+
4
+ class RefundResponse
5
+
6
+ attr_reader :amount_in_cents,
7
+ :created_date,
8
+ :effective_date,
9
+ :status,
10
+ :gateway_error,
11
+ :gateway_error_code
12
+
13
+ def initialize(amount_in_cents, created_date, effective_date, status, gateway_error, gateway_error_code)
14
+ @amount_in_cents = amount_in_cents
15
+ @created_date = created_date
16
+ @effective_date = effective_date
17
+ @status = status
18
+ @gateway_error = gateway_error
19
+ @gateway_error_code = gateway_error_code
20
+ end
21
+ end
22
+ end
23
+ end
@@ -19,7 +19,14 @@ describe Killbill::Plugin::PluginBase do
19
19
  plugin = Killbill::Plugin::PluginBase.new(:account_user_api => MockAccountUserApi.new)
20
20
 
21
21
  plugin.account_user_api.get_accounts(nil).size.should == 0
22
+ # Existing API, present
23
+ lambda { plugin.account_user_api.do_foo('with my bar') }.should_not raise_error Killbill::Plugin::PluginBase::APINotAvailableError
24
+ # Existing API, absent
25
+ lambda { plugin.payment_api.do_foo('with my bar') }.should raise_error Killbill::Plugin::PluginBase::APINotAvailableError
26
+ # Non-existing API
22
27
  lambda { plugin.foobar_user_api.do_foo('with my bar') }.should raise_error Killbill::Plugin::PluginBase::APINotAvailableError
28
+ # Default method missing behavior
29
+ lambda { plugin.blablabla }.should raise_error NoMethodError
23
30
  end
24
31
 
25
32
  it 'should be able to add custom code in the startup/shutdown sequence' do
@@ -0,0 +1,7 @@
1
+ require 'sinatra'
2
+
3
+ get "/ping" do
4
+ return 'pong'
5
+ end
6
+
7
+ run Sinatra::Application
@@ -0,0 +1,121 @@
1
+ require 'spec_helper'
2
+
3
+ require 'killbill/jpayment'
4
+
5
+ describe Killbill::Plugin::JPayment do
6
+
7
+ before(:all) do
8
+ @jpayment = Killbill::Plugin::JPayment.new("Killbill::Plugin::PaymentTest")
9
+ @kb_account_id = java.util.UUID.fromString("aa5c926e-3d9d-4435-b44b-719d7b583256")
10
+ @kb_payment_id = java.util.UUID.fromString("bf5c926e-3d9c-470e-b34b-719d7b58323a")
11
+ @kb_payment_method_id = java.util.UUID.fromString("bf5c926e-3d9c-470e-b34b-719d7b58323a")
12
+ @payment_method_plugin = nil
13
+ @amount = java.math.BigDecimal.new("50")
14
+ end
15
+
16
+ before(:each) do
17
+ @jpayment.real_payment.send(:clear_exception_on_next_calls)
18
+ end
19
+
20
+ it "should_test_charge_ok" do
21
+ output = @jpayment.charge(@kb_payment_id, @kb_payment_method_id, @amount)
22
+ output.get_amount.should be_an_instance_of java.math.BigDecimal
23
+ output.get_amount.to_s.should == "50.00";
24
+ output.get_status.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus
25
+ output.get_status.to_s.should == "PROCESSED"
26
+ end
27
+
28
+ it "should_test_charge_exception" do
29
+ @jpayment.real_payment.send(:raise_exception_on_next_calls)
30
+ lambda { @jpayment.charge(@kb_payment_id, @kb_payment_method_id, @amount) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
31
+ end
32
+
33
+ it "should_test_get_payment_info_ok" do
34
+ output = @jpayment.get_payment_info(@kb_payment_method_id)
35
+ output.get_amount.should be_an_instance_of java.math.BigDecimal
36
+ output.get_amount.to_s.should == "0.00";
37
+ output.get_status.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus
38
+ output.get_status.to_s.should == "PROCESSED"
39
+ end
40
+
41
+ it "should_test_get_payment_info_exception" do
42
+ @jpayment.real_payment.send(:raise_exception_on_next_calls)
43
+ lambda { @jpayment.get_payment_info(@kb_payment_method_id) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
44
+ end
45
+
46
+ it "should_test_refund_ok" do
47
+ output = @jpayment.refund(@kb_payment_method_id, @amount)
48
+ output.get_amount.should be_an_instance_of java.math.BigDecimal
49
+ output.get_amount.to_s.should == "50.00";
50
+ output.get_status.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus
51
+ output.get_status.to_s.should == "PROCESSED"
52
+ end
53
+
54
+ it "should_test_refund_exception" do
55
+ @jpayment.real_payment.send(:raise_exception_on_next_calls)
56
+ lambda { @jpayment.refund(@kb_payment_method_id, @amount) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
57
+ end
58
+
59
+ it "should_test_add_payment_method_ok" do
60
+ @jpayment.add_payment_method(@kb_account_id, @kb_payment_method_id, @payment_method_plugin, java.lang.Boolean.new("true"))
61
+ end
62
+
63
+ it "should_test_add_payment_method_exception" do
64
+ @jpayment.real_payment.send(:raise_exception_on_next_calls)
65
+ lambda { @jpayment.add_payment_method(@kb_account_id, @kb_payment_method_id, @payment_method_plugin, true) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
66
+ end
67
+
68
+
69
+ it "should_test_delete_payment_method_ok" do
70
+ @jpayment.delete_payment_method(@kb_payment_method_id)
71
+ end
72
+
73
+ it "should_test_delete_payment_method_exception" do
74
+ @jpayment.real_payment.send(:raise_exception_on_next_calls)
75
+ lambda { @jpayment.delete_payment_method(@kb_payment_method_id) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
76
+ end
77
+
78
+ it "should_test_get_payment_method_detail_ok" do
79
+ output = @jpayment.get_payment_method_detail(@kb_account_id, @kb_payment_method_id)
80
+ output.get_external_payment_method_id.should be_an_instance_of java.lang.String
81
+ output.get_external_payment_method_id.should == "foo"
82
+ end
83
+
84
+ it "should_test_get_payment_method_detail_exception" do
85
+ @jpayment.real_payment.send(:raise_exception_on_next_calls)
86
+ lambda { @jpayment.get_payment_method_detail(@kb_account_id, @kb_payment_method_id) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
87
+ end
88
+
89
+ it "should_test_set_default_payment_method_ok" do
90
+ @jpayment.set_default_payment_method(@kb_payment_method_id)
91
+ end
92
+
93
+ it "should_test_set_default_payment_method_exception" do
94
+ @jpayment.real_payment.send(:raise_exception_on_next_calls)
95
+ lambda { @jpayment.set_default_payment_method(@kb_payment_method_id) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
96
+ end
97
+
98
+ it "should_get_payment_methods_ok" do
99
+ output = @jpayment.get_payment_methods(@kb_account_id, java.lang.Boolean.new("true"))
100
+
101
+ output.should be_an_instance_of java.util.ArrayList
102
+ output.size.should == 1
103
+
104
+ current_payment_method = output.get(0)
105
+ current_payment_method.get_account_id.to_s.should == @kb_account_id.to_s
106
+ end
107
+
108
+ it "should_get_payment_methods_exception" do
109
+ @jpayment.real_payment.send(:raise_exception_on_next_calls)
110
+ lambda { @jpayment.get_payment_methods(@kb_account_id, true) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
111
+ end
112
+
113
+ it "should_test_reset_payment_methods_ok" do
114
+ @jpayment.reset_payment_methods(java.util.ArrayList.new)
115
+ end
116
+
117
+ it "should_test_reset_payment_methods_exception" do
118
+ @jpayment.real_payment.send(:raise_exception_on_next_calls)
119
+ lambda { @jpayment.reset_payment_methods(java.util.ArrayList.new) }.should raise_error Java::com.ning.billing.payment.plugin.api.PaymentPluginApiException
120
+ end
121
+ end
@@ -0,0 +1,208 @@
1
+ require 'spec_helper'
2
+ require 'date'
3
+
4
+ require 'killbill/response/payment_method_response'
5
+ require 'killbill/response/payment_method_response_internal'
6
+ require 'killbill/response/payment_status'
7
+ require 'killbill/response/payment_response'
8
+ require 'killbill/response/refund_response'
9
+
10
+ require 'killbill/jresponse/jconverter'
11
+ require 'killbill/jresponse/jpayment_method_response'
12
+ require 'killbill/jresponse/jpayment_method_response_internal'
13
+
14
+ describe Killbill::Plugin::JConverter do
15
+
16
+ it "should_test_uuid_converter" do
17
+ input = "bf5c926e-3d9c-470e-b34b-0719d7b58323"
18
+ output = Killbill::Plugin::JConverter.to_uuid(input)
19
+ output.should be_an_instance_of java.util.UUID
20
+ output.to_s.should == input
21
+ end
22
+
23
+ it "should_test_joda_date_time_converter" do
24
+ input_str = '2013-03-11T16:05:11-07:00'
25
+ expected_output_str = '2013-03-11T16:05:11.000-07:00'
26
+ input = org.joda.time.DateTime.parse(input_str)
27
+ output = Killbill::Plugin::JConverter.to_joda_date_time(input)
28
+ output.should be_an_instance_of org.joda.time.DateTime
29
+ output.to_s.should == expected_output_str
30
+ end
31
+
32
+ it "should_test_to_string_converter" do
33
+ input = "great it works"
34
+ output = Killbill::Plugin::JConverter.to_string(input)
35
+ output.should be_an_instance_of java.lang.String
36
+ output.should == input
37
+ end
38
+
39
+ it "should_test_payment_plugin_status_success_converter" do
40
+ input = Killbill::Plugin::PaymentStatus::SUCCESS
41
+ output = Killbill::Plugin::JConverter.to_payment_plugin_status(input)
42
+ output.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus
43
+ output.should == Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus::PROCESSED
44
+ end
45
+
46
+ it "should_test_payment_plugin_status_failed_converter" do
47
+ input = Killbill::Plugin::PaymentStatus::ERROR
48
+ output = Killbill::Plugin::JConverter.to_payment_plugin_status(input)
49
+ output.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus
50
+ output.should == Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus::ERROR
51
+ end
52
+
53
+ it "should_test_payment_plugin_status_undefined_converter" do
54
+ input = Killbill::Plugin::PaymentStatus::UNDEFINED
55
+ output = Killbill::Plugin::JConverter.to_payment_plugin_status(input)
56
+ output.should be_an_instance_of Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus
57
+ output.should == Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus::UNDEFINED
58
+ end
59
+
60
+ it "should_test_big_decimal_converter" do
61
+ {
62
+ nil => '0',
63
+ 1 => '0.01',
64
+ 0 => '0',
65
+ -1 => '-0.01',
66
+ 12376 => '12.376',
67
+ -532 => '-5.32'
68
+ }.each do |input,output|
69
+ output = Killbill::Plugin::JConverter.to_big_decimal(input)
70
+ output.should be_an_instance_of java.math.BigDecimal
71
+ output.to_s.should == output.to_s
72
+ end
73
+ end
74
+
75
+ it "should_test_boolean_true_converter" do
76
+ input = true
77
+ output = Killbill::Plugin::JConverter.to_boolean(input)
78
+ output.should be_an_instance_of java.lang.Boolean
79
+ output.to_s == input.to_s
80
+ end
81
+
82
+ it "should_test_boolean_false_converter" do
83
+ input = nil
84
+ output = Killbill::Plugin::JConverter.to_boolean(input)
85
+ output.should be_an_instance_of java.lang.Boolean
86
+ output.to_s == "false"
87
+ end
88
+
89
+ it "should_test_uuid_from_converter" do
90
+ input = java.util.UUID.random_uuid
91
+ output = Killbill::Plugin::JConverter.from_uuid(input)
92
+ output.should be_an_instance_of String
93
+ output.to_s.should == input.to_s
94
+ end
95
+
96
+
97
+ it "should_test_boolean_from_nil_converter" do
98
+ input = nil
99
+ output = Killbill::Plugin::JConverter.from_boolean(input)
100
+ output.should be_an_instance_of FalseClass
101
+ output.to_s == "false"
102
+ end
103
+
104
+ it "should_test_boolean_from_false_converter" do
105
+ input = java.lang.Boolean.new("false")
106
+ output = Killbill::Plugin::JConverter.from_boolean(input)
107
+ output.should be_an_instance_of FalseClass
108
+ output.to_s == "false"
109
+ end
110
+
111
+ it "should_test_boolean_from_false2_converter" do
112
+ input = java.lang.Boolean.new("false").boolean_value
113
+ output = Killbill::Plugin::JConverter.from_boolean(input)
114
+ output.should be_an_instance_of FalseClass
115
+ output.to_s == "false"
116
+ end
117
+
118
+
119
+ it "should_test_boolean_from_true_converter" do
120
+ input = java.lang.Boolean.new("true")
121
+ output = Killbill::Plugin::JConverter.from_boolean(input)
122
+ output.should be_an_instance_of TrueClass
123
+ output.to_s == "true"
124
+ end
125
+
126
+ it "should_test_boolean_from_true2_converter" do
127
+ input = java.lang.Boolean.new("true").boolean_value
128
+ output = Killbill::Plugin::JConverter.from_boolean(input)
129
+ output.should be_an_instance_of TrueClass
130
+ output.to_s == "true"
131
+ end
132
+
133
+
134
+ it "should_test_joda_time_from_converter" do
135
+ input = org.joda.time.DateTime.new
136
+ input = input.minus_millis(input.millis_of_second)
137
+ output = Killbill::Plugin::JConverter.from_joda_date_time(input)
138
+ output.should be_an_instance_of DateTime
139
+
140
+ input_match = Killbill::Plugin::JConverter.to_joda_date_time(output)
141
+ input_match.to_s.should == input.to_s
142
+ end
143
+
144
+ it "should_test_payment_status_from_converter" do
145
+ input = Java::com.ning.billing.payment.plugin.api.PaymentInfoPlugin::PaymentPluginStatus::PROCESSED
146
+ output = Killbill::Plugin::JConverter.from_payment_plugin_status(input)
147
+ output.should == Killbill::Plugin::PaymentStatus::SUCCESS
148
+ end
149
+
150
+ it "should_test_big_decimal_from_converter" do
151
+ input = java.math.BigDecimal::TEN
152
+ output = Killbill::Plugin::JConverter.from_big_decimal(input)
153
+ output.should be_an_instance_of Fixnum
154
+ output.to_s.should == "1000"
155
+ end
156
+
157
+ it "should_test_payment_method_plugin_from_converter" do
158
+ prop = Killbill::Plugin::PaymentMethodProperty.new("key", "value", true)
159
+ payment_method_response = Killbill::Plugin::PaymentMethodResponse.new("external_payment_method_id", true, [prop])
160
+ input = Killbill::Plugin::JPaymentMethodResponse.new(payment_method_response)
161
+ output = Killbill::Plugin::JConverter.from_payment_method_plugin(input)
162
+
163
+ output.should be_an_instance_of Killbill::Plugin::PaymentMethodResponse
164
+
165
+ output.external_payment_method_id.should be_an_instance_of String
166
+ output.external_payment_method_id.should == payment_method_response.external_payment_method_id
167
+
168
+ output.is_default.should be_an_instance_of TrueClass
169
+ output.is_default.should == payment_method_response.is_default
170
+
171
+ output.properties.should be_an_instance_of Array
172
+ output.properties.size.should == 1
173
+
174
+ output_prop = output.properties[0]
175
+ output_prop.should be_an_instance_of Killbill::Plugin::PaymentMethodProperty
176
+
177
+ output_prop.key.should be_an_instance_of String
178
+ output_prop.key.should == prop.key
179
+
180
+ output_prop.value.should be_an_instance_of String
181
+ output_prop.value.should == prop.value
182
+
183
+ output_prop.is_updatable.should be_an_instance_of TrueClass
184
+ output_prop.is_updatable.should == prop.is_updatable
185
+ end
186
+
187
+ it "should_test_payment_method_info_plugin__from_converter" do
188
+
189
+ payment_method_info = Killbill::Plugin::PaymentMethodResponseInternal.new("bf5c926e-3d9c-470e-b34b-0719d7b58323", "ca5c926e-3d9c-470e-b34b-0719d7b58312", false, "external_payment_method_id")
190
+ input = Killbill::Plugin::JPaymentMethodResponseInternal.new(payment_method_info)
191
+ output = Killbill::Plugin::JConverter.from_payment_method_info_plugin(input)
192
+
193
+ output.should be_an_instance_of Killbill::Plugin::PaymentMethodResponseInternal
194
+
195
+ output.kb_account_id.should be_an_instance_of String
196
+ output.kb_account_id.should == payment_method_info.kb_account_id
197
+
198
+ output.kb_payment_method_id.should be_an_instance_of String
199
+ output.kb_payment_method_id.should == payment_method_info.kb_payment_method_id
200
+
201
+ output.is_default.should be_an_instance_of FalseClass
202
+ output.is_default.should == payment_method_info.is_default
203
+
204
+ output.external_payment_method_id.should be_an_instance_of String
205
+ output.external_payment_method_id.should == payment_method_info.external_payment_method_id
206
+
207
+ end
208
+ end