diff --git a/ee/app/models/ee/group.rb b/ee/app/models/ee/group.rb index 40111acb180e0221a03efef5513997fd1bfa3524..81d4b5995ce02c3a9ca606d385fa7f5830b45170 100644 --- a/ee/app/models/ee/group.rb +++ b/ee/app/models/ee/group.rb @@ -397,7 +397,11 @@ def billable_members_count_with_reactive_cache def billable_members_count(requested_hosted_plan = nil) billable_ids = billed_user_ids(requested_hosted_plan) - billable_ids[:user_ids].count + if ::Namespaces::FreeUserCap.enforce_preview_or_standard?(self) + billable_ids[:user_ids].merge(awaiting_user_ids).count + else + billable_ids[:user_ids].count + end end override :free_plan_members_count diff --git a/ee/app/models/gitlab_subscription.rb b/ee/app/models/gitlab_subscription.rb index 7cec39d9390168f95dad64707ce2d8bd616ddece..ac4fe746e514d7cdc677cc6d433b8bd69d4481da 100644 --- a/ee/app/models/gitlab_subscription.rb +++ b/ee/app/models/gitlab_subscription.rb @@ -61,7 +61,7 @@ def legacy? end def calculate_seats_in_use - namespace.billable_members_count + namespace.billed_user_ids[:user_ids].count end # The purpose of max_seats_used is similar to what we do for EE licenses diff --git a/ee/spec/models/ee/group_spec.rb b/ee/spec/models/ee/group_spec.rb index 6e101e3df2dbe2ab6278c570f45fbc43ce83185d..6c9041324ff700d2ca5d89d2ca1caf1045fcffe4 100644 --- a/ee/spec/models/ee/group_spec.rb +++ b/ee/spec/models/ee/group_spec.rb @@ -1495,6 +1495,28 @@ end end end + + context 'for free group' do + before do + allow(::Namespaces::FreeUserCap).to receive(:enforce_preview_or_standard?).with(group).and_return(free_user_cap_enabled) + end + + context 'when free_user_cap is enabled' do + let(:free_user_cap_enabled) { true } + + it 'includes awaiting members' do + expect(group.billable_members_count).to eq(3) + end + end + + context 'when free_user_cap is disabled' do + let(:free_user_cap_enabled) { false } + + it 'does not include awaiting members' do + expect(group.billable_members_count).to eq(2) + end + end + end end describe '#exclude_guests?', :saas do diff --git a/ee/spec/models/gitlab_subscription_spec.rb b/ee/spec/models/gitlab_subscription_spec.rb index 7b77e9029fe8f0a87b7c7b1cbf55ab787f5f5e2f..32f61a4c96245c77feb852b29c891b091e80c00d 100644 --- a/ee/spec/models/gitlab_subscription_spec.rb +++ b/ee/spec/models/gitlab_subscription_spec.rb @@ -88,6 +88,22 @@ expect(gitlab_subscription.calculate_seats_in_use).to eq(1) end + context 'with free_user_cap' do + before do + group.add_developer(user_1) + group.add_developer(user_2) + create(:group_member, :awaiting, source: group) + + gitlab_subscription.update!(plan_code: 'free') + stub_ee_application_setting(should_check_namespace_plan: true) + end + + it 'does not count awaiting members' do + expect(group.member_count).to eq(3) + expect(gitlab_subscription.calculate_seats_in_use).to eq(2) + end + end + context 'with guest members' do before do group.add_guest(user_1)