From 5bf5c880755b05c42a76eaa3dffb63d8889c67bf Mon Sep 17 00:00:00 2001 From: tds-1 Date: Tue, 17 Mar 2026 15:15:31 +0530 Subject: [PATCH] fix: scope migration trigger to admin toggle and broaden inbox filter --- .../account_assignment_policy_job.rb | 2 +- enterprise/app/models/enterprise/account.rb | 2 ++ .../app/models/enterprise/concerns/account.rb | 2 +- spec/enterprise/models/account_spec.rb | 30 ++++++++++--------- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/enterprise/app/jobs/migration/account_assignment_policy_job.rb b/enterprise/app/jobs/migration/account_assignment_policy_job.rb index 6ada284cd..cec7909aa 100644 --- a/enterprise/app/jobs/migration/account_assignment_policy_job.rb +++ b/enterprise/app/jobs/migration/account_assignment_policy_job.rb @@ -5,7 +5,7 @@ class Migration::AccountAssignmentPolicyJob < ApplicationJob def perform(account) inboxes_with_limit = account.inboxes - .where("auto_assignment_config->>'max_assignment_limit' ~ '^[1-9]'") + .where("auto_assignment_config->>'max_assignment_limit' ~ '[1-9]'") return if inboxes_with_limit.empty? diff --git a/enterprise/app/models/enterprise/account.rb b/enterprise/app/models/enterprise/account.rb index 92038b298..2422a7421 100644 --- a/enterprise/app/models/enterprise/account.rb +++ b/enterprise/app/models/enterprise/account.rb @@ -5,8 +5,10 @@ module Enterprise::Account # Auto-sync advanced_assignment with assignment_v2 when features are bulk-updated via admin UI def selected_feature_flags=(features) + was_assignment_v2 = feature_enabled?('assignment_v2') super sync_assignment_features + @assignment_v2_just_enabled = !was_assignment_v2 && feature_enabled?('assignment_v2') end def mark_for_deletion(reason = 'manual_deletion') diff --git a/enterprise/app/models/enterprise/concerns/account.rb b/enterprise/app/models/enterprise/concerns/account.rb index 76012fc14..cc82dc70d 100644 --- a/enterprise/app/models/enterprise/concerns/account.rb +++ b/enterprise/app/models/enterprise/concerns/account.rb @@ -26,7 +26,7 @@ module Enterprise::Concerns::Account private def assignment_v2_just_enabled? - saved_change_to_feature_flags? && feature_enabled?('assignment_v2') + !!@assignment_v2_just_enabled end def migrate_assignment_policies diff --git a/spec/enterprise/models/account_spec.rb b/spec/enterprise/models/account_spec.rb index 273e4ad45..a2bd9497f 100644 --- a/spec/enterprise/models/account_spec.rb +++ b/spec/enterprise/models/account_spec.rb @@ -225,31 +225,33 @@ RSpec.describe Account, type: :model do describe 'after_commit :migrate_assignment_policies' do let(:account) { create(:account) } - context 'when assignment_v2 is enabled' do + context 'when assignment_v2 is toggled on via admin UI' do it 'enqueues Migration::AccountAssignmentPolicyJob after commit' do + enabled_flags = account.enabled_features.keys.map { |f| "feature_#{f}".to_sym } + [:feature_assignment_v2] + expect do - account.enable_features!('assignment_v2') + account.update!(selected_feature_flags: enabled_flags) end.to have_enqueued_job(Migration::AccountAssignmentPolicyJob).with(account) end end - context 'when assignment_v2 is disabled' do - it 'does not enqueue the job' do - account.enable_features!('assignment_v2') - - expect do - account.disable_features!('assignment_v2') - end.not_to have_enqueued_job(Migration::AccountAssignmentPolicyJob) - end - end - - context 'when feature_flags column does not change' do + context 'when assignment_v2 is already enabled and another flag changes' do it 'does not enqueue the job' do account.enable_features!('assignment_v2') clear_enqueued_jobs + enabled_flags = account.enabled_features.keys.map { |f| "feature_#{f}".to_sym } + expect do - account.update!(name: 'Updated Name') + account.update!(selected_feature_flags: enabled_flags) + end.not_to have_enqueued_job(Migration::AccountAssignmentPolicyJob) + end + end + + context 'when assignment_v2 is enabled via enable_features!' do + it 'does not enqueue the job' do + expect do + account.enable_features!('assignment_v2') end.not_to have_enqueued_job(Migration::AccountAssignmentPolicyJob) end end