spec/models/tang/charge_spec.rb in tang-0.0.9 vs spec/models/tang/charge_spec.rb in tang-0.1.0

- old
+ new

@@ -1,7 +1,53 @@ require 'rails_helper' module Tang RSpec.describe Charge, type: :model do - pending "add some examples to (or delete) #{__FILE__}" + let(:stripe_helper) { StripeMock.create_test_helper } + before { StripeMock.start } + after { StripeMock.stop } + + it "has a valid factory" do + expect(FactoryBot.create(:charge)).to be_valid + end + + it "is invalid without an invoice" do + expect(FactoryBot.build(:charge, invoice: nil)).to be_invalid + end + + it "is invalid without a stripe id" do + expect(FactoryBot.build(:charge, stripe_id: nil)).to be_invalid + end + + it "is invalid without an amount greater than 50" do + expect(FactoryBot.build(:charge, amount: 0)).to be_invalid + end + + it "is invalid without a currency" do + expect(FactoryBot.build(:charge, currency: nil)).to be_invalid + end + + it "is invalid with a long statement descriptor" do + expect(FactoryBot.build(:charge, statement_descriptor: '123456789012345678901234567890')).to be_invalid + end + + it "can be searched by stripe id" do + charge = FactoryBot.create(:charge) + expect(Charge.search(charge.stripe_id)).to include(charge) + end + + it "can be searched by customer stripe id" do + stripe_customer = Stripe::Customer.create(id: 'test_customer_sub') + customer = FactoryBot.create(:customer, stripe_id: stripe_customer.id) + invoice = FactoryBot.create(:invoice, customer: customer) + charge = FactoryBot.create(:charge, invoice: invoice) + expect(Charge.search(customer.stripe_id)).to include(charge) + end + + it "can set the card source from stripe" do + stripe_charge = Stripe::Charge.create(amount: 1, currency: 'usd', source: stripe_helper.generate_card_token) + invoice = FactoryBot.create(:invoice) + charge = Charge.from_stripe(stripe_charge, invoice) + expect(charge.card_stripe_id).to eq(stripe_charge.source.id) + end end end