Skip to content

Commit

Permalink
Merge pull request #35 from algorich/bank_debit_payment
Browse files Browse the repository at this point in the history
Bank debit payment and Payment slip payment
  • Loading branch information
Irio committed Oct 4, 2013
2 parents 25db0f2 + 44877fb commit e591e0e
Show file tree
Hide file tree
Showing 7 changed files with 140 additions and 3 deletions.
18 changes: 16 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,17 @@ payment_request = MyMoip::PaymentRequest.new('your_logging_id')
payment_request.api_call(payment_slip_payment, token: transparent_request.token)
```

#### Bank debit

```ruby
bank_debit = MyMoip::BankDebit.new(bank: :itau)
# you can find the available banks on MyMoip::BankDebit::AVAILABLE_BANKS

bank_debit_payment = MyMoip::BankDebitPayment.new(bank_debit)
payment_request = MyMoip::PaymentRequest.new('your_logging_id')
payment_request.api_call(bank_debit_payment, token: transparent_request.token)
```

### Success?

```ruby
Expand All @@ -156,8 +167,11 @@ payment_request.success?

### Payment url

For payment slip, payment request will have a url that you can redirect the user
to print and pay the payment slip.
For **payment slip** and **bank debit**, payment request will have a url. This
url redirect to:

- When **payment slip**: the payment slip to user print and pay
- When **bank debit**: the bank's specific payment page

```ruby
payment_request.url
Expand Down
22 changes: 22 additions & 0 deletions lib/mymoip/bank_debit.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
module MyMoip
class BankDebit
include ActiveModel::Validations

attr_accessor :bank

AVAILABLE_BANKS = [:banco_do_brasil, :bradesco, :banrisul, :itau]

validates :bank, presence: true, inclusion: AVAILABLE_BANKS

def initialize(attrs)
attrs.each do |attr, value|
public_send(:"#{attr}=", value)
end
end

def bank=(value)
value = value.to_sym unless value.nil?
@bank = value
end
end
end
27 changes: 27 additions & 0 deletions lib/mymoip/bank_debit_payment.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
module MyMoip
class BankDebitPayment
attr_accessor :bank_debit

def initialize(bank_debit)
@bank_debit = bank_debit
end

def to_json
raise InvalidBankDebit, "No bank debit information provided." if @bank_debit.nil?
raise InvalidBankDebit if @bank_debit.invalid?

json = {
Forma: "DebitoBancario",
}

json[:Instituicao] = {
banco_do_brasil: "BancoDoBrasil",
bradesco: "Bradesco",
banrisul: "Banrisul",
itau: "Itau"
}.fetch(@bank_debit.bank)

json
end
end
end
2 changes: 2 additions & 0 deletions lib/mymoip/exceptions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ class InvalidInstruction < Error; end
class InvalidPayer < Error; end

class InvalidPaymentSlip < Error; end

class InvalidBankDebit < Error; end
end
6 changes: 5 additions & 1 deletion test/fixtures/fixture.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,11 @@ def self.payment_slip(params = {})
instruction_line_3: 'Line 3',
logo_url: 'http://www.myurl.com/logo.png'
}.merge(params)

MyMoip::PaymentSlip.new(params)
end

def self.bank_debit(params = {})
params = { bank: :itau }.merge(params)
MyMoip::BankDebit.new(params)
end
end
36 changes: 36 additions & 0 deletions test/lib/test_bank_debit.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
require_relative '../test_helper'

class TestBankDebit < Test::Unit::TestCase
def test_initialization_and_setters
subject = MyMoip::BankDebit.new(bank: :itau)
assert_equal :itau, subject.bank
end

def test_initialization_and_setters_with_string_keys
subject = MyMoip::BankDebit.new('bank' => :itau)
assert_equal :itau, subject.bank
end

def test_validate_presence_of_bank_attribute
subject = Fixture.bank_debit(bank: nil)
assert subject.invalid? && subject.errors[:bank].present?,
'should be invalid without a bank name'
end

def test_converts_bank_string_to_symbol
subject = Fixture.bank_debit(bank: "itau")
assert_equal :itau, subject.bank
end

def test_accepts_any_bank_from_available_banks_constant
MyMoip::BankDebit::AVAILABLE_BANKS.each do |bank|
subject = Fixture.bank_debit(bank: bank)
assert subject.valid?, 'should be valid'
end
end

def test_dont_accept_bank_out_of_available_banks_constant
subject = Fixture.bank_debit(bank: :unavailable_bank)
assert subject.invalid? && subject.errors[:bank].present?, 'should not be valid'
end
end
32 changes: 32 additions & 0 deletions test/lib/test_bank_debit_payment.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
require_relative '../test_helper'

class TestBankDebitPayment < Test::Unit::TestCase
def test_initialization_and_setters
bank_debit = Fixture.bank_debit
subject = MyMoip::BankDebitPayment.new(bank_debit)
assert_equal bank_debit, subject.bank_debit
end

def test_json_format
payment = MyMoip::BankDebitPayment.new(Fixture.bank_debit)
assert_equal "DebitoBancario", payment.to_json[:Forma]
end

def test_to_json_should_accept_any_bank_from_available_banks_constant
MyMoip::BankDebit::AVAILABLE_BANKS.each do |bank|
payment = MyMoip::BankDebitPayment.new(Fixture.bank_debit(bank: bank))
assert_nothing_raised(KeyError) { payment.to_json }
end
end

def test_to_json_method_raises_an_exception_when_called_without_a_bank_debit
subject = MyMoip::BankDebitPayment.new(nil)
assert_raise(MyMoip::InvalidBankDebit) { subject.to_json }
end

def test_to_json_method_raises_an_exception_when_called_with_a_invalid_bank_debit
subject = MyMoip::BankDebitPayment.new(Fixture.bank_debit)
MyMoip::BankDebit.any_instance.stubs(:invalid?).returns(true)
assert_raise(MyMoip::InvalidBankDebit) { subject.to_json }
end
end

0 comments on commit e591e0e

Please sign in to comment.