Commit 56cad1f7 authored by Alper Akgun's avatar Alper Akgun

Hide banners for namespaces with expired trials

When a trial expires for a namespace, we won't show a new trial
again. This is valid for the user dashboard and user and group billing
pages
parent 0649b71b
---
title: Hide trial banner for namespaces with expired trials
merge_request: 19510
author:
type: changed
...@@ -50,13 +50,15 @@ module EE ...@@ -50,13 +50,15 @@ module EE
def render_dashboard_gold_trial(user) def render_dashboard_gold_trial(user)
return unless show_gold_trial?(user, GOLD_TRIAL) && return unless show_gold_trial?(user, GOLD_TRIAL) &&
user_default_dashboard?(user) && user_default_dashboard?(user) &&
has_no_trial_or_gold_plan?(user) has_no_trial_or_gold_plan?(user) &&
has_some_namespaces_with_no_trials?(user)
render 'shared/gold_trial_callout_content' render 'shared/gold_trial_callout_content'
end end
def render_billings_gold_trial(user, namespace) def render_billings_gold_trial(user, namespace)
return if namespace.gold_plan? return if namespace.gold_plan?
return unless namespace.never_had_trial?
return unless show_gold_trial?(user, GOLD_TRIAL_BILLINGS) return unless show_gold_trial?(user, GOLD_TRIAL_BILLINGS)
render 'shared/gold_trial_callout_content', is_dismissable: !namespace.free_plan?, callout: GOLD_TRIAL_BILLINGS render 'shared/gold_trial_callout_content', is_dismissable: !namespace.free_plan?, callout: GOLD_TRIAL_BILLINGS
...@@ -107,5 +109,9 @@ module EE ...@@ -107,5 +109,9 @@ module EE
!user.any_namespace_with_trial? !user.any_namespace_with_trial?
end end
def has_some_namespaces_with_no_trials?(user)
user&.any_namespace_without_trial?
end
end end
end end
...@@ -259,6 +259,10 @@ module EE ...@@ -259,6 +259,10 @@ module EE
trial? && trial_ends_on.present? && trial_ends_on >= Date.today trial? && trial_ends_on.present? && trial_ends_on >= Date.today
end end
def never_had_trial?
trial_ends_on.nil?
end
def trial_expired? def trial_expired?
trial_ends_on.present? && trial_ends_on.present? &&
trial_ends_on < Date.today && trial_ends_on < Date.today &&
......
...@@ -235,6 +235,13 @@ module EE ...@@ -235,6 +235,13 @@ module EE
.any? .any?
end end
def any_namespace_without_trial?
::Namespace
.from("(#{namespace_union(:trial_ends_on)}) #{::Namespace.table_name}")
.where(trial_ends_on: nil)
.any?
end
def any_namespace_with_gold? def any_namespace_with_gold?
::Namespace ::Namespace
.includes(:plan) .includes(:plan)
......
...@@ -177,21 +177,30 @@ describe EE::UserCalloutsHelper do ...@@ -177,21 +177,30 @@ describe EE::UserCalloutsHelper do
set(:gold_plan) { create(:gold_plan) } set(:gold_plan) { create(:gold_plan) }
let(:user) { namespace.owner } let(:user) { namespace.owner }
where(:show_gold_trial?, :user_default_dashboard?, :has_no_trial_or_gold_plan?, :should_render?) do where(:has_some_namespaces_with_no_trials?, :show_gold_trial?, :user_default_dashboard?, :has_no_trial_or_gold_plan?, :should_render?) do
true | true | true | true true | true | true | true | true
true | true | false | false true | true | true | false | false
true | false | true | false true | true | false | true | false
false | true | true | false true | false | true | true | false
true | false | false | false true | true | false | false | false
false | false | true | false true | false | false | true | false
false | true | false | false true | false | true | false | false
false | false | false | false true | false | false | false | false
false | true | true | true | false
false | true | true | false | false
false | true | false | true | false
false | false | true | true | false
false | true | false | false | false
false | false | false | true | false
false | false | true | false | false
false | false | false | false | false
end end
with_them do with_them do
before do before do
allow(helper).to receive(:show_gold_trial?) { show_gold_trial? } allow(helper).to receive(:show_gold_trial?) { show_gold_trial? }
allow(helper).to receive(:user_default_dashboard?) { user_default_dashboard? } allow(helper).to receive(:user_default_dashboard?) { user_default_dashboard? }
allow(helper).to receive(:has_some_namespaces_with_no_trials?) { has_some_namespaces_with_no_trials? }
namespace.update(plan: gold_plan) unless has_no_trial_or_gold_plan? namespace.update(plan: gold_plan) unless has_no_trial_or_gold_plan?
end end
...@@ -211,19 +220,29 @@ describe EE::UserCalloutsHelper do ...@@ -211,19 +220,29 @@ describe EE::UserCalloutsHelper do
using RSpec::Parameterized::TableSyntax using RSpec::Parameterized::TableSyntax
set(:namespace) { create(:namespace) } set(:namespace) { create(:namespace) }
set(:free_plan) { create(:free_plan) }
set(:silver_plan) { create(:silver_plan) } set(:silver_plan) { create(:silver_plan) }
set(:gold_plan) { create(:gold_plan) } set(:gold_plan) { create(:gold_plan) }
let(:user) { namespace.owner } let(:user) { namespace.owner }
let(:gitlab_subscription) { create(:gitlab_subscription, namespace: namespace) }
where(:show_gold_trial?, :gold_plan?, :free_plan?, :should_render?) do
true | false | false | true where(:never_had_trial?, :show_gold_trial?, :gold_plan?, :free_plan?, :should_render?) do
true | false | true | true true | true | false | false | true
true | true | true | false true | true | false | true | true
true | true | false | false true | true | true | true | false
false | true | true | false true | true | true | false | false
false | false | true | false true | false | true | true | false
false | true | false | false true | false | false | true | false
false | false | false | false true | false | true | false | false
true | false | false | false | false
false | true | false | false | false
false | true | false | true | false
false | true | true | true | false
false | true | true | false | false
false | false | true | true | false
false | false | false | true | false
false | false | true | false | false
false | false | false | false | false
end end
with_them do with_them do
...@@ -231,6 +250,11 @@ describe EE::UserCalloutsHelper do ...@@ -231,6 +250,11 @@ describe EE::UserCalloutsHelper do
allow(helper).to receive(:show_gold_trial?) { show_gold_trial? } allow(helper).to receive(:show_gold_trial?) { show_gold_trial? }
namespace.update(plan: gold_plan) if gold_plan? namespace.update(plan: gold_plan) if gold_plan?
namespace.update(plan: silver_plan) if !gold_plan? && !free_plan? namespace.update(plan: silver_plan) if !gold_plan? && !free_plan?
unless never_had_trial?
namespace.update(plan: free_plan)
namespace.create_gitlab_subscription(trial_ends_on: Date.yesterday)
end
end end
it do it 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