mirror of
https://github.com/lingble/chatwoot.git
synced 2025-10-30 18:47:51 +00:00
142 lines
3.9 KiB
Ruby
142 lines
3.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe Account, type: :model do
|
|
include ActiveJob::TestHelper
|
|
|
|
describe 'associations' do
|
|
it { is_expected.to have_many(:sla_policies).dependent(:destroy_async) }
|
|
it { is_expected.to have_many(:applied_slas).dependent(:destroy_async) }
|
|
it { is_expected.to have_many(:custom_roles).dependent(:destroy_async) }
|
|
end
|
|
|
|
describe 'sla_policies' do
|
|
let!(:account) { create(:account) }
|
|
let!(:sla_policy) { create(:sla_policy, account: account) }
|
|
|
|
it 'returns associated sla policies' do
|
|
expect(account.sla_policies).to eq([sla_policy])
|
|
end
|
|
|
|
it 'deletes associated sla policies' do
|
|
perform_enqueued_jobs do
|
|
account.destroy!
|
|
end
|
|
expect { sla_policy.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
|
end
|
|
end
|
|
|
|
describe 'usage_limits' do
|
|
before do
|
|
create(:installation_config, name: 'ACCOUNT_AGENTS_LIMIT', value: 20)
|
|
end
|
|
|
|
let!(:account) { create(:account) }
|
|
|
|
describe 'audit logs' do
|
|
it 'returns audit logs' do
|
|
# checking whether associated_audits method is present
|
|
expect(account.associated_audits.present?).to be false
|
|
end
|
|
|
|
it 'creates audit logs when account is updated' do
|
|
account.update(name: 'New Name')
|
|
expect(Audited::Audit.where(auditable_type: 'Account', action: 'update').count).to eq 1
|
|
end
|
|
end
|
|
|
|
it 'returns max limits from global config when enterprise version' do
|
|
expect(account.usage_limits).to eq(
|
|
{
|
|
agents: 20,
|
|
inboxes: ChatwootApp.max_limit
|
|
}
|
|
)
|
|
end
|
|
|
|
it 'returns max limits from account when enterprise version' do
|
|
account.update(limits: { agents: 10 })
|
|
expect(account.usage_limits).to eq(
|
|
{
|
|
agents: 10,
|
|
inboxes: ChatwootApp.max_limit
|
|
}
|
|
)
|
|
end
|
|
|
|
it 'returns limits based on subscription' do
|
|
account.update(limits: { agents: 10 }, custom_attributes: { subscribed_quantity: 5 })
|
|
expect(account.usage_limits).to eq(
|
|
{
|
|
agents: 5,
|
|
inboxes: ChatwootApp.max_limit
|
|
}
|
|
)
|
|
end
|
|
|
|
it 'returns max limits from global config if account limit is absent' do
|
|
account.update(limits: { agents: '' })
|
|
expect(account.usage_limits).to eq(
|
|
{
|
|
agents: 20,
|
|
inboxes: ChatwootApp.max_limit
|
|
}
|
|
)
|
|
end
|
|
|
|
it 'returns max limits from app limit if account limit and installation config is absent' do
|
|
account.update(limits: { agents: '' })
|
|
InstallationConfig.where(name: 'ACCOUNT_AGENTS_LIMIT').update(value: '')
|
|
|
|
expect(account.usage_limits).to eq(
|
|
{
|
|
agents: ChatwootApp.max_limit,
|
|
inboxes: ChatwootApp.max_limit
|
|
}
|
|
)
|
|
end
|
|
end
|
|
|
|
describe 'subscribed_features' do
|
|
let(:account) { create(:account) }
|
|
let(:plan_features) do
|
|
{
|
|
'hacker' => %w[feature1 feature2],
|
|
'startups' => %w[feature1 feature2 feature3 feature4]
|
|
}
|
|
end
|
|
|
|
before do
|
|
InstallationConfig.where(name: 'CHATWOOT_CLOUD_PLAN_FEATURES').first_or_create(value: plan_features)
|
|
end
|
|
|
|
context 'when plan_name is hacker' do
|
|
it 'returns the features for the hacker plan' do
|
|
account.custom_attributes = { 'plan_name': 'hacker' }
|
|
account.save!
|
|
|
|
expect(account.subscribed_features).to eq(%w[feature1 feature2])
|
|
end
|
|
end
|
|
|
|
context 'when plan_name is startups' do
|
|
it 'returns the features for the startups plan' do
|
|
account.custom_attributes = { 'plan_name': 'startups' }
|
|
account.save!
|
|
|
|
expect(account.subscribed_features).to eq(%w[feature1 feature2 feature3 feature4])
|
|
end
|
|
end
|
|
|
|
context 'when plan_features is blank' do
|
|
it 'returns an empty array' do
|
|
account.custom_attributes = {}
|
|
account.save!
|
|
|
|
expect(account.subscribed_features).to be_nil
|
|
end
|
|
end
|
|
end
|
|
end
|