diff --git a/app/models/users/callout.rb b/app/models/users/callout.rb index 0c13e9d8c23be2c7539cd484f33da24283791b0d..290fe3578e34c8d6da37af370d2aecdccf3bbf97 100644 --- a/app/models/users/callout.rb +++ b/app/models/users/callout.rb @@ -33,7 +33,7 @@ class Callout < MainClusterwide::ApplicationRecord pipeline_needs_hover_tip: 30, web_ide_ci_environments_guidance: 31, security_configuration_upgrade_banner: 32, - cloud_licensing_subscription_activation_banner: 33, # EE-only + # 33 removed in https://gitlab.com/gitlab-org/gitlab/-/merge_requests/159243 trial_status_reminder_d14: 34, # EE-only trial_status_reminder_d3: 35, # EE-only security_configuration_devops_alert: 36, # EE-only diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index 0aedd952b97323853026113bd332d3f6291321fb..76d59b90e02c23aac48d7c225dadee682e44987e 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -36581,7 +36581,6 @@ Name of the feature that the callout is for. | <a id="usercalloutfeaturenameenumbuy_pipeline_minutes_notification_dot"></a>`BUY_PIPELINE_MINUTES_NOTIFICATION_DOT` | Callout feature name for buy_pipeline_minutes_notification_dot. | | <a id="usercalloutfeaturenameenumcanary_deployment"></a>`CANARY_DEPLOYMENT` | Callout feature name for canary_deployment. | | <a id="usercalloutfeaturenameenumci_deprecation_warning_for_types_keyword"></a>`CI_DEPRECATION_WARNING_FOR_TYPES_KEYWORD` | Callout feature name for ci_deprecation_warning_for_types_keyword. | -| <a id="usercalloutfeaturenameenumcloud_licensing_subscription_activation_banner"></a>`CLOUD_LICENSING_SUBSCRIPTION_ACTIVATION_BANNER` | Callout feature name for cloud_licensing_subscription_activation_banner. | | <a id="usercalloutfeaturenameenumcluster_security_warning"></a>`CLUSTER_SECURITY_WARNING` | Callout feature name for cluster_security_warning. | | <a id="usercalloutfeaturenameenumdeployment_approvals_empty_state"></a>`DEPLOYMENT_APPROVALS_EMPTY_STATE` | Callout feature name for deployment_approvals_empty_state. | | <a id="usercalloutfeaturenameenumdeployment_details_feedback"></a>`DEPLOYMENT_DETAILS_FEEDBACK` | Callout feature name for deployment_details_feedback. | diff --git a/ee/app/assets/javascripts/admin/subscriptions/show/components/subscription_activation_banner.vue b/ee/app/assets/javascripts/admin/subscriptions/show/components/subscription_activation_banner.vue deleted file mode 100644 index 0e53128ba3dd6d2877b8ec3adaf6afbebcf4aafe..0000000000000000000000000000000000000000 --- a/ee/app/assets/javascripts/admin/subscriptions/show/components/subscription_activation_banner.vue +++ /dev/null @@ -1,60 +0,0 @@ -<script> -import { GlBanner, GlLink, GlSprintf } from '@gitlab/ui'; -import { - addActivationCode, - subscriptionBannerBlogPostUrl, - subscriptionBannerText, - subscriptionBannerTitle, -} from '../constants'; - -export const ACTIVATE_SUBSCRIPTION_EVENT = 'activate-subscription'; -export const CLOSE_ACTIVATE_SUBSCRIPTION_BANNER_EVENT = 'close'; - -export default { - name: 'SubscriptionActivationBanner', - subscriptionBannerBlogPostUrl, - i18n: { - bannerText: subscriptionBannerText, - buttonText: addActivationCode, - title: subscriptionBannerTitle, - }, - components: { - GlBanner, - GlLink, - GlSprintf, - }, - inject: ['congratulationSvgPath', 'customersPortalUrl'], - methods: { - handleClose() { - this.$emit(CLOSE_ACTIVATE_SUBSCRIPTION_BANNER_EVENT); - }, - handlePrimary() { - this.$emit(ACTIVATE_SUBSCRIPTION_EVENT); - }, - }, -}; -</script> - -<template> - <gl-banner - :button-text="$options.i18n.buttonText" - :title="$options.i18n.title" - variant="promotion" - :svg-path="congratulationSvgPath" - @close="handleClose" - @primary="handlePrimary" - > - <p> - <gl-sprintf :message="$options.i18n.bannerText"> - <template #blogPostLink="{ content }"> - <gl-link :href="$options.subscriptionBannerBlogPostUrl" target="_blank">{{ - content - }}</gl-link> - </template> - <template #portalLink="{ content }"> - <gl-link :href="customersPortalUrl" target="_blank">{{ content }}</gl-link> - </template> - </gl-sprintf> - </p> - </gl-banner> -</template> diff --git a/ee/app/assets/javascripts/admin/subscriptions/show/components/subscription_breakdown.vue b/ee/app/assets/javascripts/admin/subscriptions/show/components/subscription_breakdown.vue index e7148a5bb566fa95281e9442c7ca75d4639c25f1..91bbdf3e4681a0312190a8d53d28a079eadedad8 100644 --- a/ee/app/assets/javascripts/admin/subscriptions/show/components/subscription_breakdown.vue +++ b/ee/app/assets/javascripts/admin/subscriptions/show/components/subscription_breakdown.vue @@ -6,7 +6,6 @@ import { uniqueId } from 'lodash'; import SafeHtml from '~/vue_shared/directives/safe_html'; import { createAlert } from '~/alert'; import { __, sprintf } from '~/locale'; -import UserCalloutDismisser from '~/vue_shared/components/user_callout_dismisser.vue'; import SubscriptionDetailsHistory from 'jh_else_ee/admin/subscriptions/show/components/subscription_details_history.vue'; import { addActivationCode, @@ -14,7 +13,6 @@ import { subscriptionDetailsHeaderText, subscriptionTypes, } from '../constants'; -import SubscriptionActivationBanner from './subscription_activation_banner.vue'; import SubscriptionActivationModal from './subscription_activation_modal.vue'; import SubscriptionDetailsCard from './subscription_details_card.vue'; import SubscriptionDetailsUserInfo from './subscription_details_user_info.vue'; @@ -48,15 +46,13 @@ export default { components: { GlButton, GlModal, - SubscriptionActivationBanner, SubscriptionActivationModal, SubscriptionDetailsCard, SubscriptionDetailsHistory, SubscriptionDetailsUserInfo, SubscriptionSyncNotifications: () => import('./subscription_sync_notifications.vue'), - UserCalloutDismisser, }, - inject: ['licenseRemovePath', 'subscriptionActivationBannerCalloutName'], + inject: ['licenseRemovePath'], props: { subscription: { type: Object, @@ -149,16 +145,6 @@ export default { :modal-id="$options.activateSubscriptionModal.id" v-on="$listeners" /> - <user-callout-dismisser :feature-name="subscriptionActivationBannerCalloutName"> - <template #default="{ dismiss, shouldShowCallout }"> - <subscription-activation-banner - v-if="isLegacySubscription && shouldShowCallout" - class="mb-4" - @activate-subscription="showActivationModal" - @close="dismiss" - /> - </template> - </user-callout-dismisser> <subscription-sync-notifications v-if="shouldShowNotifications" class="gl-mb-4" /> <div class="gl-grid sm:gl-grid-cols-2 gl-gap-5 gl-mb-5"> <subscription-details-card diff --git a/ee/app/assets/javascripts/admin/subscriptions/show/constants.js b/ee/app/assets/javascripts/admin/subscriptions/show/constants.js index 4b46f7acb743acc59318888ba4e0db13ee26c9ed..3b46a2627a8bcc7d488c6d16e219711c6a9ba296 100644 --- a/ee/app/assets/javascripts/admin/subscriptions/show/constants.js +++ b/ee/app/assets/javascripts/admin/subscriptions/show/constants.js @@ -115,11 +115,6 @@ export const CONNECTIVITY_ERROR = 'CONNECTIVITY_ERROR'; export const INVALID_CODE_ERROR = 'INVALID_CODE_ERROR'; export const supportLink = `${PROMO_URL}/support/#contact-support`; -export const subscriptionBannerTitle = s__('SuperSonics|Cloud licensing'); -export const subscriptionBannerText = s__( - "SuperSonics|Cloud licensing is now available. It's an easier way to activate instances and manage subscriptions. Read more about it in our %{blogPostLinkStart}blog post%{blogPostLinkEnd}. Activation codes are available in the %{portalLinkStart}Customers Portal%{portalLinkEnd}.", -); -export const subscriptionBannerBlogPostUrl = `${PROMO_URL}/blog/2021/07/20/improved-billing-and-subscription-management/`; export const exportLicenseUsageBtnText = s__('SuperSonics|Export license usage file'); export const customersPortalBtnText = s__('SuperSonics|Customers Portal'); diff --git a/ee/app/assets/javascripts/admin/subscriptions/show/mount_cloud_licenses.js b/ee/app/assets/javascripts/admin/subscriptions/show/mount_cloud_licenses.js index be29472623f295eca28f32afdae2a63965ffb13b..3bd3780c0931a4911f3d0db648d90b67a24bca7f 100644 --- a/ee/app/assets/javascripts/admin/subscriptions/show/mount_cloud_licenses.js +++ b/ee/app/assets/javascripts/admin/subscriptions/show/mount_cloud_licenses.js @@ -26,7 +26,6 @@ export default () => { freeTrialPath, hasActiveLicense, licenseRemovePath, - subscriptionActivationBannerCalloutName, subscriptionSyncPath, licenseUsageFilePath, } = el.dataset; @@ -46,7 +45,6 @@ export default () => { customersPortalUrl, freeTrialPath, licenseRemovePath, - subscriptionActivationBannerCalloutName, subscriptionSyncPath, }, render: (h) => diff --git a/ee/app/helpers/ee/users/callouts_helper.rb b/ee/app/helpers/ee/users/callouts_helper.rb index 6f463755d85df69cdd1bd8b2d2b025671f0477ef..78f4706daa41f95fc6206b09460d256eab608557 100644 --- a/ee/app/helpers/ee/users/callouts_helper.rb +++ b/ee/app/helpers/ee/users/callouts_helper.rb @@ -12,7 +12,6 @@ module CalloutsHelper ULTIMATE_TRIAL = 'ultimate_trial' NEW_USER_SIGNUPS_CAP_REACHED = 'new_user_signups_cap_reached' PERSONAL_ACCESS_TOKEN_EXPIRY = 'personal_access_token_expiry' - CL_SUBSCRIPTION_ACTIVATION = 'cloud_licensing_subscription_activation_banner' PROFILE_PERSONAL_ACCESS_TOKEN_EXPIRY = 'profile_personal_access_token_expiry' JOINING_A_PROJECT_ALERT = 'joining_a_project_alert' diff --git a/ee/app/helpers/license_helper.rb b/ee/app/helpers/license_helper.rb index 8be728281bc66d7440912f367dbca42b268367ac..4c3e451f30284382397615d67b9ddbd71b7be90d 100644 --- a/ee/app/helpers/license_helper.rb +++ b/ee/app/helpers/license_helper.rb @@ -64,7 +64,6 @@ def cloud_license_view_data license_remove_path: admin_license_path, subscription_sync_path: sync_seat_link_admin_license_path, congratulation_svg_path: image_path('illustrations/cloud-check-sm.svg'), - subscription_activation_banner_callout_name: ::EE::Users::CalloutsHelper::CL_SUBSCRIPTION_ACTIVATION, license_usage_file_path: admin_license_usage_export_path(format: :csv) } end diff --git a/ee/spec/frontend/admin/subscriptions/show/components/subscription_activation_banner_spec.js b/ee/spec/frontend/admin/subscriptions/show/components/subscription_activation_banner_spec.js deleted file mode 100644 index f2496e97fac73b471dd57af1e53a908de77218d4..0000000000000000000000000000000000000000 --- a/ee/spec/frontend/admin/subscriptions/show/components/subscription_activation_banner_spec.js +++ /dev/null @@ -1,73 +0,0 @@ -import { GlBanner, GlLink, GlSprintf } from '@gitlab/ui'; -import { shallowMount } from '@vue/test-utils'; -import SubscriptionActivationBanner, { - ACTIVATE_SUBSCRIPTION_EVENT, - CLOSE_ACTIVATE_SUBSCRIPTION_BANNER_EVENT, -} from 'ee/admin/subscriptions/show/components/subscription_activation_banner.vue'; -import { - addActivationCode, - subscriptionBannerBlogPostUrl, - subscriptionBannerText, - subscriptionBannerTitle, -} from 'ee/admin/subscriptions/show/constants'; - -describe('SubscriptionActivationBanner', () => { - let wrapper; - - const findBanner = () => wrapper.findComponent(GlBanner); - const findLink = (at) => wrapper.findAllComponents(GlLink).at(at); - - const customersPortalUrl = 'customers.dot'; - const congratulationSvgPath = '/path/to/svg'; - const createComponent = () => { - wrapper = shallowMount(SubscriptionActivationBanner, { - provide: { - congratulationSvgPath, - customersPortalUrl, - }, - stubs: { - GlSprintf, - }, - }); - }; - - beforeEach(() => { - createComponent(); - }); - - it('provides the correct props to the banner', () => { - expect(findBanner().props()).toMatchObject({ - buttonText: addActivationCode, - title: subscriptionBannerTitle, - svgPath: congratulationSvgPath, - }); - }); - - it('contains help text', () => { - expect(findBanner().text()).toMatchInterpolatedText(subscriptionBannerText); - }); - - it('contains a link to the blog post', () => { - expect(findLink(0).attributes('href')).toBe(subscriptionBannerBlogPostUrl); - }); - - it('contains a link to the customers portal', () => { - expect(findLink(1).attributes('href')).toBe(customersPortalUrl); - }); - - it('emits an event when the primary button is clicked', () => { - expect(wrapper.emitted(ACTIVATE_SUBSCRIPTION_EVENT)).toBeUndefined(); - - findBanner().vm.$emit('primary'); - - expect(wrapper.emitted(ACTIVATE_SUBSCRIPTION_EVENT)).toHaveLength(1); - }); - - it('emits an event when the close button is clicked', () => { - expect(wrapper.emitted(CLOSE_ACTIVATE_SUBSCRIPTION_BANNER_EVENT)).toBeUndefined(); - - findBanner().vm.$emit('close'); - - expect(wrapper.emitted(CLOSE_ACTIVATE_SUBSCRIPTION_BANNER_EVENT)).toHaveLength(1); - }); -}); diff --git a/ee/spec/frontend/admin/subscriptions/show/components/subscription_breakdown_spec.js b/ee/spec/frontend/admin/subscriptions/show/components/subscription_breakdown_spec.js index 0ccb98ed45092f5d7fa1723be978dc719a368fa1..d1074fc798b2a409b3ba0e0f6f70de5eae246006 100644 --- a/ee/spec/frontend/admin/subscriptions/show/components/subscription_breakdown_spec.js +++ b/ee/spec/frontend/admin/subscriptions/show/components/subscription_breakdown_spec.js @@ -1,16 +1,13 @@ // eslint-disable-next-line no-restricted-imports import Vuex from 'vuex'; import { GlCard } from '@gitlab/ui'; -import { mount, shallowMount } from '@vue/test-utils'; +import { shallowMount } from '@vue/test-utils'; import AxiosMockAdapter from 'axios-mock-adapter'; import { nextTick } from 'vue'; import { createAlert } from '~/alert'; import mutations from 'ee/admin/subscriptions/show/store/mutations'; import * as types from 'ee/admin/subscriptions/show/store/mutation_types'; import createState from 'ee/admin/subscriptions/show/store/state'; -import SubscriptionActivationBanner, { - ACTIVATE_SUBSCRIPTION_EVENT, -} from 'ee/admin/subscriptions/show/components/subscription_activation_banner.vue'; import SubscriptionActivationModal from 'ee/admin/subscriptions/show/components/subscription_activation_modal.vue'; import SubscriptionBreakdown, { licensedToFields, @@ -43,7 +40,6 @@ describe('Subscription Breakdown', () => { const congratulationSvgPath = '/path/to/svg'; const connectivityHelpURL = 'connectivity/help/url'; const licenseRemovePath = '/license/remove/'; - const subscriptionActivationBannerCalloutName = 'banner_callout_name'; const subscriptionSyncPath = '/sync/path/'; const findDetailsCards = () => wrapper.findAllComponents(SubscriptionDetailsCard); @@ -53,8 +49,6 @@ describe('Subscription Breakdown', () => { const findRemoveLicenseButton = () => wrapper.findByTestId('remove-license-button'); const findActivateSubscriptionAction = () => wrapper.findByTestId('subscription-activate-subscription-action'); - const findSubscriptionActivationBanner = () => - wrapper.findComponent(SubscriptionActivationBanner); const findSubscriptionActivationModal = () => wrapper.findComponent(SubscriptionActivationModal); const findSubscriptionSyncNotifications = () => wrapper.findComponent(SubscriptionSyncNotifications); @@ -104,7 +98,6 @@ describe('Subscription Breakdown', () => { congratulationSvgPath, connectivityHelpURL, licenseRemovePath, - subscriptionActivationBannerCalloutName, subscriptionSyncPath, ...provide, }, @@ -186,10 +179,6 @@ describe('Subscription Breakdown', () => { expect(findSubscriptionActivationModal().props('visible')).toBe(true); }); - it('does not present a subscription activation banner', () => { - expect(findSubscriptionActivationBanner().exists()).toBe(false); - }); - describe('footer buttons', () => { it.each` url | type | shouldShow @@ -252,42 +241,6 @@ describe('Subscription Breakdown', () => { }); }); - describe('subscription activation banner', () => { - beforeEach(() => { - createComponent({ - props: { subscription: licenseFile }, - }); - }); - - it('presents a subscription activation banner', () => { - expect(findSubscriptionActivationBanner().exists()).toBe(true); - }); - - it('calls the dismiss callback when closing the banner', () => { - findSubscriptionActivationBanner().vm.$emit('close'); - - expect(userCalloutDismissSpy).toHaveBeenCalledTimes(1); - }); - - it('shows a modal', async () => { - expect(findSubscriptionActivationModal().props('visible')).toBe(false); - - await findSubscriptionActivationBanner().vm.$emit(ACTIVATE_SUBSCRIPTION_EVENT); - - expect(findSubscriptionActivationModal().props('visible')).toBe(true); - }); - - it('hides the banner when the proper condition applies', () => { - createComponent({ - mountMethod: mount, - props: { subscription: licenseFile }, - shouldShowCallout: false, - }); - - expect(findSubscriptionActivationBanner().exists()).toBe(false); - }); - }); - describe('showAlert', () => { let state; diff --git a/ee/spec/helpers/license_helper_spec.rb b/ee/spec/helpers/license_helper_spec.rb index c0f79b8a9ae18bab415d034ca323557ec560ad97..bb9d74cb42ac7453de33bcb6490a476434f2d3e6 100644 --- a/ee/spec/helpers/license_helper_spec.rb +++ b/ee/spec/helpers/license_helper_spec.rb @@ -98,7 +98,6 @@ def stub_default_url_options(host: "localhost", protocol: "http", port: nil, scr subscription_sync_path: sync_seat_link_admin_license_path, license_remove_path: admin_license_path, congratulation_svg_path: helper.image_path('illustrations/cloud-check-sm.svg'), - subscription_activation_banner_callout_name: ::EE::Users::CalloutsHelper::CL_SUBSCRIPTION_ACTIVATION, license_usage_file_path: admin_license_usage_export_path(format: :csv) }) end end @@ -114,7 +113,6 @@ def stub_default_url_options(host: "localhost", protocol: "http", port: nil, scr subscription_sync_path: sync_seat_link_admin_license_path, license_remove_path: admin_license_path, congratulation_svg_path: helper.image_path('illustrations/cloud-check-sm.svg'), - subscription_activation_banner_callout_name: ::EE::Users::CalloutsHelper::CL_SUBSCRIPTION_ACTIVATION, license_usage_file_path: admin_license_usage_export_path(format: :csv) }) end end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index f092dfbe4b08bd96d5d33b344b6d9db354eadd20..a076e6d8a71229643223e0fbc731e836d6ac4a1c 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -52205,12 +52205,6 @@ msgstr "" msgid "SuperSonics|Cannot activate instance due to a connectivity issue" msgstr "" -msgid "SuperSonics|Cloud licensing" -msgstr "" - -msgid "SuperSonics|Cloud licensing is now available. It's an easier way to activate instances and manage subscriptions. Read more about it in our %{blogPostLinkStart}blog post%{blogPostLinkEnd}. Activation codes are available in the %{portalLinkStart}Customers Portal%{portalLinkEnd}." -msgstr "" - msgid "SuperSonics|Customers Portal" msgstr ""