spec/balanced/resources/card_spec.rb in balanced-0.8.2 vs spec/balanced/resources/card_spec.rb in balanced-1.0.beta1

- old
+ new

@@ -1,36 +1,110 @@ require 'spec_helper' -describe Balanced::Card, '#debit', :vcr => true, :marketplace => true do - it 'raises an exception with an unassociated card' do - card = Balanced::Card.new - expect { - card.debit - }.to raise_error(Balanced::UnassociatedCardError) - end -end +describe Balanced::Card, :vcr do -describe Balanced::Card, '#hold', :vcr => true, :marketplace => true do - it 'raises an exception with an unassociated card' do - card = Balanced::Card.new - expect { - card.hold - }.to raise_error(Balanced::UnassociatedCardError) + before do + api_key = Balanced::ApiKey.new.save + Balanced.configure api_key.secret + @marketplace = Balanced::Marketplace.new.save + @card = Balanced::Card.new( + :number => '5105105105105100', + :expiration_month => '12', + :expiration_year => '2020', + :cvv => '123' + ).save end -end -describe Balanced::Card, '#debit', :vcr => true, :marketplace => true do - it 'debits the card if an account is set' do - # tokenize card - card = Balanced::Card.new( - :card_number => '4111111111111111', - :expiration_year => '2016', - :expiration_month => '12') - card.save + describe 'card', :vcr do + it 'should be a Balanced::Card' do + @card.should be_instance_of Balanced::Card + end - # associate card to account - Balanced::Account.new(:email_address => 'user@example.com', :name => 'John Doe', :card_uri => card.uri).save + describe 'attributes', :vcr do + subject { @card } + its(:href) { should match "/cards/#{@card.id}" } + its(:number) { should end_with '5100' } + its(:expiration_month) { should eql 12 } + its(:expiration_year) { should eql 2020 } + its(:cvv) { should eql 'xxx' } + its(:cvv_match) { should eql 'yes' } + its(:cvv_result) { should eql 'Match' } + end - card = Balanced::Card.find(card.uri) - card.debit(:amount => 10000).should be_instance_of Balanced::Debit + describe 'creating a one-time debit', :vcr => {:record => :new_episodes} do + subject do + @card.debit( + :amount => 100, + :appears_on_statement_as => 'A lolipop', + :description => 'My first debit!' + ) + end + it { should_not be_nil } + it { should be_instance_of Balanced::Debit } + + its(:href) { should_not be_nil } + its(:amount) { should eql 100 } + its(:appears_on_statement_as) { should eql 'BAL*A lolipop' } + its(:description) { should eql 'My first debit!' } + its(:status) { should eql 'succeeded' } + end + + describe 'creating a one-time hold', :vcr => true, :skip => true do + subject do + @card.hold( + :amount => 100, + :appears_on_statement_as => 'HOLD.UP', + :description => 'HeldForEver' + ) + end + it { should_not be_nil } + it { should be_instance_of Balanced::CardHold } + + its(:href) { should_not be_nil } + its(:amount) { should eql 100 } + its(:description) { should eql 'HeldForEver' } + its(:appears_on_statement_as) { should eql 'BAL*HOLD.UP' } + end + + describe '#debits', :vcr do + subject do + @card.debits + end + its(:href) { should eq("/cards/#{@card.id}/debits") } + it 'should be a page' do + should be_instance_of Balanced::Pager + end + end + + describe '#holds', :vcr => true, :skip => true do + subject do + @card.holds + end + + its(:href) { should eq("/cards/#{@card.id}/card_holds") } + + it 'should be a page' do + should be_instance_of Balanced::Pager + end + end + + describe '#customer', :vcr do + + it 'should default to nil' do + @card.customer.should be_nil + end + + context 'after associating to a customer' do + before do + @customer = Balanced::Customer.new.save + @card.associate_to_customer(@customer) + @card.reload + end + subject { @card } + its(:customer) { should_not be_nil } + end + + end + end + end