Commit 07551703 authored by Dylan Griffith's avatar Dylan Griffith

Merge branch '321364-implement-new-plan-constants' into 'master'

Use new plan constants in Plan/Namespace logic

See merge request gitlab-org/gitlab!54191
parents 61a32e5e f7af9f81
......@@ -85,7 +85,7 @@ module BillingPlansHelper
end
def show_plans?(namespace)
namespace.trial_active? || !namespace.gold_plan?
namespace.trial_active? || !(namespace.gold_plan? || namespace.ultimate_plan?)
end
def show_trial_banner?(namespace)
......
......@@ -290,21 +290,21 @@ module EE
end
# For now, we are not billing for members with a Guest role for subscriptions
# with a Gold plan. The other plans will treat Guest members as a regular member
# with a Gold/Ultimate plan. The other plans will treat Guest members as a regular member
# for billing purposes.
#
# We are plucking the user_ids from the "Members" table in an array and
# converting the array of user_ids to a Set which will have unique user_ids.
def billed_user_ids(requested_hosted_plan = nil)
if [actual_plan_name, requested_hosted_plan].include?(::Plan::GOLD)
strong_memoize(:gold_billed_user_ids) do
if ([actual_plan_name, requested_hosted_plan] & [::Plan::GOLD, ::Plan::ULTIMATE]).any?
strong_memoize(:billed_user_ids) do
(billed_group_members.non_guests.distinct.pluck(:user_id) +
billed_project_members.non_guests.distinct.pluck(:user_id) +
billed_shared_non_guests_group_members.non_guests.distinct.pluck(:user_id) +
billed_invited_non_guests_group_to_project_members.non_guests.distinct.pluck(:user_id)).to_set
end
else
strong_memoize(:non_gold_billed_user_ids) do
strong_memoize(:non_billed_user_ids) do
(billed_group_members.distinct.pluck(:user_id) +
billed_project_members.distinct.pluck(:user_id) +
billed_shared_group_members.distinct.pluck(:user_id) +
......
......@@ -11,13 +11,13 @@ module EE
include ::Gitlab::Utils::StrongMemoize
NAMESPACE_PLANS_TO_LICENSE_PLANS = {
::Plan::BRONZE => License::STARTER_PLAN,
::Plan::SILVER => License::PREMIUM_PLAN,
::Plan::GOLD => License::ULTIMATE_PLAN
::Plan::BRONZE => License::STARTER_PLAN,
[::Plan::SILVER, ::Plan::PREMIUM] => License::PREMIUM_PLAN,
[::Plan::GOLD, ::Plan::ULTIMATE] => License::ULTIMATE_PLAN
}.freeze
LICENSE_PLANS_TO_NAMESPACE_PLANS = NAMESPACE_PLANS_TO_LICENSE_PLANS.invert.freeze
PLANS = (NAMESPACE_PLANS_TO_LICENSE_PLANS.keys + [Plan::FREE]).freeze
PLANS = (NAMESPACE_PLANS_TO_LICENSE_PLANS.keys + [Plan::FREE]).flatten.freeze
TEMPORARY_STORAGE_INCREASE_DAYS = 30
prepended do
......@@ -108,7 +108,7 @@ module EE
extend ::Gitlab::Utils::Override
def plans_with_feature(feature)
LICENSE_PLANS_TO_NAMESPACE_PLANS.values_at(*License.plans_with_feature(feature))
LICENSE_PLANS_TO_NAMESPACE_PLANS.values_at(*License.plans_with_feature(feature)).flatten
end
end
......@@ -334,10 +334,18 @@ module EE
actual_plan_name == ::Plan::SILVER
end
def premium_plan?
actual_plan_name == ::Plan::PREMIUM
end
def gold_plan?
actual_plan_name == ::Plan::GOLD
end
def ultimate_plan?
actual_plan_name == ::Plan::ULTIMATE
end
def plan_eligible_for_trial?
::Plan::PLANS_ELIGIBLE_FOR_TRIAL.include?(actual_plan_name)
end
......
......@@ -9,10 +9,12 @@ module EE
FREE = 'free'.freeze
BRONZE = 'bronze'.freeze
SILVER = 'silver'.freeze
PREMIUM = 'premium'.freeze
GOLD = 'gold'.freeze
ULTIMATE = 'ultimate'.freeze
EE_DEFAULT_PLANS = (const_get(:DEFAULT_PLANS, false) + [FREE]).freeze
PAID_HOSTED_PLANS = [BRONZE, SILVER, GOLD].freeze
PAID_HOSTED_PLANS = [BRONZE, SILVER, PREMIUM, GOLD, ULTIMATE].freeze
EE_ALL_PLANS = (EE_DEFAULT_PLANS + PAID_HOSTED_PLANS).freeze
PLANS_ELIGIBLE_FOR_TRIAL = EE_DEFAULT_PLANS
......
......@@ -357,8 +357,8 @@ module EE
end
def owns_upgradeable_namespace?
!owns_paid_namespace?(plans: [::Plan::GOLD]) &&
owns_paid_namespace?(plans: [::Plan::BRONZE, ::Plan::SILVER])
!owns_paid_namespace?(plans: [::Plan::GOLD, ::Plan::ULTIMATE]) &&
owns_paid_namespace?(plans: [::Plan::BRONZE, ::Plan::SILVER, ::Plan::PREMIUM])
end
# Returns the groups a user has access to, either through a membership or a project authorization
......
......@@ -86,6 +86,8 @@ class GitlabSubscription < ApplicationRecord
end
def upgradable?
return false if [::Plan::GOLD, ::Plan::ULTIMATE].include?(plan_name)
has_a_paid_hosted_plan? &&
!expired? &&
plan_name != Plan::PAID_HOSTED_PLANS[-1]
......
......@@ -42,8 +42,16 @@ FactoryBot.define do
association :hosted_plan, factory: :silver_plan
end
trait :premium do
association :hosted_plan, factory: :premium_plan
end
trait :gold do
association :hosted_plan, factory: :gold_plan
end
trait :ultimate do
association :hosted_plan, factory: :ultimate_plan
end
end
end
......@@ -326,13 +326,15 @@ RSpec.describe EE::UserCalloutsHelper do
shared_examples 'shows and hides the banner depending on circumstances' do
where(:show_billing_eoa_banner, :actual_plan_name, :dismissed_callout, :travel_to_date, :result) do
true | ::Plan::BRONZE | false | eoa_bronze_plan_end_date - 1.day | true
true | ::Plan::BRONZE | false | eoa_bronze_plan_end_date | false
true | ::Plan::BRONZE | false | eoa_bronze_plan_end_date + 1.day | false
true | ::Plan::BRONZE | true | eoa_bronze_plan_end_date - 1.day | false
true | ::Plan::SILVER | false | eoa_bronze_plan_end_date - 1.day | false
true | ::Plan::GOLD | false | eoa_bronze_plan_end_date - 1.day | false
false | ::Plan::BRONZE | false | eoa_bronze_plan_end_date - 1.day | false
true | ::Plan::BRONZE | false | eoa_bronze_plan_end_date - 1.day | true
true | ::Plan::BRONZE | false | eoa_bronze_plan_end_date | false
true | ::Plan::BRONZE | false | eoa_bronze_plan_end_date + 1.day | false
true | ::Plan::BRONZE | true | eoa_bronze_plan_end_date - 1.day | false
true | ::Plan::SILVER | false | eoa_bronze_plan_end_date - 1.day | false
true | ::Plan::PREMIUM | false | eoa_bronze_plan_end_date - 1.day | false
true | ::Plan::GOLD | false | eoa_bronze_plan_end_date - 1.day | false
true | ::Plan::ULTIMATE | false | eoa_bronze_plan_end_date - 1.day | false
false | ::Plan::BRONZE | false | eoa_bronze_plan_end_date - 1.day | false
end
with_them do
......
......@@ -196,11 +196,13 @@ RSpec.describe Namespace do
subject { described_class.in_default_plan.ids }
where(:plan_name, :expect_in_default_plan) do
::Plan::FREE | true
::Plan::DEFAULT | true
::Plan::BRONZE | false
::Plan::SILVER | false
::Plan::GOLD | false
::Plan::FREE | true
::Plan::DEFAULT | true
::Plan::BRONZE | false
::Plan::SILVER | false
::Plan::PREMIUM | false
::Plan::GOLD | false
::Plan::ULTIMATE | false
end
with_them do
......@@ -263,12 +265,23 @@ RSpec.describe Namespace do
end
context 'in active trial gold plan' do
before do
create :gitlab_subscription, ::Plan::GOLD, :active_trial, namespace: namespace
create :gitlab_subscription, ::Plan::GOLD, :active_trial, namespace: sub_namespace
using RSpec::Parameterized::TableSyntax
where(:plan_name) do
[
[::Plan::GOLD],
[::Plan::ULTIMATE]
]
end
it { is_expected.to eq([namespace.id]) }
with_them do
before do
create :gitlab_subscription, plan_name, :active_trial, namespace: namespace
create :gitlab_subscription, plan_name, :active_trial, namespace: sub_namespace
end
it { is_expected.to eq([namespace.id]) }
end
end
context 'with a paid plan and not in trial' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment