Commit 7e79d9c0 authored by Alexandru Croitor's avatar Alexandru Croitor

Add license tire feature check

Check that Jira issues integration feature is available for the
projeect in its current plan tire.
parent 61a23c2e
......@@ -2469,6 +2469,7 @@ class Project < ApplicationRecord
def service_desk_enabled
Gitlab::ServiceDesk.enabled?(project: self)
end
alias_method :service_desk_enabled?, :service_desk_enabled
def service_desk_address
......
......@@ -69,7 +69,7 @@ module Projects
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)
......
......@@ -25,7 +25,7 @@ module Projects
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?
......
......@@ -6,7 +6,7 @@ module EE
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
......
......@@ -313,6 +313,10 @@ module EE
end
end
def jira_issues_integration_available?
feature_available?(:jira_issues_integration)
end
def multiple_approval_rules_available?
feature_available?(:multiple_approval_rules)
end
......
......@@ -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
......
......@@ -8,6 +8,10 @@ RSpec.describe Projects::Integrations::Jira::IssuesController do
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 @@ RSpec.describe Projects::Integrations::Jira::IssuesController do
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 }
......
......@@ -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)
......
......@@ -9,6 +9,7 @@ RSpec.describe 'User activates Jira', :js do
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 @@ RSpec.describe 'User activates Jira', :js do
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
......@@ -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 @@ RSpec.describe Projects::Integrations::Jira::IssuesFinder do
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
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