houdini/spec/lib/cancel_billing_subscriptions_spec.rb
Bradley M. Kuhn 6772312ea7 Relicense all .rb files under new project license.
The primary license of the project is changing to:
  AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later

with some specific files to be licensed under the one of two licenses:
   CC0-1.0
   LGPL-3.0-or-later

This commit is one of the many steps to relicense the entire codebase.

Documentation granting permission for this relicensing (from all past
contributors who hold copyrights) is on file with Software Freedom
Conservancy, Inc.
2018-03-25 15:10:40 -04:00

102 lines
No EOL
3.5 KiB
Ruby

# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
require 'rails_helper'
require 'stripe_mock'
describe CancelBillingSubscription do
let(:stripe_helper) { StripeMock.create_test_helper }
before(:each) {
StripeMock.start
@card_token = StripeMock.generate_card_token(last4: '9191', exp_year:2011)
@np = force_create(:nonprofit)
}
after {StripeMock.stop}
describe 'parameter validation' do
it 'without db' do
result = CancelBillingSubscription.with_stripe(nil)
errors = result[:json][:errors]
expect(errors.length).to eq(2)
expect(result[:status]).to eq :unprocessable_entity
expect_validation_errors(errors, [
{key: :nonprofit, name: :required},
{key: :nonprofit, name: :is_a}
])
end
context 'with db' do
before(:each) {
@np = create(:nonprofit)
}
it 'nonprofit valid but no card or billing_subscription' do
result = CancelBillingSubscription.with_stripe(@np)
expect_proper_failure(result)
end
it 'nonprofit valid but no card' do
force_create(:billing_subscription, :nonprofit => @np )
result = CancelBillingSubscription.with_stripe(@np)
expect_proper_failure(result)
end
it 'nonprofit valid but no billings subscription' do
@np.active_card = build(:card)
result = CancelBillingSubscription.with_stripe(@np)
expect_proper_failure(result)
end
def expect_proper_failure(result)
expect(result[:status]).to eq(:unprocessable_entity)
expect(result[:json][:error]).to start_with("We don\'t have a subscription for your non-profit. Please contact support.")
end
end
end
context 'processing the billing subscription' do
before(:each){
bp = create(:billing_plan, amount: 133333, percentage_fee: 0.33, tier: 1, name: "fake plan")
@stripe_customer = Stripe::Customer.create()
@plan = Stripe::Plan.create(id: 'test_str_plan', amount:0, currency: 'USD', interval: 'year', name: 'test PLan')
@original_str_subscription = @stripe_customer.subscriptions.create(:plan => @plan.id)
create(:card, holder: @np, stripe_customer_id:@stripe_customer.id)
@np.billing_subscription = build(:billing_subscription, billing_plan: bp, stripe_subscription_id: @original_str_subscription.id)
@default_plan = create(:billing_plan, :id => Settings.default_bp.id)
}
it 'handles failure of stripe properly' do
StripeMock.prepare_error(Stripe::StripeError.new('some failure'), :retrieve_customer_subscription)
original_bs = @np.billing_subscription
result = CancelBillingSubscription::with_stripe(@np)
expect(result[:status]).to eq :unprocessable_entity
expect(result[:json][:error]).to start_with("Oops")
expect(@np.billing_subscription).to eq(original_bs)
str_customer_reloaded = Stripe::Customer.retrieve(@stripe_customer.id)
expect(str_customer_reloaded.subscriptions.data).to eq([@original_str_subscription ])
end
it 'should succeed' do
result = CancelBillingSubscription::with_stripe(@np)
expect(result[:status]).to eq :ok
expect(result[:json]).to eq Hash.new
expect(@np.billing_subscription.status).to eq 'active'
expect(@np.billing_subscription.billing_plan).to eq @default_plan
str_customer_reloaded = Stripe::Customer.retrieve(@stripe_customer.id)
expect(str_customer_reloaded.subscriptions.data.length).to eq 0
end
end
end