diff --git a/ee/app/assets/javascripts/pages/admin/code_suggestions/index.js b/ee/app/assets/javascripts/pages/admin/code_suggestions/index.js index 15bcbe32aa63d1dd1c8573e0d4f303db44eba52e..2e1ee0f1b4ceea874d53069ade902999916869e4 100644 --- a/ee/app/assets/javascripts/pages/admin/code_suggestions/index.js +++ b/ee/app/assets/javascripts/pages/admin/code_suggestions/index.js @@ -22,6 +22,7 @@ function mountCodeSuggestionsUsageApp() { apolloProvider, provide: { isSaaS: false, + addDuoProHref: el.dataset.addDuoProSeatsUrl, }, render: (h) => h(CodeSuggestionsUsage), }); diff --git a/ee/app/controllers/admin/code_suggestions_controller.rb b/ee/app/controllers/admin/code_suggestions_controller.rb index 42f440e5eb772152abe251b2ff7c4192da982ac6..ef166429631c4ca45c2b7c56eea8fd5125f61d76 100644 --- a/ee/app/controllers/admin/code_suggestions_controller.rb +++ b/ee/app/controllers/admin/code_suggestions_controller.rb @@ -12,6 +12,10 @@ class CodeSuggestionsController < Admin::ApplicationController before_action :ensure_feature_available! + def index + @subscription_name = License.current.subscription_name + end + private def ensure_feature_available! diff --git a/ee/app/helpers/gitlab_subscriptions/code_suggestions_helper.rb b/ee/app/helpers/gitlab_subscriptions/code_suggestions_helper.rb index 2a24ddb0beafad4630093e0ff158038b1c3a11fc..00b18eb153e398e4fd870406881bfc8732f855f3 100644 --- a/ee/app/helpers/gitlab_subscriptions/code_suggestions_helper.rb +++ b/ee/app/helpers/gitlab_subscriptions/code_suggestions_helper.rb @@ -11,5 +11,11 @@ def code_suggestions_available?(namespace = nil) Feature.enabled?(:self_managed_code_suggestions) end end + + def add_duo_pro_seats_url(subscription_name) + return unless code_suggestions_available? + + ::Gitlab::Routing.url_helpers.subscription_portal_add_duo_pro_seats_url(subscription_name) + end end end diff --git a/ee/app/views/admin/code_suggestions/index.html.haml b/ee/app/views/admin/code_suggestions/index.html.haml index 5a36db058c8c51f7b11f0807080decfad9d73e22..06e360ad8ca21b771a03d119ef991c6712835f4c 100644 --- a/ee/app/views/admin/code_suggestions/index.html.haml +++ b/ee/app/views/admin/code_suggestions/index.html.haml @@ -1,4 +1,5 @@ -# EE:Self Managed - page_title s_('CodeSuggestions|Duo Pro') +- duo_pro_url = add_duo_pro_seats_url(@subscription_name) -#js-code-suggestions-page{ data: {} } +#js-code-suggestions-page{ data: { add_duo_pro_seats_url: duo_pro_url } } diff --git a/ee/spec/helpers/gitlab_subscriptions/code_suggestions_helper_spec.rb b/ee/spec/helpers/gitlab_subscriptions/code_suggestions_helper_spec.rb index c0a23219204534792b9e753f89be1cb6b882d97d..a49a406eed67ab2287880ce71f7f5ceaa7e73813 100644 --- a/ee/spec/helpers/gitlab_subscriptions/code_suggestions_helper_spec.rb +++ b/ee/spec/helpers/gitlab_subscriptions/code_suggestions_helper_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe GitlabSubscriptions::CodeSuggestionsHelper, feature_category: :seat_cost_management do + include SubscriptionPortalHelper + describe '#code_suggestions_available?' do context 'when GitLab is SaaS' do let_it_be(:namespace) { build_stubbed(:group) } @@ -60,4 +62,30 @@ end end end + + describe '#add_duo_pro_seats_url' do + let(:subscription_name) { 'A-S000XXX' } + let(:env_value) { nil } + + before do + stub_env('CUSTOMER_PORTAL_URL', env_value) + end + + context 'when code suggestions are not available' do + before do + allow(helper).to receive(:code_suggestions_available?).and_return false + end + + it 'returns nil' do + expect(helper.add_duo_pro_seats_url(subscription_name)).to eq nil + end + end + + context 'when code suggestions are available' do + it 'returns expected url' do + expected_url = "#{staging_customers_url}/gitlab/namespaces/#{subscription_name}/duo_pro_seats" + expect(helper.add_duo_pro_seats_url(subscription_name)).to eq expected_url + end + end + end end