mirror of
https://github.com/astuto/astuto.git
synced 2025-12-15 03:07:52 +01:00
58 lines
2.0 KiB
Ruby
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
|