diff --git a/enterprise/app/models/enterprise/account.rb b/enterprise/app/models/enterprise/account.rb index eda28712f..6adc7cc48 100644 --- a/enterprise/app/models/enterprise/account.rb +++ b/enterprise/app/models/enterprise/account.rb @@ -1,7 +1,7 @@ module Enterprise::Account - # Transitional marker for the Captain V1 to V2 rollout. New cloud accounts get - # this marker so plan reconciliation can enable V2 for them without upgrading - # existing paid accounts. Remove once every account is migrated to V2. + # Transitional marker for the Captain V1 to V2 rollout. Set this to false only + # for accounts that must remain on V1 during paid plan reconciliation. + # Remove once every account is migrated to V2. CAPTAIN_V2_DEFAULT_ELIGIBLE = 'captain_v2_default_eligible'.freeze class << self diff --git a/enterprise/app/services/enterprise/billing/reconcile_plan_features_service.rb b/enterprise/app/services/enterprise/billing/reconcile_plan_features_service.rb index 435b1f3d1..119fa3ea0 100644 --- a/enterprise/app/services/enterprise/billing/reconcile_plan_features_service.rb +++ b/enterprise/app/services/enterprise/billing/reconcile_plan_features_service.rb @@ -37,7 +37,7 @@ class Enterprise::Billing::ReconcilePlanFeaturesService def perform account.disable_features(*PREMIUM_PLAN_FEATURES) - account.disable_features('captain_integration_v2') if default_plan? + account.disable_features('captain_integration_v2') account.enable_features(*current_plan_features) account.enable_features('captain_integration_v2') if captain_v2_default_eligible? account.enable_features(*manually_managed_features) @@ -74,6 +74,6 @@ class Enterprise::Billing::ReconcilePlanFeaturesService end def captain_v2_default_eligible? - !default_plan? && account.internal_attributes[Enterprise::Account::CAPTAIN_V2_DEFAULT_ELIGIBLE] == true + !default_plan? && account.internal_attributes[Enterprise::Account::CAPTAIN_V2_DEFAULT_ELIGIBLE] != false end end diff --git a/spec/enterprise/services/enterprise/billing/handle_stripe_event_service_spec.rb b/spec/enterprise/services/enterprise/billing/handle_stripe_event_service_spec.rb index 5116e1ec3..080bd184c 100644 --- a/spec/enterprise/services/enterprise/billing/handle_stripe_event_service_spec.rb +++ b/spec/enterprise/services/enterprise/billing/handle_stripe_event_service_spec.rb @@ -221,13 +221,13 @@ describe Enterprise::Billing::HandleStripeEventService do end end - it 'does not enable Captain V2 for existing paid accounts during reconciliation' do + it 'enables Captain V2 for existing paid accounts during reconciliation' do allow(subscription).to receive(:[]).with('plan') .and_return({ 'id' => 'test', 'product' => 'plan_id_startups', 'name' => 'Startups' }) stripe_event_service.new.perform(event: event) - expect(account.reload).not_to be_feature_enabled('captain_integration_v2') + expect(account.reload).to be_feature_enabled('captain_integration_v2') end it 'enables Captain V2 for new cloud accounts marked as default eligible' do @@ -243,6 +243,21 @@ describe Enterprise::Billing::HandleStripeEventService do expect(account.reload).to be_feature_enabled('captain_integration_v2') end + + it 'disables Captain V2 for accounts explicitly held on V1' do + account.enable_features!('captain_integration_v2') + account.update!( + internal_attributes: account.internal_attributes.merge( + Enterprise::Account::CAPTAIN_V2_DEFAULT_ELIGIBLE => false + ) + ) + allow(subscription).to receive(:[]).with('plan') + .and_return({ 'id' => 'test', 'product' => 'plan_id_startups', 'name' => 'Startups' }) + + stripe_event_service.new.perform(event: event) + + expect(account.reload).not_to be_feature_enabled('captain_integration_v2') + end end context 'with Business plan' do