fix rspecs

This commit is contained in:
Tanmay Sharma
2025-08-11 22:21:03 +05:30
parent de0aa5bb30
commit d6310fbd75
4 changed files with 9 additions and 111 deletions
+2 -1
View File
@@ -13,7 +13,7 @@
# Indexes
#
# index_inbox_assignment_policies_on_assignment_policy_id (assignment_policy_id)
# index_inbox_assignment_policies_on_inbox_id (inbox_id)
# index_inbox_assignment_policies_on_inbox_id (inbox_id) UNIQUE
#
class InboxAssignmentPolicy < ApplicationRecord
@@ -22,6 +22,7 @@ class InboxAssignmentPolicy < ApplicationRecord
belongs_to :assignment_policy
# Validations
validates :inbox_id, uniqueness: true
validate :inbox_belongs_to_same_account
# Delegations
@@ -43,8 +43,9 @@ RSpec.describe AssignmentV2::AssignmentJob, type: :job do
end
it 'assigns multiple conversations for inbox' do
# Mock the feature flag for assignment_v2
allow(inbox.account).to receive(:feature_enabled?).with('assignment_v2').and_return(true)
allow(Inbox).to receive(:find_by).with(id: inbox.id).and_return(inbox)
allow(account).to receive(:assignment_v2_enabled?).and_return(true)
service = instance_double(AssignmentV2::AssignmentService)
expect(AssignmentV2::AssignmentService).to receive(:new).with(inbox: inbox).and_return(service)
@@ -54,8 +55,9 @@ RSpec.describe AssignmentV2::AssignmentJob, type: :job do
end
it 'logs the number of assigned conversations' do
# Mock the feature flag for assignment_v2
allow(inbox.account).to receive(:feature_enabled?).with('assignment_v2').and_return(true)
allow(Inbox).to receive(:find_by).with(id: inbox.id).and_return(inbox)
allow(account).to receive(:assignment_v2_enabled?).and_return(true)
service = instance_double(AssignmentV2::AssignmentService)
allow(AssignmentV2::AssignmentService).to receive(:new).with(inbox: inbox).and_return(service)
@@ -178,9 +180,9 @@ RSpec.describe AssignmentV2::AssignmentJob, type: :job do
it 'processes large inbox assignments in batches' do
# Create many unassigned conversations
create_list(:conversation, 100, inbox: inbox, assignee: nil)
# Mock the feature flag for assignment_v2
allow(inbox.account).to receive(:feature_enabled?).with('assignment_v2').and_return(true)
allow(Inbox).to receive(:find_by).with(id: inbox.id).and_return(inbox)
allow(account).to receive(:assignment_v2_enabled?).and_return(true)
service = instance_double(AssignmentV2::AssignmentService)
allow(AssignmentV2::AssignmentService).to receive(:new).and_return(service)
+1 -57
View File
@@ -25,69 +25,13 @@ RSpec.describe AssignmentPolicy, type: :model do
it { is_expected.to validate_presence_of(:fair_distribution_window) }
it { is_expected.to validate_numericality_of(:fair_distribution_window).is_greater_than(60).is_less_than_or_equal_to(86_400) }
context 'with balanced assignment validation' do
let(:enterprise_account) { create(:account) }
before do
allow(enterprise_account).to receive(:feature_enabled?).with(:enterprise_agent_capacity).and_return(true)
end
it 'allows balanced assignment for enterprise accounts' do
policy = build(:assignment_policy, account: enterprise_account, assignment_order: :balanced)
expect(policy).to be_valid
end
it 'rejects balanced assignment for non-enterprise accounts' do
policy = build(:assignment_policy, account: account, assignment_order: :balanced)
expect(policy).not_to be_valid
expect(policy.errors[:assignment_order]).to include('Balanced assignment is only available for enterprise accounts')
end
end
end
describe 'enums' do
it { is_expected.to define_enum_for(:assignment_order).with_values(round_robin: 0, balanced: 1) }
it { is_expected.to define_enum_for(:assignment_order).with_values(round_robin: 0) }
it { is_expected.to define_enum_for(:conversation_priority).with_values(earliest_created: 0, longest_waiting: 1) }
end
describe 'scopes' do
let!(:enabled_policy) { create(:assignment_policy, account: account, enabled: true) }
let!(:disabled_policy) { create(:assignment_policy, account: account, enabled: false) }
it 'filters enabled policies' do
expect(described_class.enabled).to include(enabled_policy)
expect(described_class.enabled).not_to include(disabled_policy)
end
it 'filters disabled policies' do
expect(described_class.disabled).to include(disabled_policy)
expect(described_class.disabled).not_to include(enabled_policy)
end
end
describe '#can_use_balanced_assignment?' do
context 'when account has enterprise agent capacity feature' do
before do
allow(account).to receive(:feature_enabled?).with(:enterprise_agent_capacity).and_return(true)
end
it 'returns true' do
expect(assignment_policy.can_use_balanced_assignment?).to be true
end
end
context 'when account does not have enterprise features' do
before do
allow(account).to receive(:feature_enabled?).with(:enterprise_agent_capacity).and_return(false)
end
it 'returns false' do
expect(assignment_policy.can_use_balanced_assignment?).to be false
end
end
end
describe '#webhook_data' do
it 'returns correct data structure' do
data = assignment_policy.webhook_data
@@ -48,28 +48,6 @@ RSpec.describe InboxAssignmentPolicy, type: :model do
end
end
describe 'scopes' do
let!(:enabled_policy) { create(:assignment_policy, account: account, enabled: true) }
let!(:disabled_policy) { create(:assignment_policy, account: account, enabled: false) }
let(:inbox2) { create(:inbox, account: account) }
let!(:enabled_inbox_policy) { create(:inbox_assignment_policy, inbox: inbox, assignment_policy: enabled_policy) }
let!(:disabled_inbox_policy) { create(:inbox_assignment_policy, inbox: inbox2, assignment_policy: disabled_policy) }
describe '.enabled' do
it 'returns only inbox policies with enabled assignment policies' do
expect(described_class.enabled).to include(enabled_inbox_policy)
expect(described_class.enabled).not_to include(disabled_inbox_policy)
end
end
describe '.disabled' do
it 'returns only inbox policies with disabled assignment policies' do
expect(described_class.disabled).to include(disabled_inbox_policy)
expect(described_class.disabled).not_to include(enabled_inbox_policy)
end
end
end
describe '#webhook_data' do
it 'returns correct data structure' do
data = inbox_assignment_policy.webhook_data
@@ -84,33 +62,6 @@ RSpec.describe InboxAssignmentPolicy, type: :model do
end
end
describe 'cache management' do
it 'clears inbox cache on create' do
expect(Rails.cache).to receive(:delete).with("assignment_v2:inbox_policy:#{inbox.id}")
create(:inbox_assignment_policy, inbox: inbox, assignment_policy: assignment_policy)
end
it 'clears inbox cache on update' do
expect(Rails.cache).to receive(:delete).with("assignment_v2:inbox_policy:#{inbox.id}").at_least(:once)
inbox_assignment_policy.update!(updated_at: Time.current)
end
it 'clears inbox cache on destroy' do
expect(Rails.cache).to receive(:delete).with("assignment_v2:inbox_policy:#{inbox.id}").at_least(:once)
inbox_assignment_policy.destroy!
end
it 'updates account cache' do
# AccountCacheRevalidator concern should trigger cache update
expect(inbox_assignment_policy).to receive(:update_account_cache)
inbox_assignment_policy.send(:clear_inbox_cache)
end
end
describe 'business logic constraints' do
it 'prevents multiple policies per inbox' do
# Ensure first policy exists