summaryrefslogtreecommitdiff
path: root/spec/support/shared_examples/integrations/integration_settings_form.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/support/shared_examples/integrations/integration_settings_form.rb')
-rw-r--r--spec/support/shared_examples/integrations/integration_settings_form.rb47
1 files changed, 47 insertions, 0 deletions
diff --git a/spec/support/shared_examples/integrations/integration_settings_form.rb b/spec/support/shared_examples/integrations/integration_settings_form.rb
new file mode 100644
index 00000000000..d0bb40e43ee
--- /dev/null
+++ b/spec/support/shared_examples/integrations/integration_settings_form.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+RSpec.shared_examples 'integration settings form' do
+ include IntegrationsHelper
+ # Note: these specs don't validate channel fields
+ # which are present on a few integrations
+ it 'displays all the integrations' do
+ aggregate_failures do
+ integrations.each do |integration|
+ navigate_to_integration(integration)
+
+ page.within('form.integration-settings-form') do
+ expect(page).to have_field('Active', type: 'checkbox', wait: 0),
+ "#{integration.title} active field not present"
+
+ fields = parse_json(fields_for_integration(integration))
+ fields.each do |field|
+ field_name = field[:name]
+ expect(page).to have_field(field[:title], wait: 0),
+ "#{integration.title} field #{field_name} not present"
+ end
+
+ events = parse_json(trigger_events_for_integration(integration))
+ events.each do |trigger|
+ # normalizing the title because capybara location is case sensitive
+ title = normalize_title trigger[:title], integration
+
+ expect(page).to have_field(title, type: 'checkbox', wait: 0),
+ "#{integration.title} field #{title} checkbox not present"
+ end
+ end
+ end
+ end
+ end
+
+ private
+
+ def normalize_title(title, integration)
+ return 'Merge request' if integration.is_a?(Integrations::Jira) && title == 'merge_request'
+
+ title.titlecase
+ end
+
+ def parse_json(json)
+ Gitlab::Json.parse(json, symbolize_names: true)
+ end
+end