Update specs for integrations API to check all modifiable fields
Background
This is in preparation for #348208 (closed).
Proposal
Extend the specs for PUT requests in spec/requests/api/integrations_spec.rb
to verify all modifiable attributes in all integrations.
A possible draft for this from &2411 (comment 760726080):
diff --git i/spec/requests/api/integrations_spec.rb w/spec/requests/api/integrations_spec.rb
index 649647804c0..596dc01feb3 100644
--- i/spec/requests/api/integrations_spec.rb
+++ w/spec/requests/api/integrations_spec.rb
@@ -50,26 +50,9 @@
it "updates #{integration} settings" do
put api("/projects/#{project.id}/#{endpoint}/#{dashed_integration}", user), params: integration_attrs
- expect(response).to have_gitlab_http_status(:ok)
-
- current_integration = project.integrations.first
- events = current_integration.event_names.empty? ? ["foo"].freeze : current_integration.event_names
- query_strings = []
- events.each do |event|
- query_strings << "#{event}=#{!current_integration[event]}"
- end
- query_strings = query_strings.join('&')
-
- put api("/projects/#{project.id}/#{endpoint}/#{dashed_integration}?#{query_strings}", user), params: integration_attrs
-
expect(response).to have_gitlab_http_status(:ok)
expect(json_response['slug']).to eq(dashed_integration)
- events.each do |event|
- next if event == "foo"
-
- expect(project.integrations.first[event]).not_to eq(current_integration[event]),
- "expected #{!current_integration[event]} for event #{event} for #{endpoint} #{current_integration.title}, got #{current_integration[event]}"
- end
+ expect(project.integrations.first).to have_attributes(integration_attrs)
end
it "returns if required fields missing" do
diff --git i/spec/support/shared_contexts/features/integrations/integrations_shared_context.rb w/spec/support/shared_contexts/features/integrations/integrations_shared_context.rb
index 3d2b0433b21..680072ac94a 100644
--- i/spec/support/shared_contexts/features/integrations/integrations_shared_context.rb
+++ w/spec/support/shared_contexts/features/integrations/integrations_shared_context.rb
@@ -8,8 +8,9 @@
let(:integration_method) { Project.integration_association_name(integration) }
let(:integration_klass) { Integration.integration_name_to_model(integration) }
let(:integration_instance) { integration_klass.new }
- let(:integration_fields) { integration_instance.fields }
- let(:integration_attrs_list) { integration_fields.inject([]) {|arr, hash| arr << hash[:name].to_sym } }
+ let(:integration_fields) { integration_instance.fields.map { |field| field[:name].to_sym } }
+ let(:integration_events) { integration_klass.event_names.map(&:to_sym) }
+ let(:integration_attrs_list) { integration_fields + integration_events }
let(:integration_attrs) do
integration_attrs_list.inject({}) do |hash, k|
if k =~ /^(token*|.*_token|.*_key)/
@@ -23,7 +24,7 @@
elsif k =~ /^(.*_url|url|webhook)/
hash.merge!(k => "http://example.com")
elsif integration_klass.method_defined?("#{k}?")
- hash.merge!(k => true)
+ hash.merge!(k => !integration_instance.public_send(k))
elsif integration == 'irker' && k == :recipients
hash.merge!(k => 'irc://irc.network.net:666/#channel')
elsif integration == 'irker' && k == :server_port
This will fail for some known missing attributes, these can be excluded for now until #348208 (closed) is implemented.
Depending on the number of failures, we can either fix them as part of #348208 (closed), or create additional follow-up issues (per integration, or group of integrations).
Edited by Markus Koller