Merge branch '22974-trigger-service-events-through-api' into 'master'
adds events to services api deserialization Closes #22974 See merge request !8324
This commit is contained in:
commit
30d5e9fa54
|
@ -1,23 +1,23 @@
|
||||||
module ServicesHelper
|
module ServicesHelper
|
||||||
def service_event_description(event)
|
def service_event_description(event)
|
||||||
case event
|
case event
|
||||||
when "push"
|
when "push", "push_events"
|
||||||
"Event will be triggered by a push to the repository"
|
"Event will be triggered by a push to the repository"
|
||||||
when "tag_push"
|
when "tag_push", "tag_push_events"
|
||||||
"Event will be triggered when a new tag is pushed to the repository"
|
"Event will be triggered when a new tag is pushed to the repository"
|
||||||
when "note"
|
when "note", "note_events"
|
||||||
"Event will be triggered when someone adds a comment"
|
"Event will be triggered when someone adds a comment"
|
||||||
when "issue"
|
when "issue", "issue_events"
|
||||||
"Event will be triggered when an issue is created/updated/closed"
|
"Event will be triggered when an issue is created/updated/closed"
|
||||||
when "confidential_issue"
|
when "confidential_issue", "confidential_issue_events"
|
||||||
"Event will be triggered when a confidential issue is created/updated/closed"
|
"Event will be triggered when a confidential issue is created/updated/closed"
|
||||||
when "merge_request"
|
when "merge_request", "merge_request_events"
|
||||||
"Event will be triggered when a merge request is created/updated/merged"
|
"Event will be triggered when a merge request is created/updated/merged"
|
||||||
when "build"
|
when "build", "build_events"
|
||||||
"Event will be triggered when a build status changes"
|
"Event will be triggered when a build status changes"
|
||||||
when "wiki_page"
|
when "wiki_page", "wiki_page_events"
|
||||||
"Event will be triggered when a wiki page is created/updated"
|
"Event will be triggered when a wiki page is created/updated"
|
||||||
when "commit"
|
when "commit", "commit_events"
|
||||||
"Event will be triggered when a commit is created/updated"
|
"Event will be triggered when a commit is created/updated"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -26,4 +26,6 @@ module ServicesHelper
|
||||||
event = event.pluralize if %w[merge_request issue confidential_issue].include?(event)
|
event = event.pluralize if %w[merge_request issue confidential_issue].include?(event)
|
||||||
"#{event}_events"
|
"#{event}_events"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
extend self
|
||||||
end
|
end
|
||||||
|
|
|
@ -25,7 +25,7 @@ You can create a Personal Access Token here:
|
||||||
http://app.asana.com/-/account_api'
|
http://app.asana.com/-/account_api'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'asana'
|
'asana'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ http://app.asana.com/-/account_api'
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
%w(push)
|
%w(push)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ class AssemblaService < Service
|
||||||
'Project Management Software (Source Commits Endpoint)'
|
'Project Management Software (Source Commits Endpoint)'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'assembla'
|
'assembla'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ class AssemblaService < Service
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
%w(push)
|
%w(push)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ class BambooService < CiService
|
||||||
'You must set up automatic revision labeling and a repository trigger in Bamboo.'
|
'You must set up automatic revision labeling and a repository trigger in Bamboo.'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'bamboo'
|
'bamboo'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -56,10 +56,6 @@ class BambooService < CiService
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
|
||||||
%w(push)
|
|
||||||
end
|
|
||||||
|
|
||||||
def build_page(sha, ref)
|
def build_page(sha, ref)
|
||||||
with_reactive_cache(sha, ref) {|cached| cached[:build_page] }
|
with_reactive_cache(sha, ref) {|cached| cached[:build_page] }
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,7 +19,7 @@ class BugzillaService < IssueTrackerService
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'bugzilla'
|
'bugzilla'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -24,10 +24,6 @@ class BuildkiteService < CiService
|
||||||
hook.save
|
hook.save
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
|
||||||
%w(push)
|
|
||||||
end
|
|
||||||
|
|
||||||
def execute(data)
|
def execute(data)
|
||||||
return unless supported_events.include?(data[:object_kind])
|
return unless supported_events.include?(data[:object_kind])
|
||||||
|
|
||||||
|
@ -54,7 +50,7 @@ class BuildkiteService < CiService
|
||||||
'Continuous integration and deployments'
|
'Continuous integration and deployments'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'buildkite'
|
'buildkite'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -19,11 +19,11 @@ class BuildsEmailService < Service
|
||||||
'Email the builds status to a list of recipients.'
|
'Email the builds status to a list of recipients.'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'builds_email'
|
'builds_email'
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
%w(build)
|
%w(build)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ class CampfireService < Service
|
||||||
'Simple web-based real-time group chat'
|
'Simple web-based real-time group chat'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'campfire'
|
'campfire'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ class CampfireService < Service
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
%w(push)
|
%w(push)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ class ChatNotificationService < Service
|
||||||
valid?
|
valid?
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
%w[push issue confidential_issue merge_request note tag_push
|
%w[push issue confidential_issue merge_request note tag_push
|
||||||
build pipeline wiki_page]
|
build pipeline wiki_page]
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,8 +13,8 @@ class ChatSlashCommandsService < Service
|
||||||
ActiveSupport::SecurityUtils.variable_size_secure_compare(token, self.token)
|
ActiveSupport::SecurityUtils.variable_size_secure_compare(token, self.token)
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
[]
|
%w()
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_test?
|
def can_test?
|
||||||
|
|
|
@ -8,7 +8,7 @@ class CiService < Service
|
||||||
self.respond_to?(:token) && self.token.present? && ActiveSupport::SecurityUtils.variable_size_secure_compare(token, self.token)
|
self.respond_to?(:token) && self.token.present? && ActiveSupport::SecurityUtils.variable_size_secure_compare(token, self.token)
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
%w(push)
|
%w(push)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ class CustomIssueTrackerService < IssueTrackerService
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'custom_issue_tracker'
|
'custom_issue_tracker'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
class DeploymentService < Service
|
class DeploymentService < Service
|
||||||
default_value_for :category, 'deployment'
|
default_value_for :category, 'deployment'
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
[]
|
%w()
|
||||||
end
|
end
|
||||||
|
|
||||||
def predefined_variables
|
def predefined_variables
|
||||||
|
|
|
@ -32,7 +32,7 @@ class DroneCiService < CiService
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
%w(push merge_request tag_push)
|
%w(push merge_request tag_push)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ class DroneCiService < CiService
|
||||||
'Drone is a Continuous Integration platform built on Docker, written in Go'
|
'Drone is a Continuous Integration platform built on Docker, written in Go'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'drone_ci'
|
'drone_ci'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -12,11 +12,11 @@ class EmailsOnPushService < Service
|
||||||
'Email the commits and diff of each push to a list of recipients.'
|
'Email the commits and diff of each push to a list of recipients.'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'emails_on_push'
|
'emails_on_push'
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
%w(push tag_push)
|
%w(push tag_push)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ class ExternalWikiService < Service
|
||||||
'Replaces the link to the internal wiki with a link to an external wiki.'
|
'Replaces the link to the internal wiki with a link to an external wiki.'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'external_wiki'
|
'external_wiki'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -29,4 +29,8 @@ class ExternalWikiService < Service
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.supported_events
|
||||||
|
%w()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,7 +12,7 @@ class FlowdockService < Service
|
||||||
'Flowdock is a collaboration web app for technical teams.'
|
'Flowdock is a collaboration web app for technical teams.'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'flowdock'
|
'flowdock'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ class FlowdockService < Service
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
%w(push)
|
%w(push)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ class GemnasiumService < Service
|
||||||
'Gemnasium monitors your project dependencies and alerts you about updates and security vulnerabilities.'
|
'Gemnasium monitors your project dependencies and alerts you about updates and security vulnerabilities.'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'gemnasium'
|
'gemnasium'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ class GemnasiumService < Service
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
%w(push)
|
%w(push)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ class GitlabIssueTrackerService < IssueTrackerService
|
||||||
|
|
||||||
default_value_for :default, true
|
default_value_for :default, true
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'gitlab'
|
'gitlab'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ class HipchatService < Service
|
||||||
'Private group chat and IM'
|
'Private group chat and IM'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'hipchat'
|
'hipchat'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ class HipchatService < Service
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
%w(push issue confidential_issue merge_request note tag_push build)
|
%w(push issue confidential_issue merge_request note tag_push build)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -17,11 +17,11 @@ class IrkerService < Service
|
||||||
'gateway.'
|
'gateway.'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'irker'
|
'irker'
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
%w(push)
|
%w(push)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ class IssueTrackerService < Service
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
%w(push)
|
%w(push)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ class JiraService < IssueTrackerService
|
||||||
# This is confusing, but JiraService does not really support these events.
|
# This is confusing, but JiraService does not really support these events.
|
||||||
# The values here are required to display correct options in the service
|
# The values here are required to display correct options in the service
|
||||||
# configuration screen.
|
# configuration screen.
|
||||||
def supported_events
|
def self.supported_events
|
||||||
%w(commit merge_request)
|
%w(commit merge_request)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ class JiraService < IssueTrackerService
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'jira'
|
'jira'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ class KubernetesService < DeploymentService
|
||||||
'deployments with `app=$CI_ENVIRONMENT_SLUG`'
|
'deployments with `app=$CI_ENVIRONMENT_SLUG`'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'kubernetes'
|
'kubernetes'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ class MattermostService < ChatNotificationService
|
||||||
'Receive event notifications in Mattermost'
|
'Receive event notifications in Mattermost'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'mattermost'
|
'mattermost'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ class MattermostSlashCommandsService < ChatSlashCommandsService
|
||||||
"Perform common operations on GitLab in Mattermost"
|
"Perform common operations on GitLab in Mattermost"
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'mattermost_slash_commands'
|
'mattermost_slash_commands'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -15,11 +15,11 @@ class PipelinesEmailService < Service
|
||||||
'Email the pipelines status to a list of recipients.'
|
'Email the pipelines status to a list of recipients.'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'pipelines_email'
|
'pipelines_email'
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
%w[pipeline]
|
%w[pipeline]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ class PivotaltrackerService < Service
|
||||||
'Project Management Software (Source Commits Endpoint)'
|
'Project Management Software (Source Commits Endpoint)'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'pivotaltracker'
|
'pivotaltracker'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ class PivotaltrackerService < Service
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
%w(push)
|
%w(push)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ class PushoverService < Service
|
||||||
'Pushover makes it easy to get real-time notifications on your Android device, iPhone, iPad, and Desktop.'
|
'Pushover makes it easy to get real-time notifications on your Android device, iPhone, iPad, and Desktop.'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'pushover'
|
'pushover'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ class PushoverService < Service
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def self.supported_events
|
||||||
%w(push)
|
%w(push)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ class RedmineService < IssueTrackerService
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'redmine'
|
'redmine'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,7 +7,7 @@ class SlackService < ChatNotificationService
|
||||||
'Receive event notifications in Slack'
|
'Receive event notifications in Slack'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'slack'
|
'slack'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ class SlackSlashCommandsService < ChatSlashCommandsService
|
||||||
"Perform common operations on GitLab in Slack"
|
"Perform common operations on GitLab in Slack"
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'slack_slash_commands'
|
'slack_slash_commands'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -43,14 +43,10 @@ class TeamcityService < CiService
|
||||||
'requests build, that setting is in the vsc root advanced settings.'
|
'requests build, that setting is in the vsc root advanced settings.'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def self.to_param
|
||||||
'teamcity'
|
'teamcity'
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
|
||||||
%w(push)
|
|
||||||
end
|
|
||||||
|
|
||||||
def fields
|
def fields
|
||||||
[
|
[
|
||||||
{ type: 'text', name: 'teamcity_url',
|
{ type: 'text', name: 'teamcity_url',
|
||||||
|
|
|
@ -76,6 +76,11 @@ class Service < ActiveRecord::Base
|
||||||
|
|
||||||
def to_param
|
def to_param
|
||||||
# implement inside child
|
# implement inside child
|
||||||
|
self.class.to_param
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.to_param
|
||||||
|
raise NotImplementedError
|
||||||
end
|
end
|
||||||
|
|
||||||
def fields
|
def fields
|
||||||
|
@ -92,7 +97,11 @@ class Service < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def event_names
|
def event_names
|
||||||
supported_events.map { |event| "#{event}_events" }
|
self.class.event_names
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.event_names
|
||||||
|
self.supported_events.map { |event| "#{event}_events" }
|
||||||
end
|
end
|
||||||
|
|
||||||
def event_field(event)
|
def event_field(event)
|
||||||
|
@ -104,6 +113,10 @@ class Service < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def supported_events
|
def supported_events
|
||||||
|
self.class.supported_events
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.supported_events
|
||||||
%w(push tag_push issue confidential_issue merge_request wiki_page)
|
%w(push tag_push issue confidential_issue merge_request wiki_page)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
title: Adds service trigger events to api
|
||||||
|
merge_request: 8324
|
||||||
|
author:
|
|
@ -145,7 +145,7 @@ module API
|
||||||
name: :room,
|
name: :room,
|
||||||
type: String,
|
type: String,
|
||||||
desc: 'Campfire room'
|
desc: 'Campfire room'
|
||||||
},
|
}
|
||||||
],
|
],
|
||||||
'custom-issue-tracker' => [
|
'custom-issue-tracker' => [
|
||||||
{
|
{
|
||||||
|
@ -534,7 +534,36 @@ module API
|
||||||
desc: 'The password of the user'
|
desc: 'The password of the user'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}.freeze
|
}
|
||||||
|
|
||||||
|
service_classes = [
|
||||||
|
AsanaService,
|
||||||
|
AssemblaService,
|
||||||
|
BambooService,
|
||||||
|
BugzillaService,
|
||||||
|
BuildkiteService,
|
||||||
|
BuildsEmailService,
|
||||||
|
CampfireService,
|
||||||
|
CustomIssueTrackerService,
|
||||||
|
DroneCiService,
|
||||||
|
EmailsOnPushService,
|
||||||
|
ExternalWikiService,
|
||||||
|
FlowdockService,
|
||||||
|
GemnasiumService,
|
||||||
|
HipchatService,
|
||||||
|
IrkerService,
|
||||||
|
JiraService,
|
||||||
|
KubernetesService,
|
||||||
|
MattermostSlashCommandsService,
|
||||||
|
SlackSlashCommandsService,
|
||||||
|
PipelinesEmailService,
|
||||||
|
PivotaltrackerService,
|
||||||
|
PushoverService,
|
||||||
|
RedmineService,
|
||||||
|
SlackService,
|
||||||
|
MattermostService,
|
||||||
|
TeamcityService,
|
||||||
|
].freeze
|
||||||
|
|
||||||
trigger_services = {
|
trigger_services = {
|
||||||
'mattermost-slash-commands' => [
|
'mattermost-slash-commands' => [
|
||||||
|
@ -568,6 +597,19 @@ module API
|
||||||
services.each do |service_slug, settings|
|
services.each do |service_slug, settings|
|
||||||
desc "Set #{service_slug} service for project"
|
desc "Set #{service_slug} service for project"
|
||||||
params do
|
params do
|
||||||
|
service_classes.each do |service|
|
||||||
|
event_names = service.try(:event_names) || []
|
||||||
|
event_names.each do |event_name|
|
||||||
|
services[service.to_param.tr("_", "-")] << {
|
||||||
|
required: false,
|
||||||
|
name: event_name.to_sym,
|
||||||
|
type: String,
|
||||||
|
desc: ServicesHelper.service_event_description(event_name)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
services.freeze
|
||||||
|
|
||||||
settings.each do |setting|
|
settings.each do |setting|
|
||||||
if setting[:required]
|
if setting[:required]
|
||||||
requires setting[:name], type: setting[:type], desc: setting[:desc]
|
requires setting[:name], type: setting[:type], desc: setting[:desc]
|
||||||
|
@ -581,7 +623,7 @@ module API
|
||||||
service_params = declared_params(include_missing: false).merge(active: true)
|
service_params = declared_params(include_missing: false).merge(active: true)
|
||||||
|
|
||||||
if service.update_attributes(service_params)
|
if service.update_attributes(service_params)
|
||||||
true
|
present service, with: Entities::ProjectService, include_passwords: current_user.is_admin?
|
||||||
else
|
else
|
||||||
render_api_error!('400 Bad Request', 400)
|
render_api_error!('400 Bad Request', 400)
|
||||||
end
|
end
|
||||||
|
|
|
@ -54,6 +54,7 @@ describe Projects::ServicesController do
|
||||||
context 'on successful update' do
|
context 'on successful update' do
|
||||||
it 'sets the flash' do
|
it 'sets the flash' do
|
||||||
expect(service).to receive(:to_param).and_return('hipchat')
|
expect(service).to receive(:to_param).and_return('hipchat')
|
||||||
|
expect(service).to receive(:event_names).and_return(HipchatService.event_names)
|
||||||
|
|
||||||
put :update,
|
put :update,
|
||||||
namespace_id: project.namespace.id,
|
namespace_id: project.namespace.id,
|
||||||
|
|
|
@ -6,7 +6,7 @@ describe API::Services, api: true do
|
||||||
let(:user) { create(:user) }
|
let(:user) { create(:user) }
|
||||||
let(:admin) { create(:admin) }
|
let(:admin) { create(:admin) }
|
||||||
let(:user2) { create(:user) }
|
let(:user2) { create(:user) }
|
||||||
let(:project) {create(:empty_project, creator_id: user.id, namespace: user.namespace) }
|
let(:project) { create(:empty_project, creator_id: user.id, namespace: user.namespace) }
|
||||||
|
|
||||||
Service.available_services_names.each do |service|
|
Service.available_services_names.each do |service|
|
||||||
describe "PUT /projects/:id/services/#{service.dasherize}" do
|
describe "PUT /projects/:id/services/#{service.dasherize}" do
|
||||||
|
@ -16,6 +16,15 @@ describe API::Services, api: true do
|
||||||
put api("/projects/#{project.id}/services/#{dashed_service}", user), service_attrs
|
put api("/projects/#{project.id}/services/#{dashed_service}", user), service_attrs
|
||||||
|
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
|
|
||||||
|
current_service = project.services.first
|
||||||
|
event = current_service.event_names.empty? ? "foo" : current_service.event_names.first
|
||||||
|
state = current_service[event] || false
|
||||||
|
|
||||||
|
put api("/projects/#{project.id}/services/#{dashed_service}?#{event}=#{!state}", user), service_attrs
|
||||||
|
|
||||||
|
expect(response).to have_http_status(200)
|
||||||
|
expect(project.services.first[event]).not_to eq(state) unless event == "foo"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns if required fields missing" do
|
it "returns if required fields missing" do
|
||||||
|
|
Loading…
Reference in New Issue