killbill 3.1.11 → 3.1.12
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.
- checksums.yaml +4 -4
 - data/Jarfile +6 -6
 - data/NEWS +6 -0
 - data/VERSION +1 -1
 - data/generators/active_merchant/templates/Jarfile.rb +7 -7
 - data/generators/active_merchant/templates/db/ddl.sql.rb +2 -0
 - data/generators/active_merchant/templates/db/schema.rb +2 -0
 - data/generators/active_merchant/templates/lib/application.rb +1 -5
 - data/generators/active_merchant/templates/lib/models/response.rb +2 -1
 - data/generators/active_merchant/templates/lib/plugin.rb +1 -0
 - data/generators/active_merchant/templates/lib/private_api.rb +7 -0
 - data/generators/active_merchant/templates/plugin.gemspec.rb +3 -2
 - data/generators/active_merchant/templates/spec/integration_spec.rb +103 -2
 - data/killbill.gemspec +4 -1
 - data/lib/killbill/gen/api/dry_run_arguments.rb +100 -0
 - data/lib/killbill/gen/api/invoice_user_api.rb +5 -5
 - data/lib/killbill/gen/api/killbill_api.rb +19 -18
 - data/lib/killbill/gen/api/payment_options.rb +17 -5
 - data/lib/killbill/gen/api/require_gen.rb +5 -0
 - data/lib/killbill/gen/api/rolled_up_unit.rb +63 -0
 - data/lib/killbill/gen/api/rolled_up_usage.rb +31 -35
 - data/lib/killbill/gen/api/static_catalog.rb +8 -8
 - data/lib/killbill/gen/api/subscription_usage_record.rb +75 -0
 - data/lib/killbill/gen/api/unit_usage_record.rb +74 -0
 - data/lib/killbill/gen/api/usage_record.rb +66 -0
 - data/lib/killbill/gen/api/usage_user_api.rb +22 -56
 - data/lib/killbill/gen/plugin-api/currency_plugin_api.rb +19 -18
 - data/lib/killbill/gen/plugin-api/ext_bus_event.rb +19 -18
 - data/lib/killbill/gen/plugin-api/gateway_notification.rb +19 -18
 - data/lib/killbill/gen/plugin-api/hosted_payment_page_form_descriptor.rb +19 -18
 - data/lib/killbill/gen/plugin-api/notification_plugin_api.rb +19 -18
 - data/lib/killbill/gen/plugin-api/payment_method_info_plugin.rb +19 -18
 - data/lib/killbill/gen/plugin-api/payment_plugin_api.rb +19 -18
 - data/lib/killbill/gen/plugin-api/payment_plugin_api_exception.rb +19 -18
 - data/lib/killbill/gen/plugin-api/payment_transaction_info_plugin.rb +19 -18
 - data/lib/killbill/gen/plugin-api/require_gen.rb +19 -18
 - data/lib/killbill/helpers/active_merchant/active_record/models/payment_method.rb +4 -0
 - data/lib/killbill/helpers/active_merchant/active_record/models/response.rb +65 -34
 - data/lib/killbill/helpers/active_merchant/active_record/models/streamy_result_set.rb +14 -2
 - data/lib/killbill/helpers/active_merchant/active_record/models/transaction.rb +9 -5
 - data/lib/killbill/helpers/active_merchant/killbill_spec_helper.rb +28 -23
 - data/lib/killbill/helpers/active_merchant/payment_plugin.rb +66 -36
 - data/lib/killbill/helpers/active_merchant/private_payment_plugin.rb +18 -31
 - data/lib/killbill/helpers/active_merchant/sinatra.rb +7 -2
 - data/lib/killbill/helpers/active_merchant/utils.rb +12 -0
 - data/spec/killbill/helpers/killbill_spec_helper_spec.rb +24 -0
 - data/spec/killbill/helpers/payment_method_spec.rb +5 -0
 - data/spec/killbill/helpers/payment_plugin_spec.rb +33 -2
 - data/spec/killbill/helpers/private_payment_plugin_spec.rb +83 -0
 - data/spec/killbill/helpers/response_spec.rb +47 -24
 - data/spec/killbill/helpers/streamy_result_set_spec.rb +38 -0
 - data/spec/killbill/helpers/test_schema.rb +2 -0
 - metadata +57 -8
 - data/lib/killbill/gen/api/payment_attempt.rb +0 -117
 - data/lib/killbill/gen/api/payment_method_kv_info.rb +0 -71
 - data/lib/killbill/gen/plugin-api/billing_address.rb +0 -85
 - data/lib/killbill/gen/plugin-api/customer.rb +0 -73
 
| 
         @@ -3,8 +3,10 @@ module Killbill 
     | 
|
| 
       3 
3 
     | 
    
         
             
                module ActiveMerchant
         
     | 
| 
       4 
4 
     | 
    
         
             
                  require 'action_controller'
         
     | 
| 
       5 
5 
     | 
    
         
             
                  require 'action_view'
         
     | 
| 
      
 6 
     | 
    
         
            +
                  require 'active_merchant'
         
     | 
| 
       6 
7 
     | 
    
         
             
                  require 'active_support'
         
     | 
| 
       7 
8 
     | 
    
         
             
                  require 'cgi'
         
     | 
| 
      
 9 
     | 
    
         
            +
                  require 'offsite_payments'
         
     | 
| 
       8 
10 
     | 
    
         | 
| 
       9 
11 
     | 
    
         
             
                  class PrivatePaymentPlugin < ::Killbill::Plugin::Payment
         
     | 
| 
       10 
12 
     | 
    
         | 
| 
         @@ -13,7 +15,7 @@ module Killbill 
     | 
|
| 
       13 
15 
     | 
    
         
             
                    include ::ActionController::RequestForgeryProtection
         
     | 
| 
       14 
16 
     | 
    
         
             
                    include ::ActionView::Context
         
     | 
| 
       15 
17 
     | 
    
         
             
                    include ::ActionView::Helpers::FormTagHelper
         
     | 
| 
       16 
     | 
    
         
            -
                    include :: 
     | 
| 
      
 18 
     | 
    
         
            +
                    include ::OffsitePayments::ActionViewHelper
         
     | 
| 
       17 
19 
     | 
    
         | 
| 
       18 
20 
     | 
    
         
             
                    # For RequestForgeryProtection
         
     | 
| 
       19 
21 
     | 
    
         
             
                    attr_reader :session
         
     | 
| 
         @@ -33,7 +35,7 @@ module Killbill 
     | 
|
| 
       33 
35 
     | 
    
         
             
                    #
         
     | 
| 
       34 
36 
     | 
    
         
             
                    # Additionally, you can have a :html key which will be passed through to the link_to helper
         
     | 
| 
       35 
37 
     | 
    
         
             
                    def payment_link_for(name, order_id, account_id, service, options = {})
         
     | 
| 
       36 
     | 
    
         
            -
                      integration_module = :: 
     | 
| 
      
 38 
     | 
    
         
            +
                      integration_module = ::OffsitePayments.integration(service.to_s.camelize)
         
     | 
| 
       37 
39 
     | 
    
         
             
                      service_class      = integration_module.const_get('Helper')
         
     | 
| 
       38 
40 
     | 
    
         | 
| 
       39 
41 
     | 
    
         
             
                      link_options = options.delete(:html) || {}
         
     | 
| 
         @@ -69,36 +71,13 @@ module Killbill 
     | 
|
| 
       69 
71 
     | 
    
         
             
                      output_buffer
         
     | 
| 
       70 
72 
     | 
    
         
             
                    end
         
     | 
| 
       71 
73 
     | 
    
         | 
| 
       72 
     | 
    
         
            -
                     
     | 
| 
      
 74 
     | 
    
         
            +
                    def save_response_and_transaction(gw_response, api_call, kb_account_id, kb_tenant_id, payment_processor_account_id, kb_payment_id=nil, kb_payment_transaction_id=nil, transaction_type=nil, amount_in_cents=0, currency=nil)
         
     | 
| 
      
 75 
     | 
    
         
            +
                      logger.warn "Unsuccessful #{api_call}: #{gw_response.message}" unless gw_response.success?
         
     | 
| 
       73 
76 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
                      @output_buffer = ''
         
     | 
| 
       76 
     | 
    
         
            -
                    end
         
     | 
| 
      
 77 
     | 
    
         
            +
                      response, transaction = @response_model.create_response_and_transaction(@identifier, @transaction_model, api_call, kb_account_id, kb_payment_id, kb_payment_transaction_id, transaction_type, payment_processor_account_id, kb_tenant_id, gw_response, amount_in_cents, currency, {}, @response_model)
         
     | 
| 
       77 
78 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
                      save_response_and_transaction(response, api_call)[0]
         
     | 
| 
       80 
     | 
    
         
            -
                    end
         
     | 
| 
      
 79 
     | 
    
         
            +
                      logger.debug "Recorded transaction: #{transaction.inspect}" unless transaction.nil?
         
     | 
| 
       81 
80 
     | 
    
         | 
| 
       82 
     | 
    
         
            -
                    def save_response_and_transaction(response, api_call, kb_payment_id=nil, amount_in_cents=0, currency=nil)
         
     | 
| 
       83 
     | 
    
         
            -
                      logger.warn "Unsuccessful #{api_call}: #{response.message}" unless response.success?
         
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
                      # Save the response to our logs
         
     | 
| 
       86 
     | 
    
         
            -
                      response = @response_model.from_response(api_call, kb_payment_id, response)
         
     | 
| 
       87 
     | 
    
         
            -
                      response.save!
         
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
                      transaction = nil
         
     | 
| 
       90 
     | 
    
         
            -
                      txn_id      = response.txn_id
         
     | 
| 
       91 
     | 
    
         
            -
                      if response.success and !kb_payment_id.blank? and !txn_id.blank?
         
     | 
| 
       92 
     | 
    
         
            -
                        # Record the transaction
         
     | 
| 
       93 
     | 
    
         
            -
                        transaction = response.send("create_#{@identifier}_transaction!",
         
     | 
| 
       94 
     | 
    
         
            -
                                                    :amount_in_cents => amount_in_cents,
         
     | 
| 
       95 
     | 
    
         
            -
                                                    :currency        => currency,
         
     | 
| 
       96 
     | 
    
         
            -
                                                    :api_call        => api_call,
         
     | 
| 
       97 
     | 
    
         
            -
                                                    :kb_payment_id   => kb_payment_id,
         
     | 
| 
       98 
     | 
    
         
            -
                                                    :txn_id          => txn_id)
         
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
       100 
     | 
    
         
            -
                        logger.debug "Recorded transaction: #{transaction.inspect}"
         
     | 
| 
       101 
     | 
    
         
            -
                      end
         
     | 
| 
       102 
81 
     | 
    
         
             
                      return response, transaction
         
     | 
| 
       103 
82 
     | 
    
         
             
                    end
         
     | 
| 
       104 
83 
     | 
    
         | 
| 
         @@ -106,13 +85,21 @@ module Killbill 
     | 
|
| 
       106 
85 
     | 
    
         
             
                      ::Killbill::Plugin::ActiveMerchant.kb_apis
         
     | 
| 
       107 
86 
     | 
    
         
             
                    end
         
     | 
| 
       108 
87 
     | 
    
         | 
| 
       109 
     | 
    
         
            -
                    def gateway
         
     | 
| 
       110 
     | 
    
         
            -
                      ::Killbill::Plugin::ActiveMerchant. 
     | 
| 
      
 88 
     | 
    
         
            +
                    def gateway(payment_processor_account_id=:default)
         
     | 
| 
      
 89 
     | 
    
         
            +
                      gateway = ::Killbill::Plugin::ActiveMerchant.gateways[payment_processor_account_id.to_sym]
         
     | 
| 
      
 90 
     | 
    
         
            +
                      raise "Unable to lookup gateway for payment_processor_account_id #{payment_processor_account_id}, gateways: #{::Killbill::Plugin::ActiveMerchant.gateways}" if gateway.nil?
         
     | 
| 
      
 91 
     | 
    
         
            +
                      gateway
         
     | 
| 
       111 
92 
     | 
    
         
             
                    end
         
     | 
| 
       112 
93 
     | 
    
         | 
| 
       113 
94 
     | 
    
         
             
                    def logger
         
     | 
| 
       114 
95 
     | 
    
         
             
                      ::Killbill::Plugin::ActiveMerchant.logger
         
     | 
| 
       115 
96 
     | 
    
         
             
                    end
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                    protected
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                    def reset_output_buffer
         
     | 
| 
      
 101 
     | 
    
         
            +
                      @output_buffer = ''
         
     | 
| 
      
 102 
     | 
    
         
            +
                    end
         
     | 
| 
       116 
103 
     | 
    
         
             
                  end
         
     | 
| 
       117 
104 
     | 
    
         
             
                end
         
     | 
| 
       118 
105 
     | 
    
         
             
              end
         
     | 
| 
         @@ -22,9 +22,14 @@ module Killbill 
     | 
|
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
                    after do
         
     | 
| 
       24 
24 
     | 
    
         
             
                      # return DB connections to the Pool if required
         
     | 
| 
       25 
     | 
    
         
            -
                      ::ActiveRecord::Base. 
     | 
| 
      
 25 
     | 
    
         
            +
                      pool = ::ActiveRecord::Base.connection_pool
         
     | 
| 
      
 26 
     | 
    
         
            +
                      if pool.active_connection?
         
     | 
| 
      
 27 
     | 
    
         
            +
                        connection = ::ActiveRecord::Base.connection
         
     | 
| 
      
 28 
     | 
    
         
            +
                        pool.remove(connection)
         
     | 
| 
      
 29 
     | 
    
         
            +
                        connection.disconnect!
         
     | 
| 
      
 30 
     | 
    
         
            +
                      end
         
     | 
| 
       26 
31 
     | 
    
         
             
                    end
         
     | 
| 
       27 
32 
     | 
    
         
             
                  end
         
     | 
| 
       28 
33 
     | 
    
         
             
                end
         
     | 
| 
       29 
34 
     | 
    
         
             
              end
         
     | 
| 
       30 
     | 
    
         
            -
            end
         
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -17,6 +17,18 @@ module Killbill 
     | 
|
| 
       17 
17 
     | 
    
         
             
                      no_hyphens.insert(8, "-").insert(13, "-").insert(18, "-").insert(23, "-")
         
     | 
| 
       18 
18 
     | 
    
         
             
                    end
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
      
 20 
     | 
    
         
            +
                    def self.ip
         
     | 
| 
      
 21 
     | 
    
         
            +
                      first_public_ipv4 ? first_public_ipv4.ip_address : first_private_ipv4.ip_address
         
     | 
| 
      
 22 
     | 
    
         
            +
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                    def self.first_private_ipv4
         
     | 
| 
      
 25 
     | 
    
         
            +
                      Socket.ip_address_list.detect { |intf| intf.ipv4_private? }
         
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                    def self.first_public_ipv4
         
     | 
| 
      
 29 
     | 
    
         
            +
                      Socket.ip_address_list.detect { |intf| intf.ipv4? and !intf.ipv4_loopback? and !intf.ipv4_multicast? and !intf.ipv4_private? }
         
     | 
| 
      
 30 
     | 
    
         
            +
                    end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
       20 
32 
     | 
    
         
             
                    class KBWiredumpDevice < IO
         
     | 
| 
       21 
33 
     | 
    
         | 
| 
       22 
34 
     | 
    
         
             
                      # Required for compatibility, but unused
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe Killbill::Plugin::ActiveMerchant::RSpec do
         
     | 
| 
      
 4 
     | 
    
         
            +
              include Killbill::Plugin::ActiveMerchant::RSpec
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              it 'should build payment method properties' do
         
     | 
| 
      
 7 
     | 
    
         
            +
                overridden_city = SecureRandom.uuid
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                props1 = build_pm_properties
         
     | 
| 
      
 10 
     | 
    
         
            +
                props2 = build_pm_properties(nil, {:city => overridden_city})
         
     | 
| 
      
 11 
     | 
    
         
            +
                props3 = build_pm_properties(nil, {:city => overridden_city, :foo => :bar})
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                props1.size.should == props2.size
         
     | 
| 
      
 14 
     | 
    
         
            +
                props3.size.should == props1.size + 1
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                city1 = props1.find { |p| p.key == 'city' }
         
     | 
| 
      
 17 
     | 
    
         
            +
                city2 = props2.find { |p| p.key == 'city' }
         
     | 
| 
      
 18 
     | 
    
         
            +
                city3 = props3.find { |p| p.key == 'city' }
         
     | 
| 
      
 19 
     | 
    
         
            +
                city1.value.should_not == city2.value
         
     | 
| 
      
 20 
     | 
    
         
            +
                city2.value.should == city3.value
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                (props3.find { |p| p.key == :foo }).value.should == :bar
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -149,6 +149,11 @@ describe Killbill::Plugin::ActiveMerchant::ActiveRecord::PaymentMethod do 
     | 
|
| 
       149 
149 
     | 
    
         
             
                expect { ::Killbill::Test::TestPaymentMethod.from_kb_payment_method_id(SecureRandom.uuid, kb_tenant_id) }.to raise_error
         
     | 
| 
       150 
150 
     | 
    
         
             
                ::Killbill::Test::TestPaymentMethod.from_kb_payment_method_id(kb_payment_method_id, kb_tenant_id).kb_payment_method_id.should == kb_payment_method_id
         
     | 
| 
       151 
151 
     | 
    
         | 
| 
      
 152 
     | 
    
         
            +
                # Retrieve by account id and token
         
     | 
| 
      
 153 
     | 
    
         
            +
                pms = ::Killbill::Test::TestPaymentMethod.from_kb_account_id_and_token(token, kb_account_id, kb_tenant_id)
         
     | 
| 
      
 154 
     | 
    
         
            +
                pms.size.should == 1
         
     | 
| 
      
 155 
     | 
    
         
            +
                pms[0].kb_payment_method_id.should == kb_payment_method_id
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
       152 
157 
     | 
    
         
             
                # Delete the payment method and verify we cannot find it anymore
         
     | 
| 
       153 
158 
     | 
    
         
             
                ::Killbill::Test::TestPaymentMethod.mark_as_deleted!(kb_payment_method_id, kb_tenant_id)
         
     | 
| 
       154 
159 
     | 
    
         
             
                ::Killbill::Test::TestPaymentMethod.from_kb_account_id(kb_account_id, kb_tenant_id).size.should == 0
         
     | 
| 
         @@ -10,7 +10,10 @@ describe Killbill::Plugin::ActiveMerchant::PaymentPlugin do 
     | 
|
| 
       10 
10 
     | 
    
         
             
                  file = File.new(File.join(dir, 'test.yml'), "w+")
         
     | 
| 
       11 
11 
     | 
    
         
             
                  file.write(<<-eos)
         
     | 
| 
       12 
12 
     | 
    
         
             
            :test:
         
     | 
| 
       13 
     | 
    
         
            -
              : 
     | 
| 
      
 13 
     | 
    
         
            +
              - :account_id: default
         
     | 
| 
      
 14 
     | 
    
         
            +
                :test: true
         
     | 
| 
      
 15 
     | 
    
         
            +
              - :account_id: something_non_standard
         
     | 
| 
      
 16 
     | 
    
         
            +
                :test: true
         
     | 
| 
       14 
17 
     | 
    
         
             
            # As defined by spec_helper.rb
         
     | 
| 
       15 
18 
     | 
    
         
             
            :database:
         
     | 
| 
       16 
19 
     | 
    
         
             
              :adapter: 'sqlite3'
         
     | 
| 
         @@ -49,6 +52,12 @@ describe Killbill::Plugin::ActiveMerchant::PaymentPlugin do 
     | 
|
| 
       49 
52 
     | 
    
         
             
                property.value = 'true'
         
     | 
| 
       50 
53 
     | 
    
         
             
                @properties    = [property]
         
     | 
| 
       51 
54 
     | 
    
         | 
| 
      
 55 
     | 
    
         
            +
                @ppai                 = ::Killbill::Plugin::Model::PluginProperty.new
         
     | 
| 
      
 56 
     | 
    
         
            +
                @ppai.key             = 'payment_processor_account_id'
         
     | 
| 
      
 57 
     | 
    
         
            +
                @ppai.value           = 'something_non_standard'
         
     | 
| 
      
 58 
     | 
    
         
            +
                @properties_with_ppai = @properties.dup
         
     | 
| 
      
 59 
     | 
    
         
            +
                @properties_with_ppai << @ppai
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
       52 
61 
     | 
    
         
             
                token                            = ::Killbill::Plugin::Model::PluginProperty.new
         
     | 
| 
       53 
62 
     | 
    
         
             
                token.key                        = 'token'
         
     | 
| 
       54 
63 
     | 
    
         
             
                token.value                      = SecureRandom.uuid
         
     | 
| 
         @@ -101,9 +110,28 @@ describe Killbill::Plugin::ActiveMerchant::PaymentPlugin do 
     | 
|
| 
       101 
110 
     | 
    
         
             
                @plugin.get_payment_methods(@kb_account_id, true, @properties, @call_context).size.should == 0
         
     | 
| 
       102 
111 
     | 
    
         
             
              end
         
     | 
| 
       103 
112 
     | 
    
         | 
| 
      
 113 
     | 
    
         
            +
              it 'should support different payment_processor_account_ids' do
         
     | 
| 
      
 114 
     | 
    
         
            +
                @plugin.get_payment_methods(@kb_account_id, true, @properties, @call_context).size.should == 0
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
                @plugin.add_payment_method(@kb_account_id, @kb_payment_method_id, @payment_method_props, true, @properties, @call_context)
         
     | 
| 
      
 117 
     | 
    
         
            +
                @plugin.get_payment_methods(@kb_account_id, true, @properties, @call_context).size.should == 1
         
     | 
| 
      
 118 
     | 
    
         
            +
                ::Killbill::Test::TestPaymentMethod.where(:kb_payment_method_id => @kb_payment_method_id).first.token.should == @payment_method_props.properties[0].value
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
                authorization_id = SecureRandom.uuid
         
     | 
| 
      
 121 
     | 
    
         
            +
                @payment_api.add_payment(@kb_payment_id, authorization_id, SecureRandom.uuid, :AUTHORIZE)
         
     | 
| 
      
 122 
     | 
    
         
            +
                authorization = @plugin.authorize_payment(@kb_account_id, @kb_payment_id, authorization_id, @kb_payment_method_id, @amount_in_cents, @currency, @properties_with_ppai, @call_context)
         
     | 
| 
      
 123 
     | 
    
         
            +
                verify_transaction_info_plugin(authorization, authorization_id, :AUTHORIZE, 1, @ppai.value)
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
                capture_id = SecureRandom.uuid
         
     | 
| 
      
 126 
     | 
    
         
            +
                @payment_api.add_payment(@kb_payment_id, capture_id, SecureRandom.uuid, :CAPTURE)
         
     | 
| 
      
 127 
     | 
    
         
            +
                # We omit the payment_processor_account_id to verify we can retrieve it
         
     | 
| 
      
 128 
     | 
    
         
            +
                capture = @plugin.capture_payment(@kb_account_id, @kb_payment_id, capture_id, @kb_payment_method_id, @amount_in_cents, @currency, @properties, @call_context)
         
     | 
| 
      
 129 
     | 
    
         
            +
                verify_transaction_info_plugin(capture, capture_id, :CAPTURE, 2, @ppai.value)
         
     | 
| 
      
 130 
     | 
    
         
            +
              end
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
       104 
132 
     | 
    
         
             
              private
         
     | 
| 
       105 
133 
     | 
    
         | 
| 
       106 
     | 
    
         
            -
              def verify_transaction_info_plugin(t_info_plugin, kb_transaction_id, type, transaction_nb)
         
     | 
| 
      
 134 
     | 
    
         
            +
              def verify_transaction_info_plugin(t_info_plugin, kb_transaction_id, type, transaction_nb, payment_processor_account_id='default')
         
     | 
| 
       107 
135 
     | 
    
         
             
                t_info_plugin.kb_payment_id.should == @kb_payment_id
         
     | 
| 
       108 
136 
     | 
    
         
             
                t_info_plugin.kb_transaction_payment_id.should == kb_transaction_id
         
     | 
| 
       109 
137 
     | 
    
         
             
                t_info_plugin.transaction_type.should == type
         
     | 
| 
         @@ -116,6 +144,9 @@ describe Killbill::Plugin::ActiveMerchant::PaymentPlugin do 
     | 
|
| 
       116 
144 
     | 
    
         
             
                end
         
     | 
| 
       117 
145 
     | 
    
         
             
                t_info_plugin.status.should == :PROCESSED
         
     | 
| 
       118 
146 
     | 
    
         | 
| 
      
 147 
     | 
    
         
            +
                # Verify we routed to the right gateway
         
     | 
| 
      
 148 
     | 
    
         
            +
                (t_info_plugin.properties.find { |kv| kv.key.to_s == 'payment_processor_account_id' }).value.to_s.should == payment_processor_account_id
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
       119 
150 
     | 
    
         
             
                transactions = @plugin.get_payment_info(@kb_account_id, @kb_payment_id, [], @call_context)
         
     | 
| 
       120 
151 
     | 
    
         
             
                transactions.size.should == transaction_nb
         
     | 
| 
       121 
152 
     | 
    
         
             
                transactions[transaction_nb - 1].to_json.should == t_info_plugin.to_json
         
     | 
| 
         @@ -0,0 +1,83 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'spec/killbill/helpers/payment_method_spec'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'spec/killbill/helpers/response_spec'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'spec/killbill/helpers/transaction_spec'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            describe Killbill::Plugin::ActiveMerchant::PrivatePaymentPlugin do
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              before(:each) do
         
     | 
| 
      
 9 
     | 
    
         
            +
                @order_id   = SecureRandom.uuid
         
     | 
| 
      
 10 
     | 
    
         
            +
                @account_id = SecureRandom.uuid
         
     | 
| 
      
 11 
     | 
    
         
            +
                @options    = {:amount => 120, :country => 'US', :forward_url => 'http://kill-bill.org', :html => {:authenticity_token => false}}
         
     | 
| 
      
 12 
     | 
    
         
            +
                @session    = {:foo => :bar}
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                setup_public_plugin
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                @plugin = Killbill::Plugin::ActiveMerchant::PrivatePaymentPlugin.new(:test,
         
     | 
| 
      
 17 
     | 
    
         
            +
                                                                                     ::Killbill::Test::TestPaymentMethod,
         
     | 
| 
      
 18 
     | 
    
         
            +
                                                                                     ::Killbill::Test::TestTransaction,
         
     | 
| 
      
 19 
     | 
    
         
            +
                                                                                     ::Killbill::Test::TestResponse,
         
     | 
| 
      
 20 
     | 
    
         
            +
                                                                                     @session)
         
     | 
| 
      
 21 
     | 
    
         
            +
                @plugin.session.should == @session
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              it 'should build payment links' do
         
     | 
| 
      
 25 
     | 
    
         
            +
                link = @plugin.payment_link_for('Pay!', @order_id, @account_id, :bogus, @options)
         
     | 
| 
      
 26 
     | 
    
         
            +
                link.should == "<a account=\"#{@account_id}\" amount=\"#{@options[:amount]}\" authenticity_token=\"false\" href=\"http://www.bogus.com?order=#{@order_id}&account=#{@account_id}&amount=#{@options[:amount]}\">Pay!</a>"
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              it 'should build payment forms' do
         
     | 
| 
      
 30 
     | 
    
         
            +
                form = @plugin.payment_form_for(@order_id, @account_id, :bogus, @options) do |service|
         
     | 
| 
      
 31 
     | 
    
         
            +
                  service.token = 'Pay!'
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
                form.should == "<form accept-charset=\"UTF-8\" action=\"http://www.bogus.com\" disable_authenticity_token=\"true\" method=\"post\"><div style=\"display:none\"></div>
         
     | 
| 
      
 34 
     | 
    
         
            +
            Pay!
         
     | 
| 
      
 35 
     | 
    
         
            +
            <input id=\"order\" name=\"order\" type=\"hidden\" value=\"#{@order_id}\" />
         
     | 
| 
      
 36 
     | 
    
         
            +
            <input id=\"account\" name=\"account\" type=\"hidden\" value=\"#{@account_id}\" />
         
     | 
| 
      
 37 
     | 
    
         
            +
            <input id=\"amount\" name=\"amount\" type=\"hidden\" value=\"#{@options[:amount]}\" />
         
     | 
| 
      
 38 
     | 
    
         
            +
            </form>"
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
              it 'should save responses and transactions' do
         
     | 
| 
      
 42 
     | 
    
         
            +
                response, transaction = @plugin.save_response_and_transaction(::ActiveMerchant::Billing::Response.new(true, 'OK'), :custom_thinggy, @account_id, SecureRandom.uuid, :default, SecureRandom.uuid, SecureRandom.uuid, :op, 1242, 'USD')
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                response.api_call.should == :custom_thinggy
         
     | 
| 
      
 45 
     | 
    
         
            +
                transaction.transaction_type.should == :op
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
              it 'should access global variables' do
         
     | 
| 
      
 49 
     | 
    
         
            +
                @plugin.kb_apis.is_a?(::Killbill::Plugin::KillbillApi).should be_true
         
     | 
| 
      
 50 
     | 
    
         
            +
                @plugin.gateway.is_a?(::Killbill::Plugin::ActiveMerchant::Gateway).should be_true
         
     | 
| 
      
 51 
     | 
    
         
            +
                @plugin.logger.respond_to?(:info).should be_true
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
              private
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
              def setup_public_plugin
         
     | 
| 
      
 57 
     | 
    
         
            +
                Dir.mktmpdir do |dir|
         
     | 
| 
      
 58 
     | 
    
         
            +
                  file = File.new(File.join(dir, 'test.yml'), 'w+')
         
     | 
| 
      
 59 
     | 
    
         
            +
                  file.write(<<-eos)
         
     | 
| 
      
 60 
     | 
    
         
            +
            :test:
         
     | 
| 
      
 61 
     | 
    
         
            +
              :test: true
         
     | 
| 
      
 62 
     | 
    
         
            +
            # As defined by spec_helper.rb
         
     | 
| 
      
 63 
     | 
    
         
            +
            :database:
         
     | 
| 
      
 64 
     | 
    
         
            +
              :adapter: 'sqlite3'
         
     | 
| 
      
 65 
     | 
    
         
            +
              :database: 'test.db'
         
     | 
| 
      
 66 
     | 
    
         
            +
                  eos
         
     | 
| 
      
 67 
     | 
    
         
            +
                  file.close
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                  plugin          = ::Killbill::Plugin::ActiveMerchant::PaymentPlugin.new(Proc.new { |config| nil },
         
     | 
| 
      
 70 
     | 
    
         
            +
                                                                                          :test,
         
     | 
| 
      
 71 
     | 
    
         
            +
                                                                                          ::Killbill::Test::TestPaymentMethod,
         
     | 
| 
      
 72 
     | 
    
         
            +
                                                                                          ::Killbill::Test::TestTransaction,
         
     | 
| 
      
 73 
     | 
    
         
            +
                                                                                          ::Killbill::Test::TestResponse)
         
     | 
| 
      
 74 
     | 
    
         
            +
                  payment_api     = ::Killbill::Plugin::ActiveMerchant::RSpec::FakeJavaPaymentApi.new
         
     | 
| 
      
 75 
     | 
    
         
            +
                  plugin.kb_apis  = ::Killbill::Plugin::KillbillApi.new('test', {:payment_api => payment_api})
         
     | 
| 
      
 76 
     | 
    
         
            +
                  plugin.logger   = Logger.new(STDOUT)
         
     | 
| 
      
 77 
     | 
    
         
            +
                  plugin.conf_dir = File.dirname(file)
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                  # Start the plugin here - since the config file will be deleted
         
     | 
| 
      
 80 
     | 
    
         
            +
                  plugin.start_plugin
         
     | 
| 
      
 81 
     | 
    
         
            +
                end
         
     | 
| 
      
 82 
     | 
    
         
            +
              end
         
     | 
| 
      
 83 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -20,24 +20,26 @@ describe Killbill::Plugin::ActiveMerchant::ActiveRecord::Response do 
     | 
|
| 
       20 
20 
     | 
    
         
             
              end
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
              it 'should construct responses correctly' do
         
     | 
| 
       23 
     | 
    
         
            -
                api_call 
     | 
| 
       24 
     | 
    
         
            -
                kb_account_id 
     | 
| 
       25 
     | 
    
         
            -
                kb_payment_id 
     | 
| 
       26 
     | 
    
         
            -
                kb_payment_transaction_id 
     | 
| 
       27 
     | 
    
         
            -
                transaction_type 
     | 
| 
       28 
     | 
    
         
            -
                 
     | 
| 
       29 
     | 
    
         
            -
                 
     | 
| 
      
 23 
     | 
    
         
            +
                api_call                     = 'for debugging only'
         
     | 
| 
      
 24 
     | 
    
         
            +
                kb_account_id                = SecureRandom.uuid
         
     | 
| 
      
 25 
     | 
    
         
            +
                kb_payment_id                = SecureRandom.uuid
         
     | 
| 
      
 26 
     | 
    
         
            +
                kb_payment_transaction_id    = SecureRandom.uuid
         
     | 
| 
      
 27 
     | 
    
         
            +
                transaction_type             = :PURCHASE
         
     | 
| 
      
 28 
     | 
    
         
            +
                payment_processor_account_id = 'petit_poucet'
         
     | 
| 
      
 29 
     | 
    
         
            +
                kb_tenant_id                 = SecureRandom.uuid
         
     | 
| 
      
 30 
     | 
    
         
            +
                response                     = ::ActiveMerchant::Billing::Response.new(true, 'Message', {}, {
         
     | 
| 
       30 
31 
     | 
    
         
             
                    :authorization => SecureRandom.uuid,
         
     | 
| 
       31 
32 
     | 
    
         
             
                    :avs_result    => ::ActiveMerchant::Billing::AVSResult.new(:code => 'P')
         
     | 
| 
       32 
33 
     | 
    
         
             
                })
         
     | 
| 
       33 
34 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
                r = ::Killbill::Test::TestResponse.from_response(api_call, kb_account_id, kb_payment_id, kb_payment_transaction_id, transaction_type, kb_tenant_id, response, {}, ::Killbill::Test::TestResponse)
         
     | 
| 
      
 35 
     | 
    
         
            +
                r = ::Killbill::Test::TestResponse.from_response(api_call, kb_account_id, kb_payment_id, kb_payment_transaction_id, transaction_type, payment_processor_account_id, kb_tenant_id, response, {}, ::Killbill::Test::TestResponse)
         
     | 
| 
       35 
36 
     | 
    
         
             
                r.api_call.should == api_call
         
     | 
| 
       36 
     | 
    
         
            -
                r.kb_account_id.should ==kb_account_id
         
     | 
| 
       37 
     | 
    
         
            -
                r.kb_payment_id.should ==kb_payment_id
         
     | 
| 
       38 
     | 
    
         
            -
                r.kb_payment_transaction_id.should ==kb_payment_transaction_id
         
     | 
| 
       39 
     | 
    
         
            -
                r.transaction_type.should ==transaction_type
         
     | 
| 
       40 
     | 
    
         
            -
                r. 
     | 
| 
      
 37 
     | 
    
         
            +
                r.kb_account_id.should == kb_account_id
         
     | 
| 
      
 38 
     | 
    
         
            +
                r.kb_payment_id.should == kb_payment_id
         
     | 
| 
      
 39 
     | 
    
         
            +
                r.kb_payment_transaction_id.should == kb_payment_transaction_id
         
     | 
| 
      
 40 
     | 
    
         
            +
                r.transaction_type.should == transaction_type
         
     | 
| 
      
 41 
     | 
    
         
            +
                r.payment_processor_account_id.should == payment_processor_account_id
         
     | 
| 
      
 42 
     | 
    
         
            +
                r.kb_tenant_id.should == kb_tenant_id
         
     | 
| 
       41 
43 
     | 
    
         
             
                r.message.should == response.message
         
     | 
| 
       42 
44 
     | 
    
         
             
                r.authorization.should == response.authorization
         
     | 
| 
       43 
45 
     | 
    
         
             
                r.fraud_review.should == response.fraud_review?
         
     | 
| 
         @@ -63,26 +65,27 @@ describe Killbill::Plugin::ActiveMerchant::ActiveRecord::Response do 
     | 
|
| 
       63 
65 
     | 
    
         
             
                ptip.gateway_error_code.should be_nil
         
     | 
| 
       64 
66 
     | 
    
         
             
                ptip.first_payment_reference_id.should be_nil
         
     | 
| 
       65 
67 
     | 
    
         
             
                ptip.second_payment_reference_id.should be_nil
         
     | 
| 
       66 
     | 
    
         
            -
                ptip.properties.size.should ==  
     | 
| 
      
 68 
     | 
    
         
            +
                ptip.properties.size.should == 12
         
     | 
| 
       67 
69 
     | 
    
         
             
              end
         
     | 
| 
       68 
70 
     | 
    
         | 
| 
       69 
71 
     | 
    
         
             
              it 'should create responses and transactions correctly' do
         
     | 
| 
       70 
     | 
    
         
            -
                api_call 
     | 
| 
       71 
     | 
    
         
            -
                kb_account_id 
     | 
| 
       72 
     | 
    
         
            -
                kb_payment_id 
     | 
| 
       73 
     | 
    
         
            -
                kb_payment_transaction_id 
     | 
| 
       74 
     | 
    
         
            -
                transaction_type 
     | 
| 
       75 
     | 
    
         
            -
                 
     | 
| 
       76 
     | 
    
         
            -
                 
     | 
| 
      
 72 
     | 
    
         
            +
                api_call                     = 'for debugging only'
         
     | 
| 
      
 73 
     | 
    
         
            +
                kb_account_id                = SecureRandom.uuid
         
     | 
| 
      
 74 
     | 
    
         
            +
                kb_payment_id                = SecureRandom.uuid
         
     | 
| 
      
 75 
     | 
    
         
            +
                kb_payment_transaction_id    = SecureRandom.uuid
         
     | 
| 
      
 76 
     | 
    
         
            +
                transaction_type             = :PURCHASE
         
     | 
| 
      
 77 
     | 
    
         
            +
                payment_processor_account_id = 'petit_poucet'
         
     | 
| 
      
 78 
     | 
    
         
            +
                kb_tenant_id                 = SecureRandom.uuid
         
     | 
| 
      
 79 
     | 
    
         
            +
                success_response             = ::ActiveMerchant::Billing::Response.new(true, 'Message', {}, {
         
     | 
| 
       77 
80 
     | 
    
         
             
                    :authorization => SecureRandom.uuid,
         
     | 
| 
       78 
81 
     | 
    
         
             
                    :avs_result    => ::ActiveMerchant::Billing::AVSResult.new(:code => 'P')
         
     | 
| 
       79 
82 
     | 
    
         
             
                })
         
     | 
| 
       80 
     | 
    
         
            -
                failure_response 
     | 
| 
      
 83 
     | 
    
         
            +
                failure_response             = ::ActiveMerchant::Billing::Response.new(false, 'Message', {}, {
         
     | 
| 
       81 
84 
     | 
    
         
             
                    :authorization => SecureRandom.uuid,
         
     | 
| 
       82 
85 
     | 
    
         
             
                    :avs_result    => ::ActiveMerchant::Billing::AVSResult.new(:code => 'P')
         
     | 
| 
       83 
86 
     | 
    
         
             
                })
         
     | 
| 
       84 
87 
     | 
    
         | 
| 
       85 
     | 
    
         
            -
                response, transaction = ::Killbill::Test::TestResponse.create_response_and_transaction('test', ::Killbill::Test::TestTransaction, api_call, kb_account_id, kb_payment_id, kb_payment_transaction_id, transaction_type, kb_tenant_id, success_response, 120, 'USD', {}, ::Killbill::Test::TestResponse)
         
     | 
| 
      
 88 
     | 
    
         
            +
                response, transaction = ::Killbill::Test::TestResponse.create_response_and_transaction('test', ::Killbill::Test::TestTransaction, api_call, kb_account_id, kb_payment_id, kb_payment_transaction_id, transaction_type, payment_processor_account_id, kb_tenant_id, success_response, 120, 'USD', {}, ::Killbill::Test::TestResponse)
         
     | 
| 
       86 
89 
     | 
    
         
             
                found_response        = ::Killbill::Test::TestResponse.find(response.id)
         
     | 
| 
       87 
90 
     | 
    
         
             
                found_response.should == response
         
     | 
| 
       88 
91 
     | 
    
         
             
                found_response.test_transaction.should == transaction
         
     | 
| 
         @@ -90,11 +93,31 @@ describe Killbill::Plugin::ActiveMerchant::ActiveRecord::Response do 
     | 
|
| 
       90 
93 
     | 
    
         
             
                found_transaction.should == transaction
         
     | 
| 
       91 
94 
     | 
    
         
             
                found_transaction.test_response.should == response
         
     | 
| 
       92 
95 
     | 
    
         | 
| 
       93 
     | 
    
         
            -
                response, transaction = ::Killbill::Test::TestResponse.create_response_and_transaction('test', ::Killbill::Test::TestTransaction, api_call, kb_account_id, kb_payment_id, kb_payment_transaction_id, transaction_type, kb_tenant_id, failure_response, 120, 'USD', {}, ::Killbill::Test::TestResponse)
         
     | 
| 
      
 96 
     | 
    
         
            +
                response, transaction = ::Killbill::Test::TestResponse.create_response_and_transaction('test', ::Killbill::Test::TestTransaction, api_call, kb_account_id, kb_payment_id, kb_payment_transaction_id, transaction_type, payment_processor_account_id, kb_tenant_id, failure_response, 120, 'USD', {}, ::Killbill::Test::TestResponse)
         
     | 
| 
       94 
97 
     | 
    
         
             
                transaction.should be_nil
         
     | 
| 
       95 
98 
     | 
    
         
             
                found_response = ::Killbill::Test::TestResponse.find(response.id)
         
     | 
| 
       96 
99 
     | 
    
         
             
                found_response.should == response
         
     | 
| 
       97 
100 
     | 
    
         
             
                found_response.test_transaction.should be_nil
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                # Lookup responses for kb_payment_id
         
     | 
| 
      
 103 
     | 
    
         
            +
                responses = ::Killbill::Test::TestResponse.responses_from_kb_payment_id(transaction_type, kb_payment_id, kb_tenant_id)
         
     | 
| 
      
 104 
     | 
    
         
            +
                responses.size.should == 2
         
     | 
| 
      
 105 
     | 
    
         
            +
                responses[0].success.should be_true
         
     | 
| 
      
 106 
     | 
    
         
            +
                responses[1].success.should be_false
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                # Lookup responses for kb_payment_transaction_id
         
     | 
| 
      
 109 
     | 
    
         
            +
                responses = ::Killbill::Test::TestResponse.responses_from_kb_payment_transaction_id(transaction_type, kb_payment_transaction_id, kb_tenant_id)
         
     | 
| 
      
 110 
     | 
    
         
            +
                responses.size.should == 2
         
     | 
| 
      
 111 
     | 
    
         
            +
                responses[0].success.should be_true
         
     | 
| 
      
 112 
     | 
    
         
            +
                responses[1].success.should be_false
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
                # Dummy queries
         
     | 
| 
      
 115 
     | 
    
         
            +
                ::Killbill::Test::TestResponse.responses_from_kb_payment_id(:foo, kb_payment_id, kb_tenant_id).size.should == 0
         
     | 
| 
      
 116 
     | 
    
         
            +
                ::Killbill::Test::TestResponse.responses_from_kb_payment_id(transaction_type, SecureRandom.uuid, kb_tenant_id).size.should == 0
         
     | 
| 
      
 117 
     | 
    
         
            +
                ::Killbill::Test::TestResponse.responses_from_kb_payment_id(transaction_type, kb_payment_id, SecureRandom.uuid).size.should == 0
         
     | 
| 
      
 118 
     | 
    
         
            +
                ::Killbill::Test::TestResponse.responses_from_kb_payment_transaction_id(:foo, kb_payment_transaction_id, kb_tenant_id).size.should == 0
         
     | 
| 
      
 119 
     | 
    
         
            +
                ::Killbill::Test::TestResponse.responses_from_kb_payment_transaction_id(transaction_type, SecureRandom.uuid, kb_tenant_id).size.should == 0
         
     | 
| 
      
 120 
     | 
    
         
            +
                ::Killbill::Test::TestResponse.responses_from_kb_payment_transaction_id(transaction_type, kb_payment_transaction_id, SecureRandom.uuid).size.should == 0
         
     | 
| 
       98 
121 
     | 
    
         
             
              end
         
     | 
| 
       99 
122 
     | 
    
         | 
| 
       100 
123 
     | 
    
         
             
              it 'should generate the right SQL query' do
         
     | 
| 
         @@ -0,0 +1,38 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'spec/killbill/helpers/payment_method_spec'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            describe Killbill::Plugin::ActiveMerchant::ActiveRecord do
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              before(:all) do
         
     | 
| 
      
 7 
     | 
    
         
            +
                ::Killbill::Test::TestPaymentMethod.delete_all
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              it 'should stream results per batch' do
         
     | 
| 
      
 11 
     | 
    
         
            +
                1.upto(35) do
         
     | 
| 
      
 12 
     | 
    
         
            +
                  ::Killbill::Test::TestPaymentMethod.create(:kb_account_id        => SecureRandom.uuid,
         
     | 
| 
      
 13 
     | 
    
         
            +
                                                             :kb_payment_method_id => SecureRandom.uuid,
         
     | 
| 
      
 14 
     | 
    
         
            +
                                                             :kb_tenant_id         => SecureRandom.uuid,
         
     | 
| 
      
 15 
     | 
    
         
            +
                                                             :token                => SecureRandom.uuid)
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
                ::Killbill::Test::TestPaymentMethod.count.should == 35
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                enum = ::Killbill::Plugin::ActiveMerchant::ActiveRecord::StreamyResultSet.new(40, 10) do |offset, limit|
         
     | 
| 
      
 20 
     | 
    
         
            +
                  ::Killbill::Test::TestPaymentMethod.where('kb_payment_method_id is not NULL')
         
     | 
| 
      
 21 
     | 
    
         
            +
                                                     .order('id ASC')
         
     | 
| 
      
 22 
     | 
    
         
            +
                                                     .offset(offset)
         
     | 
| 
      
 23 
     | 
    
         
            +
                                                     .limit(limit)
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                i = 0
         
     | 
| 
      
 27 
     | 
    
         
            +
                enum.each do |results|
         
     | 
| 
      
 28 
     | 
    
         
            +
                  if i < 3
         
     | 
| 
      
 29 
     | 
    
         
            +
                    results.size.should == 10
         
     | 
| 
      
 30 
     | 
    
         
            +
                  elsif i == 3
         
     | 
| 
      
 31 
     | 
    
         
            +
                    results.size.should == 5
         
     | 
| 
      
 32 
     | 
    
         
            +
                  else
         
     | 
| 
      
 33 
     | 
    
         
            +
                    fail 'Too many results'
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                  i += 1
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
            end
         
     |