From d6310fbd750ae5139f20977c2ceeba6098597c82 Mon Sep 17 00:00:00 2001 From: Tanmay Sharma Date: Mon, 11 Aug 2025 22:21:03 +0530 Subject: [PATCH] fix rspecs --- app/models/inbox_assignment_policy.rb | 3 +- .../jobs/assignment_v2/assignment_job_spec.rb | 10 ++-- spec/models/assignment_policy_spec.rb | 58 +------------------ spec/models/inbox_assignment_policy_spec.rb | 49 ---------------- 4 files changed, 9 insertions(+), 111 deletions(-) diff --git a/app/models/inbox_assignment_policy.rb b/app/models/inbox_assignment_policy.rb index 9df40c064..6720c357b 100644 --- a/app/models/inbox_assignment_policy.rb +++ b/app/models/inbox_assignment_policy.rb @@ -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 diff --git a/spec/jobs/assignment_v2/assignment_job_spec.rb b/spec/jobs/assignment_v2/assignment_job_spec.rb index 62b4e476f..7ca71cc6f 100644 --- a/spec/jobs/assignment_v2/assignment_job_spec.rb +++ b/spec/jobs/assignment_v2/assignment_job_spec.rb @@ -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) diff --git a/spec/models/assignment_policy_spec.rb b/spec/models/assignment_policy_spec.rb index a5d35fe8c..f896bf4fc 100644 --- a/spec/models/assignment_policy_spec.rb +++ b/spec/models/assignment_policy_spec.rb @@ -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 diff --git a/spec/models/inbox_assignment_policy_spec.rb b/spec/models/inbox_assignment_policy_spec.rb index b46da4b72..5d4420f03 100644 --- a/spec/models/inbox_assignment_policy_spec.rb +++ b/spec/models/inbox_assignment_policy_spec.rb @@ -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