summaryrefslogtreecommitdiff
path: root/spec/features/projects/integrations/user_activates_issue_tracker_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/features/projects/integrations/user_activates_issue_tracker_spec.rb')
-rw-r--r--spec/features/projects/integrations/user_activates_issue_tracker_spec.rb92
1 files changed, 92 insertions, 0 deletions
diff --git a/spec/features/projects/integrations/user_activates_issue_tracker_spec.rb b/spec/features/projects/integrations/user_activates_issue_tracker_spec.rb
new file mode 100644
index 00000000000..b9c2c539899
--- /dev/null
+++ b/spec/features/projects/integrations/user_activates_issue_tracker_spec.rb
@@ -0,0 +1,92 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'User activates issue tracker', :js do
+ include_context 'project integration activation'
+
+ let(:url) { 'http://tracker.example.com' }
+
+ def fill_form(disable: false, skip_new_issue_url: false)
+ click_active_checkbox if disable
+
+ fill_in 'service_project_url', with: url
+ fill_in 'service_issues_url', with: "#{url}/:id"
+
+ fill_in 'service_new_issue_url', with: url unless skip_new_issue_url
+ end
+
+ shared_examples 'external issue tracker activation' do |tracker:, skip_new_issue_url: false, skip_test: false|
+ describe 'user sets and activates the integration' do
+ context 'when the connection test succeeds' do
+ before do
+ stub_request(:head, url).to_return(headers: { 'Content-Type' => 'application/json' })
+
+ visit_project_integration(tracker)
+ fill_form(skip_new_issue_url: skip_new_issue_url)
+
+ if skip_test
+ click_save_integration
+ else
+ click_test_then_save_integration(expect_test_to_fail: false)
+ end
+ end
+
+ it 'activates the integration' do
+ expect(page).to have_content("#{tracker} settings saved and active.")
+ expect(current_path).to eq(edit_project_integration_path(project, tracker.parameterize(separator: '_')))
+ end
+
+ it 'shows the link in the menu' do
+ page.within('.nav-sidebar') do
+ expect(page).to have_link(tracker, href: url)
+ end
+ end
+ end
+
+ context 'when the connection test fails' do
+ it 'activates the integration' do
+ stub_request(:head, url).to_raise(Gitlab::HTTP::Error)
+
+ visit_project_integration(tracker)
+ fill_form(skip_new_issue_url: skip_new_issue_url)
+
+ if skip_test
+ click_button('Save changes')
+ else
+ click_test_then_save_integration
+ end
+
+ expect(page).to have_content("#{tracker} settings saved and active.")
+ expect(current_path).to eq(edit_project_integration_path(project, tracker.parameterize(separator: '_')))
+ end
+ end
+ end
+
+ describe 'user disables the integration' do
+ before do
+ visit_project_integration(tracker)
+ fill_form(disable: true, skip_new_issue_url: skip_new_issue_url)
+
+ click_button('Save changes')
+ end
+
+ it 'saves but does not activate the integration' do
+ expect(page).to have_content("#{tracker} settings saved, but not active.")
+ expect(current_path).to eq(edit_project_integration_path(project, tracker.parameterize(separator: '_')))
+ end
+
+ it 'does not show the external tracker link in the menu' do
+ page.within('.nav-sidebar') do
+ expect(page).not_to have_link(tracker, href: url)
+ end
+ end
+ end
+ end
+
+ it_behaves_like 'external issue tracker activation', tracker: 'Redmine'
+ it_behaves_like 'external issue tracker activation', tracker: 'YouTrack', skip_new_issue_url: true
+ it_behaves_like 'external issue tracker activation', tracker: 'Bugzilla'
+ it_behaves_like 'external issue tracker activation', tracker: 'Custom issue tracker'
+ it_behaves_like 'external issue tracker activation', tracker: 'EWM', skip_test: true
+end