From 7e79d9c0c7d9e6033793200dc18a270fc6f65efc Mon Sep 17 00:00:00 2001 From: Alexandru Croitor <acroitor@gitlab.com> Date: Fri, 10 Jul 2020 12:13:55 +0300 Subject: [PATCH] Add license tire feature check Check that Jira issues integration feature is available for the projeect in its current plan tire. --- app/models/project.rb | 1 + .../integrations/jira/issues_controller.rb | 2 +- .../integrations/jira/issues_finder.rb | 2 +- ee/app/helpers/ee/services_helper.rb | 2 +- ee/app/models/ee/project.rb | 4 +++ ee/app/models/license.rb | 1 + .../app}/services/jira/jql_builder_service.rb | 0 .../jira/requests/issues/list_service.rb | 0 .../jira/issues_controller_spec.rb | 8 ++++-- .../jira/jira_issues_list_spec.rb | 16 +++++++++++- .../services/user_activates_jira_spec.rb | 16 ++++++++++++ .../integrations/jira/issues_finder_spec.rb | 26 ++++++++++--------- .../services/jira/jql_builder_service_spec.rb | 0 .../jira/requests/issues/list_service_spec.rb | 0 14 files changed, 60 insertions(+), 18 deletions(-) rename {app => ee/app}/finders/projects/integrations/jira/issues_finder.rb (97%) rename {app => ee/app}/services/jira/jql_builder_service.rb (100%) rename {app => ee/app}/services/jira/requests/issues/list_service.rb (100%) rename {spec => ee/spec}/finders/projects/integrations/jira/issues_finder_spec.rb (93%) rename {spec => ee/spec}/services/jira/jql_builder_service_spec.rb (100%) rename {spec => ee/spec}/services/jira/requests/issues/list_service_spec.rb (100%) diff --git a/app/models/project.rb b/app/models/project.rb index 5183c03de477..8cbc278f6a05 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -2469,6 +2469,7 @@ def metrics_setting def service_desk_enabled Gitlab::ServiceDesk.enabled?(project: self) end + alias_method :service_desk_enabled?, :service_desk_enabled def service_desk_address diff --git a/ee/app/controllers/projects/integrations/jira/issues_controller.rb b/ee/app/controllers/projects/integrations/jira/issues_controller.rb index 448f2bb8129c..8fc7df2a3817 100644 --- a/ee/app/controllers/projects/integrations/jira/issues_controller.rb +++ b/ee/app/controllers/projects/integrations/jira/issues_controller.rb @@ -69,7 +69,7 @@ def default_sort_order protected def check_feature_enabled! - return render_404 unless Feature.enabled?(:jira_integration, project) && project.external_issue_tracker + return render_404 unless project.jira_issues_integration_available? && project.external_issue_tracker end def render_bad_request(error) diff --git a/app/finders/projects/integrations/jira/issues_finder.rb b/ee/app/finders/projects/integrations/jira/issues_finder.rb similarity index 97% rename from app/finders/projects/integrations/jira/issues_finder.rb rename to ee/app/finders/projects/integrations/jira/issues_finder.rb index 239ff4ba2b20..64588705aff4 100644 --- a/app/finders/projects/integrations/jira/issues_finder.rb +++ b/ee/app/finders/projects/integrations/jira/issues_finder.rb @@ -25,7 +25,7 @@ def initialize(project, params = {}) end def execute - return [] unless Feature.enabled?(:jira_integration, project) + return [] unless project.jira_issues_integration_available? raise IntegrationError, _('Jira service not configured.') unless jira_service&.active? diff --git a/ee/app/helpers/ee/services_helper.rb b/ee/app/helpers/ee/services_helper.rb index 33bbde53daa3..4228ea2b6d7f 100644 --- a/ee/app/helpers/ee/services_helper.rb +++ b/ee/app/helpers/ee/services_helper.rb @@ -6,7 +6,7 @@ module ServicesHelper override :project_jira_issues_integration? def project_jira_issues_integration? - ::Feature.enabled?(:jira_integration, @project) && @project.jira_service.issues_enabled + @project.jira_issues_integration_available? && @project.jira_service.issues_enabled end override :integration_form_data diff --git a/ee/app/models/ee/project.rb b/ee/app/models/ee/project.rb index b8e329205b66..a32e06661898 100644 --- a/ee/app/models/ee/project.rb +++ b/ee/app/models/ee/project.rb @@ -313,6 +313,10 @@ def feature_available?(feature, user = nil) end end + def jira_issues_integration_available? + feature_available?(:jira_issues_integration) + end + def multiple_approval_rules_available? feature_available?(:multiple_approval_rules) end diff --git a/ee/app/models/license.rb b/ee/app/models/license.rb index 503c4459d5f1..4bbb5e9791c0 100644 --- a/ee/app/models/license.rb +++ b/ee/app/models/license.rb @@ -82,6 +82,7 @@ class License < ApplicationRecord group_saml issues_analytics jira_dev_panel_integration + jira_issues_integration ldap_group_sync_filter merge_pipelines merge_request_performance_metrics diff --git a/app/services/jira/jql_builder_service.rb b/ee/app/services/jira/jql_builder_service.rb similarity index 100% rename from app/services/jira/jql_builder_service.rb rename to ee/app/services/jira/jql_builder_service.rb diff --git a/app/services/jira/requests/issues/list_service.rb b/ee/app/services/jira/requests/issues/list_service.rb similarity index 100% rename from app/services/jira/requests/issues/list_service.rb rename to ee/app/services/jira/requests/issues/list_service.rb diff --git a/ee/spec/controllers/projects/integrations/jira/issues_controller_spec.rb b/ee/spec/controllers/projects/integrations/jira/issues_controller_spec.rb index 542adf7a0975..f48aa93b4471 100644 --- a/ee/spec/controllers/projects/integrations/jira/issues_controller_spec.rb +++ b/ee/spec/controllers/projects/integrations/jira/issues_controller_spec.rb @@ -8,6 +8,10 @@ let(:project) { create(:project) } let(:user) { create(:user) } + before do + stub_licensed_features(jira_issues_integration: true) + end + describe 'GET #index' do before do sign_in(user) @@ -15,9 +19,9 @@ create(:jira_service, project: project) end - context 'when jira_integration feature disabled' do + context 'when jira_issues_integration licensed feature is not available' do it 'returns 404 status' do - stub_feature_flags(jira_integration: false) + stub_licensed_features(jira_issues_integration: false) get :index, params: { namespace_id: project.namespace, project_id: project } diff --git a/ee/spec/features/integrations/jira/jira_issues_list_spec.rb b/ee/spec/features/integrations/jira/jira_issues_list_spec.rb index 502dbbeca824..674484189282 100644 --- a/ee/spec/features/integrations/jira/jira_issues_list_spec.rb +++ b/ee/spec/features/integrations/jira/jira_issues_list_spec.rb @@ -3,15 +3,29 @@ require 'spec_helper' RSpec.describe 'Jira issues list' do - let_it_be(:project) { create(:project) } + let_it_be(:project, refind: true) { create(:project) } let_it_be(:jira_integration) { create(:jira_service, project: project, issues_enabled: true) } let(:user) { create(:user) } before do + stub_licensed_features(jira_issues_integration: true) project.add_user(user, :developer) sign_in(user) end + context 'when jira_issues_integration licensed feature is not available' do + before do + stub_licensed_features(jira_issues_integration: false) + end + + it 'renders "Create new issue" button' do + visit project_integrations_jira_issues_path(project) + + expect(page).to have_gitlab_http_status(:not_found) + expect(page).not_to have_link('Create new issue in Jira') + end + end + it 'renders "Create new issue" button' do visit project_integrations_jira_issues_path(project) diff --git a/ee/spec/features/projects/services/user_activates_jira_spec.rb b/ee/spec/features/projects/services/user_activates_jira_spec.rb index 362bf678589a..a5737d9c44a7 100644 --- a/ee/spec/features/projects/services/user_activates_jira_spec.rb +++ b/ee/spec/features/projects/services/user_activates_jira_spec.rb @@ -9,6 +9,7 @@ describe 'user sets and activates Jira Service' do context 'when Jira connection test succeeds' do before do + stub_licensed_features(jira_issues_integration: true) allow_any_instance_of(JiraService).to receive(:issues_enabled) { true } server_info = { key: 'value' }.to_json stub_request(:get, test_url).with(basic_auth: %w(username password)).to_return(body: server_info) @@ -26,6 +27,21 @@ expect(page).not_to have_link('Jira', href: url) end end + + context 'when jira_issues_integration feature is not available' do + before do + stub_licensed_features(jira_issues_integration: false) + end + + it 'does not show Jira links to sidebar menu' do + page.within('.nav-sidebar') do + expect(page).not_to have_link('Jira Issues', href: project_integrations_jira_issues_path(project)) + expect(page).not_to have_link('Issue List', href: project_integrations_jira_issues_path(project), visible: false) + expect(page).not_to have_link('Open Jira', href: url, visible: false) + expect(page).to have_link('Jira', href: url) + end + end + end end end end diff --git a/spec/finders/projects/integrations/jira/issues_finder_spec.rb b/ee/spec/finders/projects/integrations/jira/issues_finder_spec.rb similarity index 93% rename from spec/finders/projects/integrations/jira/issues_finder_spec.rb rename to ee/spec/finders/projects/integrations/jira/issues_finder_spec.rb index fd55585cc3bc..2850869c4ead 100644 --- a/spec/finders/projects/integrations/jira/issues_finder_spec.rb +++ b/ee/spec/finders/projects/integrations/jira/issues_finder_spec.rb @@ -3,25 +3,18 @@ require 'spec_helper' RSpec.describe Projects::Integrations::Jira::IssuesFinder do - let_it_be(:project, reload: true) { create(:project) } + let_it_be(:project, refind: true) { create(:project) } let_it_be(:jira_service, reload: true) { create(:jira_service, project: project) } let(:params) { {} } let(:service) { described_class.new(project, params) } + before do + stub_licensed_features(jira_issues_integration: true) + end + describe '#execute' do subject(:issues) { service.execute } - context 'when jira_integration feature flag is not enabled' do - before do - stub_feature_flags(jira_integration: false) - end - - it 'exits early and returns no issues' do - expect(issues.size).to eq 0 - expect(service.total_count).to be_nil - end - end - context 'when jira service integration does not have project_key' do it 'raises error' do expect { subject }.to raise_error(Projects::Integrations::Jira::IntegrationError, 'Jira project key is not configured') @@ -131,5 +124,14 @@ end end end + + context 'when jira_issues_integration licensed feature is not available' do + it 'exits early and returns no issues' do + stub_licensed_features(jira_issues_integration: false) + + expect(issues.size).to eq 0 + expect(service.total_count).to be_nil + end + end end end diff --git a/spec/services/jira/jql_builder_service_spec.rb b/ee/spec/services/jira/jql_builder_service_spec.rb similarity index 100% rename from spec/services/jira/jql_builder_service_spec.rb rename to ee/spec/services/jira/jql_builder_service_spec.rb diff --git a/spec/services/jira/requests/issues/list_service_spec.rb b/ee/spec/services/jira/requests/issues/list_service_spec.rb similarity index 100% rename from spec/services/jira/requests/issues/list_service_spec.rb rename to ee/spec/services/jira/requests/issues/list_service_spec.rb -- GitLab