summaryrefslogtreecommitdiff
path: root/spec/support/shared_contexts/features
diff options
context:
space:
mode:
Diffstat (limited to 'spec/support/shared_contexts/features')
-rw-r--r--spec/support/shared_contexts/features/integrations/group_integrations_shared_context.rb28
-rw-r--r--spec/support/shared_contexts/features/integrations/instance_and_group_integrations_shared_context.rb18
-rw-r--r--spec/support/shared_contexts/features/integrations/instance_integrations_shared_context.rb24
-rw-r--r--spec/support/shared_contexts/features/integrations/integrations_shared_context.rb78
-rw-r--r--spec/support/shared_contexts/features/integrations/project_integrations_jira_context.rb14
-rw-r--r--spec/support/shared_contexts/features/integrations/project_integrations_shared_context.rb45
6 files changed, 207 insertions, 0 deletions
diff --git a/spec/support/shared_contexts/features/integrations/group_integrations_shared_context.rb b/spec/support/shared_contexts/features/integrations/group_integrations_shared_context.rb
new file mode 100644
index 00000000000..5996fcc6593
--- /dev/null
+++ b/spec/support/shared_contexts/features/integrations/group_integrations_shared_context.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+RSpec.shared_context 'group integration activation' do
+ include_context 'instance and group integration activation'
+
+ let_it_be(:group) { create(:group) }
+ let_it_be(:user) { create(:user) }
+
+ before_all do
+ group.add_owner(user)
+ end
+
+ before do
+ sign_in(user)
+ end
+
+ def visit_group_integrations
+ visit group_settings_integrations_path(group)
+ end
+
+ def visit_group_integration(name)
+ visit_group_integrations
+
+ within('#content-body') do
+ click_link(name)
+ end
+ end
+end
diff --git a/spec/support/shared_contexts/features/integrations/instance_and_group_integrations_shared_context.rb b/spec/support/shared_contexts/features/integrations/instance_and_group_integrations_shared_context.rb
new file mode 100644
index 00000000000..58ee341f71f
--- /dev/null
+++ b/spec/support/shared_contexts/features/integrations/instance_and_group_integrations_shared_context.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+RSpec.shared_context 'instance and group integration activation' do
+ include_context 'integration activation'
+
+ def click_save_integration
+ click_save_changes_button
+ click_save_settings_modal
+ end
+
+ def click_save_changes_button
+ click_button('Save changes')
+ end
+
+ def click_save_settings_modal
+ click_button('Save')
+ end
+end
diff --git a/spec/support/shared_contexts/features/integrations/instance_integrations_shared_context.rb b/spec/support/shared_contexts/features/integrations/instance_integrations_shared_context.rb
new file mode 100644
index 00000000000..3b02db994a3
--- /dev/null
+++ b/spec/support/shared_contexts/features/integrations/instance_integrations_shared_context.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+RSpec.shared_context 'instance integration activation' do
+ include_context 'instance and group integration activation'
+
+ let_it_be(:user) { create(:user, :admin) }
+
+ before do
+ sign_in(user)
+ gitlab_enable_admin_mode_sign_in(user)
+ end
+
+ def visit_instance_integrations
+ visit integrations_admin_application_settings_path
+ end
+
+ def visit_instance_integration(name)
+ visit_instance_integrations
+
+ within('#content-body') do
+ click_link(name)
+ end
+ end
+end
diff --git a/spec/support/shared_contexts/features/integrations/integrations_shared_context.rb b/spec/support/shared_contexts/features/integrations/integrations_shared_context.rb
new file mode 100644
index 00000000000..e532b42fd1c
--- /dev/null
+++ b/spec/support/shared_contexts/features/integrations/integrations_shared_context.rb
@@ -0,0 +1,78 @@
+# frozen_string_literal: true
+
+Integration.available_services_names.each do |service|
+ RSpec.shared_context service do
+ include JiraServiceHelper if service == 'jira'
+
+ let(:dashed_service) { service.dasherize }
+ let(:service_method) { Project.integration_association_name(service) }
+ let(:service_klass) { Integration.integration_name_to_model(service) }
+ let(:service_instance) { service_klass.new }
+ let(:service_fields) { service_instance.fields }
+ let(:service_attrs_list) { service_fields.inject([]) {|arr, hash| arr << hash[:name].to_sym } }
+ let(:service_attrs) do
+ service_attrs_list.inject({}) do |hash, k|
+ if k =~ /^(token*|.*_token|.*_key)/
+ hash.merge!(k => 'secrettoken')
+ elsif service == 'confluence' && k == :confluence_url
+ hash.merge!(k => 'https://example.atlassian.net/wiki')
+ elsif service == 'datadog' && k == :datadog_site
+ hash.merge!(k => 'datadoghq.com')
+ elsif k =~ /^(.*_url|url|webhook)/
+ hash.merge!(k => "http://example.com")
+ elsif service_klass.method_defined?("#{k}?")
+ hash.merge!(k => true)
+ elsif service == 'irker' && k == :recipients
+ hash.merge!(k => 'irc://irc.network.net:666/#channel')
+ elsif service == 'irker' && k == :server_port
+ hash.merge!(k => 1234)
+ elsif service == 'jira' && k == :jira_issue_transition_id
+ hash.merge!(k => '1,2,3')
+ elsif service == 'emails_on_push' && k == :recipients
+ hash.merge!(k => 'foo@bar.com')
+ elsif service == 'slack' || service == 'mattermost' && k == :labels_to_be_notified_behavior
+ hash.merge!(k => "match_any")
+ else
+ hash.merge!(k => "someword")
+ end
+ end
+ end
+
+ let(:licensed_features) do
+ {
+ 'github' => :github_project_service_integration
+ }
+ end
+
+ before do
+ enable_license_for_service(service)
+ stub_jira_service_test if service == 'jira'
+ end
+
+ def initialize_service(service, attrs = {})
+ service_item = project.find_or_initialize_service(service)
+ service_item.attributes = attrs
+ service_item.properties = service_attrs
+ service_item.save!
+ service_item
+ end
+
+ private
+
+ def enable_license_for_service(service)
+ return unless respond_to?(:stub_licensed_features)
+
+ licensed_feature = licensed_features[service]
+ return unless licensed_feature
+
+ stub_licensed_features(licensed_feature => true)
+ project.clear_memoization(:disabled_services)
+ end
+ end
+end
+
+RSpec.shared_context 'integration activation' do
+ def click_active_checkbox
+ find('label', text: 'Active').click
+ end
+end
diff --git a/spec/support/shared_contexts/features/integrations/project_integrations_jira_context.rb b/spec/support/shared_contexts/features/integrations/project_integrations_jira_context.rb
new file mode 100644
index 00000000000..54bb9fd108e
--- /dev/null
+++ b/spec/support/shared_contexts/features/integrations/project_integrations_jira_context.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+RSpec.shared_context 'project service Jira context' do
+ let(:url) { 'https://jira.example.com' }
+ let(:test_url) { 'https://jira.example.com/rest/api/2/serverInfo' }
+
+ def fill_form(disable: false)
+ click_active_checkbox if disable
+
+ fill_in 'service_url', with: url
+ fill_in 'service_username', with: 'username'
+ fill_in 'service_password', with: 'password'
+ end
+end
diff --git a/spec/support/shared_contexts/features/integrations/project_integrations_shared_context.rb b/spec/support/shared_contexts/features/integrations/project_integrations_shared_context.rb
new file mode 100644
index 00000000000..b10844320d0
--- /dev/null
+++ b/spec/support/shared_contexts/features/integrations/project_integrations_shared_context.rb
@@ -0,0 +1,45 @@
+# frozen_string_literal: true
+
+RSpec.shared_context 'project service activation' do
+ include_context 'integration activation'
+
+ let(:project) { create(:project) }
+ let(:user) { create(:user) }
+
+ before do
+ project.add_maintainer(user)
+ sign_in(user)
+ end
+
+ def visit_project_integrations
+ visit project_settings_integrations_path(project)
+ end
+
+ def visit_project_integration(name)
+ visit_project_integrations
+
+ within('#content-body') do
+ click_link(name)
+ end
+ end
+
+ def click_save_integration
+ click_button('Save changes')
+ end
+
+ def click_test_integration
+ click_link('Test settings')
+ end
+
+ def click_test_then_save_integration(expect_test_to_fail: true)
+ click_test_integration
+
+ if expect_test_to_fail
+ expect(page).to have_content('Connection failed.')
+ else
+ expect(page).to have_content('Connection successful.')
+ end
+
+ click_save_integration
+ end
+end