Commit eb431e71 authored by Dallas Reedy's avatar Dallas Reedy

Fetch Ultimate plan ID from CustomersDot for trial prompts

- `TrialStatusWidgetHelper#ultimate_plan_id`
- `PaidFeatureCalloutHelper#premium_plan_id`
- Use the `GitlabSubscription::FetchSubscriptionPlansService` for each
  of those cases

Note: The `PaidFeatureCalloutHelper` is part of an experiment which is
currently unreachable
(https://gitlab.com/gitlab-org/gitlab/-/issues/273627#note_674150108)
but is yet to be cleaned up. It is likely that the code for it will be
entirely removed. If not, there is already an issue in place to extract
the commonalities between these two helpers
(https://gitlab.com/gitlab-org/gitlab/-/issues/340441), including
reusing the `FetchSubscriptionPlansService` data:
https://gitlab.com/gitlab-org/gitlab/-/blob/8938a54040c52454f58562626bf38584462f75c0/ee/app/helpers/trial_upgrade_prompts_helper.rb#L35
parent d3d80a33
...@@ -48,14 +48,16 @@ module PaidFeatureCalloutHelper ...@@ -48,14 +48,16 @@ module PaidFeatureCalloutHelper
end end
def premium_subscription_path_for_group(group) def premium_subscription_path_for_group(group)
# NOTE: We are okay hard-coding the production value for the Premium 1-year new_subscriptions_path(namespace_id: group.id, plan_id: premium_plan_id)
# SaaS plan ID while this is all part of an active experiment. If & when the end
# experiment is deemed a success, part of the clean-up effort will be to
# pull the value directly from the CustomersDot API. Value taken from def premium_plan_id
# https://gitlab.com/gitlab-org/customers-gitlab-com/blob/7177f13c478ef623b779d6635c4a58ee650b7884/config/application.yml#L186 strong_memoize(:premium_plan_id) do
# Cleanup issue: https://gitlab.com/gitlab-org/gitlab/-/issues/330987 plans = GitlabSubscriptions::FetchSubscriptionPlansService.new(plan: :free).execute
zuora_premium_plan_id = '2c92a00d76f0d5060176f2fb0a5029ff'
next unless plans
new_subscriptions_path(namespace_id: group.id, plan_id: zuora_premium_plan_id)
plans.find { |data| data['code'] == 'premium' }&.fetch('id', nil)
end
end end
end end
...@@ -11,13 +11,6 @@ module TrialStatusWidgetHelper ...@@ -11,13 +11,6 @@ module TrialStatusWidgetHelper
D14_CALLOUT_ID = 'trial_status_reminder_d14' D14_CALLOUT_ID = 'trial_status_reminder_d14'
D3_CALLOUT_ID = 'trial_status_reminder_d3' D3_CALLOUT_ID = 'trial_status_reminder_d3'
# NOTE: We are okay hard-coding the production value for the Ulitmate 1-year
# SaaS plan ID while this is all part of an active experiment. If & when the
# experiment is deemed a success, part of the clean-up effort will be to
# pull the value directly from the CustomersDot API. Value taken from
# https://gitlab.com/gitlab-org/customers-gitlab-com/blob/7177f13c478ef623b779d6635c4a58ee650b7884/config/application.yml#L207
ZUORA_ULTIMATE_PLAN_ID = '2c92a0ff76f0d5250176f2f8c86f305a'
def trial_status_popover_data_attrs(group) def trial_status_popover_data_attrs(group)
base_attrs = trial_status_common_data_attrs(group) base_attrs = trial_status_common_data_attrs(group)
base_attrs.merge( base_attrs.merge(
...@@ -83,6 +76,16 @@ module TrialStatusWidgetHelper ...@@ -83,6 +76,16 @@ module TrialStatusWidgetHelper
end end
def ultimate_subscription_path_for_group(group) def ultimate_subscription_path_for_group(group)
new_subscriptions_path(namespace_id: group.id, plan_id: ZUORA_ULTIMATE_PLAN_ID) new_subscriptions_path(namespace_id: group.id, plan_id: ultimate_plan_id)
end
def ultimate_plan_id
strong_memoize(:ultimate_plan_id) do
plans = GitlabSubscriptions::FetchSubscriptionPlansService.new(plan: :free).execute
next unless plans
plans.find { |data| data['code'] == 'ultimate' }&.fetch('id', nil)
end
end end
end end
...@@ -91,6 +91,14 @@ RSpec.describe PaidFeatureCalloutHelper do ...@@ -91,6 +91,14 @@ RSpec.describe PaidFeatureCalloutHelper do
let(:subscription) { instance_double(GitlabSubscription, plan_title: 'Ultimate') } let(:subscription) { instance_double(GitlabSubscription, plan_title: 'Ultimate') }
let(:group) { instance_double(Group, id: 123, to_param: 'test-group', trial_days_remaining: 12, gitlab_subscription: subscription) } let(:group) { instance_double(Group, id: 123, to_param: 'test-group', trial_days_remaining: 12, gitlab_subscription: subscription) }
before do
allow_next_instance_of(GitlabSubscriptions::FetchSubscriptionPlansService, plan: :free) do |instance|
allow(instance).to receive(:execute).and_return([
{ 'code' => 'premium', 'id' => 'premium-plan-id' }
])
end
end
subject { helper.paid_feature_popover_data_attrs(group: group, feature_name: 'first feature') } subject { helper.paid_feature_popover_data_attrs(group: group, feature_name: 'first feature') }
it 'returns the set of data attributes needed to bootstrap the PaidFeatureCalloutPopover component' do it 'returns the set of data attributes needed to bootstrap the PaidFeatureCalloutPopover component' do
...@@ -99,7 +107,7 @@ RSpec.describe PaidFeatureCalloutHelper do ...@@ -99,7 +107,7 @@ RSpec.describe PaidFeatureCalloutHelper do
days_remaining: 12, days_remaining: 12,
feature_name: 'first feature', feature_name: 'first feature',
href_compare_plans: '/groups/test-group/-/billings', href_compare_plans: '/groups/test-group/-/billings',
href_upgrade_to_paid: '/-/subscriptions/new?namespace_id=123&plan_id=2c92a00d76f0d5060176f2fb0a5029ff', href_upgrade_to_paid: '/-/subscriptions/new?namespace_id=123&plan_id=premium-plan-id',
plan_name_for_trial: 'Ultimate', plan_name_for_trial: 'Ultimate',
plan_name_for_upgrade: 'Premium', plan_name_for_upgrade: 'Premium',
target_id: 'first-feature-callout' target_id: 'first-feature-callout'
......
...@@ -30,6 +30,11 @@ RSpec.describe TrialStatusWidgetHelper do ...@@ -30,6 +30,11 @@ RSpec.describe TrialStatusWidgetHelper do
trial_ends_on: trial_end_date trial_ends_on: trial_end_date
) )
stub_experiments(forcibly_show_trial_status_popover: :candidate) stub_experiments(forcibly_show_trial_status_popover: :candidate)
allow_next_instance_of(GitlabSubscriptions::FetchSubscriptionPlansService, plan: :free) do |instance|
allow(instance).to receive(:execute).and_return([
{ 'code' => 'ultimate', 'id' => 'ultimate-plan-id' }
])
end
end end
after do after do
...@@ -59,7 +64,7 @@ RSpec.describe TrialStatusWidgetHelper do ...@@ -59,7 +64,7 @@ RSpec.describe TrialStatusWidgetHelper do
expect(data_attrs).to match( expect(data_attrs).to match(
shared_expected_attrs.merge( shared_expected_attrs.merge(
group_name: group.name, group_name: group.name,
purchase_href: new_subscriptions_path(namespace_id: group.id, plan_id: described_class::ZUORA_ULTIMATE_PLAN_ID), purchase_href: new_subscriptions_path(namespace_id: group.id, plan_id: 'ultimate-plan-id'),
target_id: shared_expected_attrs[:container_id], target_id: shared_expected_attrs[:container_id],
start_initially_shown: start_initially_shown, start_initially_shown: start_initially_shown,
trial_end_date: trial_end_date, trial_end_date: trial_end_date,
......
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