diff --git a/ee/app/models/gitlab_subscriptions/add_on_purchase.rb b/ee/app/models/gitlab_subscriptions/add_on_purchase.rb index eefaa03323359c71e08bcb593b18611292331b14..dd7e4d44c2c78982e1f0068af7365ea725b8fc1c 100644 --- a/ee/app/models/gitlab_subscriptions/add_on_purchase.rb +++ b/ee/app/models/gitlab_subscriptions/add_on_purchase.rb @@ -105,6 +105,18 @@ class AddOnPurchase < ApplicationRecord .limit(limit) end + # Placeholder scope for Self-hosted DAP SKU + # Returns all active self-managed add-ons when feature flag is enabled + # TODO: Filter by actual Self-hosted DAP add-on when provisioned by Fulfillment + # Tracked in: https://gitlab.com/gitlab-org/gitlab/-/issues/582054 + scope :for_self_hosted_dap, -> { + if Feature.enabled?(:self_hosted_dap_sku, :instance) + for_self_managed.active + else + none + end + } + delegate :name, :seat_assignable?, to: :add_on, prefix: true # Finds all active add-on purchases that grant the given Unit Primitive ("entitlement") diff --git a/ee/config/feature_flags/development/self_hosted_dap_sku.yml b/ee/config/feature_flags/development/self_hosted_dap_sku.yml new file mode 100644 index 0000000000000000000000000000000000000000..62d8e818d1a1b83cd9a2726190ad24e84f2e3d87 --- /dev/null +++ b/ee/config/feature_flags/development/self_hosted_dap_sku.yml @@ -0,0 +1,9 @@ +--- +name: self_hosted_dap_sku +feature_issue_url: https://gitlab.com/groups/gitlab-org/-/epics/20079 +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/214790 +rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/work_items/582204 +milestone: '18.7' +group: group::custom models +type: development +default_enabled: false diff --git a/ee/spec/models/gitlab_subscriptions/add_on_purchase_spec.rb b/ee/spec/models/gitlab_subscriptions/add_on_purchase_spec.rb index 6e777deadf0668b04a330903db977609813210d1..065839375ea14c84e220401db20bb19646b5c3c6 100644 --- a/ee/spec/models/gitlab_subscriptions/add_on_purchase_spec.rb +++ b/ee/spec/models/gitlab_subscriptions/add_on_purchase_spec.rb @@ -777,6 +777,34 @@ expect(described_class.find_by_namespace_and_add_on(namespace, add_on_1)).to eq add_on_purchase_2 end end + + describe '.for_self_hosted_dap' do + subject(:scope) { described_class.for_self_hosted_dap } + + context 'when self_hosted_dap_sku feature flag is disabled' do + before do + stub_feature_flags(self_hosted_dap_sku: false) + end + + it 'returns none' do + expect(scope).to be_empty + end + end + + context 'when self_hosted_dap_sku feature flag is enabled' do + before do + stub_feature_flags(self_hosted_dap_sku: true) + end + + it 'returns active self-managed add-ons' do + active_sm_addon = create(:gitlab_subscription_add_on_purchase, :duo_enterprise, :active, :self_managed) + create(:gitlab_subscription_add_on_purchase, :duo_pro, :expired, :self_managed) + create(:gitlab_subscription_add_on_purchase, :duo_core, :active) # SaaS + + expect(scope).to contain_exactly(active_sm_addon) + end + end + end end describe 'delegations' do