Files
astuto/spec/models/tenant_billing_spec.rb
Riccardo Graziosi bea146e612 Add billing (#329)
2024-05-03 18:11:07 +02:00

58 lines
2.0 KiB
Ruby

require 'rails_helper'
RSpec.describe TenantBilling, type: :model do
let(:tenant_billing) { FactoryBot.build(:tenant_billing) }
it 'should be valid' do
expect(tenant_billing).to be_valid
end
it 'has a status that can be trial, active, canceled or perpetual (default: trial)' do
expect(tenant_billing.status).to eq('trial')
tenant_billing.status = 'active'
expect(tenant_billing).to be_valid
tenant_billing.status = 'canceled'
expect(tenant_billing).to be_valid
tenant_billing.status = 'perpetual'
expect(tenant_billing).to be_valid
end
it 'has a trial_ends_at datetime that defaults to TRIAL_PERIOD_DAYS env variable' do
tenant_billing.save
expect(tenant_billing.trial_ends_at).to be_within(5.seconds).of(Time.current + Rails.application.trial_period_days)
end
it 'has a subscription_ends_at datetime that defaults to current time' do
tenant_billing.save
expect(tenant_billing.subscription_ends_at).to be_within(5.seconds).of(Time.current)
end
it 'has a has_active_subscription? method that returns true if tenant can access the service' do
tenant_billing.status = 'perpetual'
expect(tenant_billing.has_active_subscription?).to be_truthy
tenant_billing.status = 'active'
tenant_billing.subscription_ends_at = Time.current + 1.day
expect(tenant_billing.has_active_subscription?).to be_truthy
tenant_billing.subscription_ends_at = Time.current - 1.day - 1.second
expect(tenant_billing.has_active_subscription?).to be_falsey
tenant_billing.status = 'trial'
tenant_billing.trial_ends_at = Time.current + 1.day
expect(tenant_billing.has_active_subscription?).to be_truthy
tenant_billing.trial_ends_at = Time.current - 1.day
expect(tenant_billing.has_active_subscription?).to be_falsey
end
it 'has a soft expiration of 1 day if in status "active"' do
tenant_billing.status = 'active'
tenant_billing.subscription_ends_at = Time.current - 23.hours - 59.minutes - 59.seconds
expect(tenant_billing.has_active_subscription?).to be_truthy
end
end