From 5ff1f1d2282abbcc27df72a578b53f8cde44d69d Mon Sep 17 00:00:00 2001
From: Jason Goodman <jgoodman@gitlab.com>
Date: Tue, 24 Aug 2021 08:59:15 +0000
Subject: [PATCH] Fix Popover Trial Status Text for New Trials

---
 ee/app/assets/javascripts/billings/billings_util.js      | 3 +++
 ee/app/assets/javascripts/billings/constants.js          | 2 --
 .../subscriptions/components/subscription_table.vue      | 4 ++--
 .../components/trial_status_popover.vue                  | 8 ++++++--
 .../components/trial_status_widget.vue                   | 3 ++-
 .../contextual_sidebar/trial_status_popover_spec.js      | 9 +++++++++
 .../contextual_sidebar/trial_status_widget_spec.js       | 6 ++++++
 7 files changed, 28 insertions(+), 7 deletions(-)
 create mode 100644 ee/app/assets/javascripts/billings/billings_util.js

diff --git a/ee/app/assets/javascripts/billings/billings_util.js b/ee/app/assets/javascripts/billings/billings_util.js
new file mode 100644
index 0000000000000..08fb2f35bc145
--- /dev/null
+++ b/ee/app/assets/javascripts/billings/billings_util.js
@@ -0,0 +1,3 @@
+export function removeTrialSuffix(planName) {
+  return planName.replace(/ trial\b/i, '');
+}
diff --git a/ee/app/assets/javascripts/billings/constants.js b/ee/app/assets/javascripts/billings/constants.js
index 52b1a08676ac6..3feb44eac4864 100644
--- a/ee/app/assets/javascripts/billings/constants.js
+++ b/ee/app/assets/javascripts/billings/constants.js
@@ -3,5 +3,3 @@ export const TABLE_TYPE_FREE = 'free';
 export const TABLE_TYPE_TRIAL = 'trial';
 
 export const DAYS_FOR_RENEWAL = 15;
-
-export const PLAN_TITLE_TRIAL_TEXT = ' Trial';
diff --git a/ee/app/assets/javascripts/billings/subscriptions/components/subscription_table.vue b/ee/app/assets/javascripts/billings/subscriptions/components/subscription_table.vue
index 6c51348ae5261..ae25b16b6ba7c 100644
--- a/ee/app/assets/javascripts/billings/subscriptions/components/subscription_table.vue
+++ b/ee/app/assets/javascripts/billings/subscriptions/components/subscription_table.vue
@@ -2,12 +2,12 @@
 import { GlButton, GlLoadingIcon } from '@gitlab/ui';
 import { escape } from 'lodash';
 import { mapActions, mapState, mapGetters } from 'vuex';
+import { removeTrialSuffix } from 'ee/billings/billings_util';
 import {
   TABLE_TYPE_DEFAULT,
   TABLE_TYPE_FREE,
   TABLE_TYPE_TRIAL,
   DAYS_FOR_RENEWAL,
-  PLAN_TITLE_TRIAL_TEXT,
 } from 'ee/billings/constants';
 import ExtendReactivateTrialButton from 'ee/trials/extend_reactivate_trial/components/extend_reactivate_trial_button.vue';
 import createFlash from '~/flash';
@@ -79,7 +79,7 @@ export default {
     subscriptionHeader() {
       const planName = this.isFreePlan
         ? s__('SubscriptionTable|Free')
-        : escape(this.planName.replace(PLAN_TITLE_TRIAL_TEXT, ''));
+        : escape(removeTrialSuffix(this.planName));
       const suffix = this.isSubscription && this.plan.trial ? s__('SubscriptionTable|Trial') : '';
 
       return `${this.namespaceName}: ${planName} ${suffix}`;
diff --git a/ee/app/assets/javascripts/contextual_sidebar/components/trial_status_popover.vue b/ee/app/assets/javascripts/contextual_sidebar/components/trial_status_popover.vue
index 3f1ce55649539..2122306adb373 100644
--- a/ee/app/assets/javascripts/contextual_sidebar/components/trial_status_popover.vue
+++ b/ee/app/assets/javascripts/contextual_sidebar/components/trial_status_popover.vue
@@ -2,6 +2,7 @@
 import { GlButton, GlPopover, GlSprintf } from '@gitlab/ui';
 import { GlBreakpointInstance as bp } from '@gitlab/ui/dist/utils';
 import { debounce } from 'lodash';
+import { removeTrialSuffix } from 'ee/billings/billings_util';
 import axios from '~/lib/utils/axios_utils';
 import { formatDate } from '~/lib/utils/datetime_utility';
 import { sprintf } from '~/locale';
@@ -56,10 +57,13 @@ export default {
     formattedTrialEndDate() {
       return formatDate(this.trialEndDate, trialEndDateFormatString);
     },
+    planNameWithoutTrial() {
+      return removeTrialSuffix(this.planName);
+    },
     upgradeButtonTitle() {
       return sprintf(this.$options.i18n.upgradeButtonTitle, {
         groupName: this.groupName,
-        planName: this.planName,
+        planName: removeTrialSuffix(this.planName),
       });
     },
   },
@@ -162,7 +166,7 @@ export default {
       <template #bold="{ content }">
         <b>{{ sprintf(content, { trialEndDate: formattedTrialEndDate }) }}</b>
       </template>
-      <template #planName>{{ planName }}</template>
+      <template #planName>{{ planNameWithoutTrial }}</template>
     </gl-sprintf>
 
     <div class="gl-mt-5">
diff --git a/ee/app/assets/javascripts/contextual_sidebar/components/trial_status_widget.vue b/ee/app/assets/javascripts/contextual_sidebar/components/trial_status_widget.vue
index 92952a2b1fab5..2c47ffb5bb4f3 100644
--- a/ee/app/assets/javascripts/contextual_sidebar/components/trial_status_widget.vue
+++ b/ee/app/assets/javascripts/contextual_sidebar/components/trial_status_widget.vue
@@ -1,5 +1,6 @@
 <script>
 import { GlLink, GlProgressBar } from '@gitlab/ui';
+import { removeTrialSuffix } from 'ee/billings/billings_util';
 import { sprintf } from '~/locale';
 import Tracking from '~/tracking';
 import { EXPERIMENT_KEY, WIDGET } from './constants';
@@ -26,7 +27,7 @@ export default {
       const i18nWidgetTitle = i18n.widgetTitle.countableTranslator(this.daysRemaining);
 
       return sprintf(i18nWidgetTitle, {
-        planName: this.planName,
+        planName: removeTrialSuffix(this.planName),
         enDash: '–',
         num: this.daysRemaining,
       });
diff --git a/ee/spec/frontend/contextual_sidebar/trial_status_popover_spec.js b/ee/spec/frontend/contextual_sidebar/trial_status_popover_spec.js
index 4b15fee2648b9..f2e670a2809e7 100644
--- a/ee/spec/frontend/contextual_sidebar/trial_status_popover_spec.js
+++ b/ee/spec/frontend/contextual_sidebar/trial_status_popover_spec.js
@@ -86,6 +86,15 @@ describe('TrialStatusPopover component', () => {
     expectTracking(trackingEvents.compareBtnClick);
   });
 
+  it('does not include the word "Trial" if the plan name includes it', () => {
+    wrapper = createComponent({ planName: 'Ultimate Trial' }, mount);
+
+    const popoverText = wrapper.text();
+
+    expect(popoverText).toContain('We hope you’re enjoying the features of GitLab Ultimate.');
+    expect(popoverText).toMatch(/Upgrade Some Test Group to Ultimate(?! Trial)/);
+  });
+
   describe('startInitiallyShown', () => {
     const userCalloutProviders = {
       userCalloutsPath: 'user_callouts/path',
diff --git a/ee/spec/frontend/contextual_sidebar/trial_status_widget_spec.js b/ee/spec/frontend/contextual_sidebar/trial_status_widget_spec.js
index ae4e83dd4f8a0..13a57aa952345 100644
--- a/ee/spec/frontend/contextual_sidebar/trial_status_widget_spec.js
+++ b/ee/spec/frontend/contextual_sidebar/trial_status_widget_spec.js
@@ -64,6 +64,12 @@ describe('TrialStatusWidget component', () => {
 
       unmockTracking();
     });
+
+    it('does not render Trial twice if the plan name includes "Trial"', () => {
+      wrapper = createComponent({ planName: 'Ultimate Trial' });
+
+      expect(wrapper.text()).toEqual('Ultimate Trial – 20 days left');
+    });
   });
 
   describe('with the optional containerId prop', () => {
-- 
GitLab