Commit f7af9f81 authored by Etienne Baqué's avatar Etienne Baqué

Added/Replaced plan constants with new ones

Added/Replaced plan constants with new ones
parent fa0da1ee
...@@ -85,7 +85,7 @@ module BillingPlansHelper ...@@ -85,7 +85,7 @@ module BillingPlansHelper
end end
def show_plans?(namespace) def show_plans?(namespace)
namespace.trial_active? || !namespace.gold_plan? namespace.trial_active? || !(namespace.gold_plan? || namespace.ultimate_plan?)
end end
def show_trial_banner?(namespace) def show_trial_banner?(namespace)
......
...@@ -290,21 +290,21 @@ module EE ...@@ -290,21 +290,21 @@ module EE
end end
# For now, we are not billing for members with a Guest role for subscriptions # 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. # for billing purposes.
# #
# We are plucking the user_ids from the "Members" table in an array and # 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. # converting the array of user_ids to a Set which will have unique user_ids.
def billed_user_ids(requested_hosted_plan = nil) def billed_user_ids(requested_hosted_plan = nil)
if [actual_plan_name, requested_hosted_plan].include?(::Plan::GOLD) if ([actual_plan_name, requested_hosted_plan] & [::Plan::GOLD, ::Plan::ULTIMATE]).any?
strong_memoize(:gold_billed_user_ids) do strong_memoize(:billed_user_ids) do
(billed_group_members.non_guests.distinct.pluck(:user_id) + (billed_group_members.non_guests.distinct.pluck(:user_id) +
billed_project_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_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 billed_invited_non_guests_group_to_project_members.non_guests.distinct.pluck(:user_id)).to_set
end end
else else
strong_memoize(:non_gold_billed_user_ids) do strong_memoize(:non_billed_user_ids) do
(billed_group_members.distinct.pluck(:user_id) + (billed_group_members.distinct.pluck(:user_id) +
billed_project_members.distinct.pluck(:user_id) + billed_project_members.distinct.pluck(:user_id) +
billed_shared_group_members.distinct.pluck(:user_id) + billed_shared_group_members.distinct.pluck(:user_id) +
......
...@@ -11,13 +11,13 @@ module EE ...@@ -11,13 +11,13 @@ module EE
include ::Gitlab::Utils::StrongMemoize include ::Gitlab::Utils::StrongMemoize
NAMESPACE_PLANS_TO_LICENSE_PLANS = { NAMESPACE_PLANS_TO_LICENSE_PLANS = {
::Plan::BRONZE => License::STARTER_PLAN, ::Plan::BRONZE => License::STARTER_PLAN,
::Plan::SILVER => License::PREMIUM_PLAN, [::Plan::SILVER, ::Plan::PREMIUM] => License::PREMIUM_PLAN,
::Plan::GOLD => License::ULTIMATE_PLAN [::Plan::GOLD, ::Plan::ULTIMATE] => License::ULTIMATE_PLAN
}.freeze }.freeze
LICENSE_PLANS_TO_NAMESPACE_PLANS = NAMESPACE_PLANS_TO_LICENSE_PLANS.invert.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 TEMPORARY_STORAGE_INCREASE_DAYS = 30
prepended do prepended do
...@@ -110,7 +110,7 @@ module EE ...@@ -110,7 +110,7 @@ module EE
extend ::Gitlab::Utils::Override extend ::Gitlab::Utils::Override
def plans_with_feature(feature) 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
end end
...@@ -336,10 +336,18 @@ module EE ...@@ -336,10 +336,18 @@ module EE
actual_plan_name == ::Plan::SILVER actual_plan_name == ::Plan::SILVER
end end
def premium_plan?
actual_plan_name == ::Plan::PREMIUM
end
def gold_plan? def gold_plan?
actual_plan_name == ::Plan::GOLD actual_plan_name == ::Plan::GOLD
end end
def ultimate_plan?
actual_plan_name == ::Plan::ULTIMATE
end
def plan_eligible_for_trial? def plan_eligible_for_trial?
::Plan::PLANS_ELIGIBLE_FOR_TRIAL.include?(actual_plan_name) ::Plan::PLANS_ELIGIBLE_FOR_TRIAL.include?(actual_plan_name)
end end
......
...@@ -9,10 +9,12 @@ module EE ...@@ -9,10 +9,12 @@ module EE
FREE = 'free'.freeze FREE = 'free'.freeze
BRONZE = 'bronze'.freeze BRONZE = 'bronze'.freeze
SILVER = 'silver'.freeze SILVER = 'silver'.freeze
PREMIUM = 'premium'.freeze
GOLD = 'gold'.freeze GOLD = 'gold'.freeze
ULTIMATE = 'ultimate'.freeze
EE_DEFAULT_PLANS = (const_get(:DEFAULT_PLANS, false) + [FREE]).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 EE_ALL_PLANS = (EE_DEFAULT_PLANS + PAID_HOSTED_PLANS).freeze
PLANS_ELIGIBLE_FOR_TRIAL = EE_DEFAULT_PLANS PLANS_ELIGIBLE_FOR_TRIAL = EE_DEFAULT_PLANS
......
...@@ -357,8 +357,8 @@ module EE ...@@ -357,8 +357,8 @@ module EE
end end
def owns_upgradeable_namespace? def owns_upgradeable_namespace?
!owns_paid_namespace?(plans: [::Plan::GOLD]) && !owns_paid_namespace?(plans: [::Plan::GOLD, ::Plan::ULTIMATE]) &&
owns_paid_namespace?(plans: [::Plan::BRONZE, ::Plan::SILVER]) owns_paid_namespace?(plans: [::Plan::BRONZE, ::Plan::SILVER, ::Plan::PREMIUM])
end end
# Returns the groups a user has access to, either through a membership or a project authorization # Returns the groups a user has access to, either through a membership or a project authorization
......
...@@ -86,6 +86,8 @@ class GitlabSubscription < ApplicationRecord ...@@ -86,6 +86,8 @@ class GitlabSubscription < ApplicationRecord
end end
def upgradable? def upgradable?
return false if [::Plan::GOLD, ::Plan::ULTIMATE].include?(plan_name)
has_a_paid_hosted_plan? && has_a_paid_hosted_plan? &&
!expired? && !expired? &&
plan_name != Plan::PAID_HOSTED_PLANS[-1] plan_name != Plan::PAID_HOSTED_PLANS[-1]
......
...@@ -42,8 +42,16 @@ FactoryBot.define do ...@@ -42,8 +42,16 @@ FactoryBot.define do
association :hosted_plan, factory: :silver_plan association :hosted_plan, factory: :silver_plan
end end
trait :premium do
association :hosted_plan, factory: :premium_plan
end
trait :gold do trait :gold do
association :hosted_plan, factory: :gold_plan association :hosted_plan, factory: :gold_plan
end end
trait :ultimate do
association :hosted_plan, factory: :ultimate_plan
end
end end
end end
...@@ -377,13 +377,15 @@ RSpec.describe EE::UserCalloutsHelper do ...@@ -377,13 +377,15 @@ RSpec.describe EE::UserCalloutsHelper do
shared_examples 'shows and hides the banner depending on circumstances' 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 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 - 1.day | true
true | ::Plan::BRONZE | false | eoa_bronze_plan_end_date | false 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 | false | eoa_bronze_plan_end_date + 1.day | false
true | ::Plan::BRONZE | true | 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::SILVER | false | eoa_bronze_plan_end_date - 1.day | false
true | ::Plan::GOLD | false | eoa_bronze_plan_end_date - 1.day | false true | ::Plan::PREMIUM | false | eoa_bronze_plan_end_date - 1.day | false
false | ::Plan::BRONZE | 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 end
with_them do with_them do
......
...@@ -207,11 +207,13 @@ RSpec.describe Namespace do ...@@ -207,11 +207,13 @@ RSpec.describe Namespace do
subject { described_class.in_default_plan.ids } subject { described_class.in_default_plan.ids }
where(:plan_name, :expect_in_default_plan) do where(:plan_name, :expect_in_default_plan) do
::Plan::FREE | true ::Plan::FREE | true
::Plan::DEFAULT | true ::Plan::DEFAULT | true
::Plan::BRONZE | false ::Plan::BRONZE | false
::Plan::SILVER | false ::Plan::SILVER | false
::Plan::GOLD | false ::Plan::PREMIUM | false
::Plan::GOLD | false
::Plan::ULTIMATE | false
end end
with_them do with_them do
...@@ -274,12 +276,23 @@ RSpec.describe Namespace do ...@@ -274,12 +276,23 @@ RSpec.describe Namespace do
end end
context 'in active trial gold plan' do context 'in active trial gold plan' do
before do using RSpec::Parameterized::TableSyntax
create :gitlab_subscription, ::Plan::GOLD, :active_trial, namespace: namespace
create :gitlab_subscription, ::Plan::GOLD, :active_trial, namespace: sub_namespace where(:plan_name) do
[
[::Plan::GOLD],
[::Plan::ULTIMATE]
]
end 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 end
context 'with a paid plan and not in trial' do 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