diff --git a/app/models/project.rb b/app/models/project.rb
index ffbc355d5e34865be49bdc035bb69e387655390e..aa315de18fafd6587e27ce06588f3c0161eab183 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -89,8 +89,7 @@ def set_last_activity_at
has_one :asana_service, dependent: :destroy
has_one :gemnasium_service, dependent: :destroy
has_one :mattermost_slash_commands_service, dependent: :destroy
- has_one :mattermost_notification_service, dependent: :destroy
- has_one :slack_notification_service, dependent: :destroy
+ has_one :slack_service, dependent: :destroy
has_one :jenkins_service, dependent: :destroy
has_one :jenkins_deprecated_service, dependent: :destroy
has_one :buildkite_service, dependent: :destroy
diff --git a/app/models/project_services/chat_service.rb b/app/models/project_services/chat_service.rb
index 574788462deddcc160b75a23b2c8b494640d4682..d36beff5fa6e69829fac47db912b808f628e2d5a 100644
--- a/app/models/project_services/chat_service.rb
+++ b/app/models/project_services/chat_service.rb
@@ -1,5 +1,5 @@
# Base class for Chat services
-# This class is not meant to be used directly, but only to inherit from.
+# This class is not meant to be used directly, but only to inherrit from.
class ChatService < Service
default_value_for :category, 'chat'
diff --git a/app/models/project_services/mattermost_notification_service.rb b/app/models/project_services/mattermost_notification_service.rb
deleted file mode 100644
index de18c4b1f00cda5d5fa68873b940c3540e5b060c..0000000000000000000000000000000000000000
--- a/app/models/project_services/mattermost_notification_service.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-class MattermostNotificationService < ChatNotificationService
- def title
- 'Mattermost notifications'
- end
-
- def description
- 'Receive event notifications in Mattermost'
- end
-
- def to_param
- 'mattermost_notification'
- end
-
- def help
- 'This service sends notifications about projects events to Mattermost channels.
- To set up this service:
-
- - Enable incoming webhooks in your Mattermost installation.
- - Add an incoming webhook in your Mattermost team. The default channel can be overridden for each event.
- - Paste the webhook URL into the field bellow.
- - Select events below to enable notifications. The channel and username are optional.
-
'
- end
-
- def fields
- default_fields + build_event_channels
- end
-
- def default_fields
- [
- { type: 'text', name: 'webhook', placeholder: 'http://mattermost_host/hooks/...' },
- { type: 'text', name: 'username', placeholder: 'username' },
- { type: 'checkbox', name: 'notify_only_broken_builds' },
- { type: 'checkbox', name: 'notify_only_broken_pipelines' },
- ]
- end
-
- def default_channel
- "#town-square"
- end
-end
diff --git a/app/models/project_services/slack_notification_service.rb b/app/models/project_services/slack_notification_service.rb
deleted file mode 100644
index 3cbf89efba4e32b0b1f6c92d4780842abbc9ff4b..0000000000000000000000000000000000000000
--- a/app/models/project_services/slack_notification_service.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-class SlackNotificationService < ChatNotificationService
- def title
- 'Slack notifications'
- end
-
- def description
- 'Receive event notifications in Slack'
- end
-
- def to_param
- 'slack_notification'
- end
-
- def help
- 'This service sends notifications about projects events to Slack channels.
- To setup this service:
-
- - Add an incoming webhook in your Slack team. The default channel can be overridden for each event.
- - Paste the Webhook URL into the field below.
- - Select events below to enable notifications. The channel and username are optional.
-
'
- end
-
- def fields
- default_fields + build_event_channels
- end
-
- def default_fields
- [
- { type: 'text', name: 'webhook', placeholder: 'https://hooks.slack.com/services/...' },
- { type: 'text', name: 'username', placeholder: 'username' },
- { type: 'checkbox', name: 'notify_only_broken_builds' },
- { type: 'checkbox', name: 'notify_only_broken_pipelines' },
- ]
- end
-
- def default_channel
- "#general"
- end
-end
diff --git a/app/models/project_services/chat_notification_service.rb b/app/models/project_services/slack_service.rb
similarity index 65%
rename from app/models/project_services/chat_notification_service.rb
rename to app/models/project_services/slack_service.rb
index b05569877210677134332d2d35801efcfd12100b..e1b937817f4649d7bfd4adbdd10665da35b023ef 100644
--- a/app/models/project_services/chat_notification_service.rb
+++ b/app/models/project_services/slack_service.rb
@@ -1,13 +1,6 @@
-# Base class for Chat notifications services
-# This class is not meant to be used directly, but only to inherit from.
-class ChatNotificationService < Service
- include ChatMessage
-
- default_value_for :category, 'chat'
-
+class SlackService < Service
prop_accessor :webhook, :username, :channel
boolean_accessor :notify_only_broken_builds, :notify_only_broken_pipelines
-
validates :webhook, presence: true, url: true, if: :activated?
def initialize_properties
@@ -21,8 +14,35 @@ def initialize_properties
end
end
- def can_test?
- valid?
+ def title
+ 'Slack'
+ end
+
+ def description
+ 'A team communication tool for the 21st century'
+ end
+
+ def to_param
+ 'slack'
+ end
+
+ def help
+ 'This service sends notifications to your Slack channel.
+ To setup this Service you need to create a new "Incoming webhook" in your Slack integration panel,
+ and enter the Webhook URL below.'
+ end
+
+ def fields
+ default_fields =
+ [
+ { type: 'text', name: 'webhook', placeholder: 'https://hooks.slack.com/services/...' },
+ { type: 'text', name: 'username', placeholder: 'username' },
+ { type: 'text', name: 'channel', placeholder: "#general" },
+ { type: 'checkbox', name: 'notify_only_broken_builds' },
+ { type: 'checkbox', name: 'notify_only_broken_pipelines' },
+ ]
+
+ default_fields + build_event_channels
end
def supported_events
@@ -47,16 +67,21 @@ def execute(data)
message = get_message(object_kind, data)
- return false unless message
+ if message
+ opt = {}
+
+ event_channel = get_channel_field(object_kind) || channel
- opt = {}
+ opt[:channel] = event_channel if event_channel
+ opt[:username] = username if username
- opt[:channel] = get_channel_field(object_kind).presence || channel || default_channel
- opt[:username] = username if username
- notifier = Slack::Notifier.new(webhook, opt)
- notifier.ping(message.pretext, attachments: message.attachments, fallback: message.fallback)
+ notifier = Slack::Notifier.new(webhook, opt)
+ notifier.ping(message.pretext, attachments: message.attachments, fallback: message.fallback)
- true
+ true
+ else
+ false
+ end
end
def event_channel_names
@@ -71,10 +96,6 @@ def global_fields
fields.reject { |field| field[:name].end_with?('channel') }
end
- def default_channel
- raise NotImplementedError
- end
-
private
def get_message(object_kind, data)
@@ -103,7 +124,7 @@ def get_channel_field(event)
def build_event_channels
supported_events.reduce([]) do |channels, event|
- channels << { type: 'text', name: event_channel_name(event), placeholder: default_channel }
+ channels << { type: 'text', name: event_channel_name(event), placeholder: "#general" }
end
end
@@ -145,3 +166,11 @@ def should_pipeline_be_notified?(data)
end
end
end
+
+require "slack_service/issue_message"
+require "slack_service/push_message"
+require "slack_service/merge_message"
+require "slack_service/note_message"
+require "slack_service/build_message"
+require "slack_service/pipeline_message"
+require "slack_service/wiki_page_message"
diff --git a/app/models/project_services/chat_message/base_message.rb b/app/models/project_services/slack_service/base_message.rb
similarity index 96%
rename from app/models/project_services/chat_message/base_message.rb
rename to app/models/project_services/slack_service/base_message.rb
index a03605d01fb5e507addb059755e0df1fa7b430cf..f1182824687885584ead06828ff30ab53ebd3f28 100644
--- a/app/models/project_services/chat_message/base_message.rb
+++ b/app/models/project_services/slack_service/base_message.rb
@@ -1,6 +1,6 @@
require 'slack-notifier'
-module ChatMessage
+class SlackService
class BaseMessage
def initialize(params)
raise NotImplementedError
diff --git a/app/models/project_services/chat_message/build_message.rb b/app/models/project_services/slack_service/build_message.rb
similarity index 98%
rename from app/models/project_services/chat_message/build_message.rb
rename to app/models/project_services/slack_service/build_message.rb
index 53e35cb21bf0692e3e83ac1e7520209ea1d67bb3..0fca4267bad8eb3f9246c40cf09e24a823526d0a 100644
--- a/app/models/project_services/chat_message/build_message.rb
+++ b/app/models/project_services/slack_service/build_message.rb
@@ -1,4 +1,4 @@
-module ChatMessage
+class SlackService
class BuildMessage < BaseMessage
attr_reader :sha
attr_reader :ref_type
diff --git a/app/models/project_services/chat_message/issue_message.rb b/app/models/project_services/slack_service/issue_message.rb
similarity index 98%
rename from app/models/project_services/chat_message/issue_message.rb
rename to app/models/project_services/slack_service/issue_message.rb
index 14fd64e53321fe644ca98e2842e14e690c4ac6a8..cd87a79d0c607383f6c92b0c66cda190f095dcd4 100644
--- a/app/models/project_services/chat_message/issue_message.rb
+++ b/app/models/project_services/slack_service/issue_message.rb
@@ -1,4 +1,4 @@
-module ChatMessage
+class SlackService
class IssueMessage < BaseMessage
attr_reader :user_name
attr_reader :title
diff --git a/app/models/project_services/chat_message/merge_message.rb b/app/models/project_services/slack_service/merge_message.rb
similarity index 98%
rename from app/models/project_services/chat_message/merge_message.rb
rename to app/models/project_services/slack_service/merge_message.rb
index 31c0e71fb8c3bd9eb2660ba101aca8742f051b65..12ce47bf604fd4facd41b37d6c2de63d5892e8e7 100644
--- a/app/models/project_services/chat_message/merge_message.rb
+++ b/app/models/project_services/slack_service/merge_message.rb
@@ -1,4 +1,4 @@
-module ChatMessage
+class SlackService
class MergeMessage < BaseMessage
attr_reader :user_name
attr_reader :project_name
diff --git a/app/models/project_services/chat_message/note_message.rb b/app/models/project_services/slack_service/note_message.rb
similarity index 99%
rename from app/models/project_services/chat_message/note_message.rb
rename to app/models/project_services/slack_service/note_message.rb
index ca1d72070349c6b1a276fd053b114c71d01fdbfb..797c5937f097d8084d2bde57da39231448157862 100644
--- a/app/models/project_services/chat_message/note_message.rb
+++ b/app/models/project_services/slack_service/note_message.rb
@@ -1,4 +1,4 @@
-module ChatMessage
+class SlackService
class NoteMessage < BaseMessage
attr_reader :message
attr_reader :user_name
diff --git a/app/models/project_services/chat_message/pipeline_message.rb b/app/models/project_services/slack_service/pipeline_message.rb
similarity index 98%
rename from app/models/project_services/chat_message/pipeline_message.rb
rename to app/models/project_services/slack_service/pipeline_message.rb
index 210027565a8cfe09e04596f95236a180bf439786..b6355fc4171ce20f02b444a38c8b3f0d0e7bc238 100644
--- a/app/models/project_services/chat_message/pipeline_message.rb
+++ b/app/models/project_services/slack_service/pipeline_message.rb
@@ -1,4 +1,4 @@
-module ChatMessage
+class SlackService
class PipelineMessage < BaseMessage
attr_reader :ref_type, :ref, :status, :project_name, :project_url,
:user_name, :duration, :pipeline_id
diff --git a/app/models/project_services/chat_message/push_message.rb b/app/models/project_services/slack_service/push_message.rb
similarity index 99%
rename from app/models/project_services/chat_message/push_message.rb
rename to app/models/project_services/slack_service/push_message.rb
index 2d73b71ec376b11981912d7123a04a41e0dc684d..b26f3e9ddce9f392d6cc06e9446fb03a49fa1de3 100644
--- a/app/models/project_services/chat_message/push_message.rb
+++ b/app/models/project_services/slack_service/push_message.rb
@@ -1,4 +1,4 @@
-module ChatMessage
+class SlackService
class PushMessage < BaseMessage
attr_reader :after
attr_reader :before
diff --git a/app/models/project_services/chat_message/wiki_page_message.rb b/app/models/project_services/slack_service/wiki_page_message.rb
similarity index 98%
rename from app/models/project_services/chat_message/wiki_page_message.rb
rename to app/models/project_services/slack_service/wiki_page_message.rb
index 134083e4504d639a67df5c54873118d8f47d9049..160ca3ac11523fa32fe5c5a36f640e1050401c11 100644
--- a/app/models/project_services/chat_message/wiki_page_message.rb
+++ b/app/models/project_services/slack_service/wiki_page_message.rb
@@ -1,4 +1,4 @@
-module ChatMessage
+class SlackService
class WikiPageMessage < BaseMessage
attr_reader :user_name
attr_reader :title
diff --git a/app/models/service.rb b/app/models/service.rb
index d46a0e21796f2f8fd21184770735cd36d19a3723..9fe4b5f7e9f39a4f23dc240f5fa3d89044b5fff7 100644
--- a/app/models/service.rb
+++ b/app/models/service.rb
@@ -222,8 +222,7 @@ def self.available_services_names
pivotaltracker
pushover
redmine
- mattermost_notification
- slack_notification
+ slack
teamcity
]
end
diff --git a/changelogs/unreleased/issue_22269.yml b/changelogs/unreleased/issue_22269.yml
deleted file mode 100644
index 6b7164aff77d614e96d2375a437637bf8d97116e..0000000000000000000000000000000000000000
--- a/changelogs/unreleased/issue_22269.yml
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: Create mattermost service
-merge_request:
-author:
diff --git a/db/migrate/20141006143943_move_slack_service_to_webhook.rb b/db/migrate/20141006143943_move_slack_service_to_webhook.rb
index 42e88d6d6e3904102d8a89612823bb1a7eaced38..f373c664e1687a545e936b499b1344883bbeff97 100644
--- a/db/migrate/20141006143943_move_slack_service_to_webhook.rb
+++ b/db/migrate/20141006143943_move_slack_service_to_webhook.rb
@@ -1,11 +1,10 @@
# rubocop:disable all
class MoveSlackServiceToWebhook < ActiveRecord::Migration
-
DOWNTIME = true
DOWNTIME_REASON = 'Move old fields "token" and "subdomain" to one single field "webhook"'
def change
- SlackNotificationService.all.each do |slack_service|
+ SlackService.all.each do |slack_service|
if ["token", "subdomain"].all? { |property| slack_service.properties.key? property }
token = slack_service.properties['token']
subdomain = slack_service.properties['subdomain']
diff --git a/db/migrate/20161213172958_change_slack_service_to_slack_notification_service.rb b/db/migrate/20161213172958_change_slack_service_to_slack_notification_service.rb
deleted file mode 100644
index a7278d7b5a629e06bdaf474c550de806678aaa89..0000000000000000000000000000000000000000
--- a/db/migrate/20161213172958_change_slack_service_to_slack_notification_service.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-class ChangeSlackServiceToSlackNotificationService < ActiveRecord::Migration
- include Gitlab::Database::MigrationHelpers
-
- DOWNTIME = true
- DOWNTIME_REASON = 'Rename SlackService to SlackNotificationService'
-
- def up
- execute("UPDATE services SET type = 'SlackNotificationService' WHERE type = 'SlackService'")
- end
-
- def down
- execute("UPDATE services SET type = 'SlackService' WHERE type = 'SlackNotificationService'")
- end
-end
diff --git a/doc/api/services.md b/doc/api/services.md
index 7f6efc9756b19b46a53c31b31ed760ba62fd24de..6fe823059aa4d8e74c6586a5ba9221c6e84ca6dc 100644
--- a/doc/api/services.md
+++ b/doc/api/services.md
@@ -703,9 +703,9 @@ Get Redmine service settings for a project.
GET /projects/:id/services/redmine
```
-## Slack notifications
+## Slack
-Receive event notifications in Slack
+A team communication tool for the 21st century
### Create/Edit Slack service
@@ -737,40 +737,6 @@ Get Slack service settings for a project.
GET /projects/:id/services/slack
```
-## Mattermost notifications
-
-Receive event notifications in Mattermost
-
-### Create/Edit Mattermost notifications service
-
-Set Mattermost service for a project.
-
-```
-PUT /projects/:id/services/mattermost
-```
-
-Parameters:
-
-- `webhook` (**required**) - https://mattermost.example/hooks/1298aff...
-- `username` (optional) - username
-- `channel` (optional) - #channel
-
-### Delete Mattermost notifications service
-
-Delete Mattermost Notifications service for a project.
-
-```
-DELETE /projects/:id/services/mattermost
-```
-
-### Get Mattermost notifications service settings
-
-Get Mattermost notifications service settings for a project.
-
-```
-GET /projects/:id/services/mattermost
-```
-
## JetBrains TeamCity CI
A continuous integration and build server
diff --git a/doc/project_services/img/mattermost_configuration.png b/doc/project_services/img/mattermost_configuration.png
deleted file mode 100644
index 3c5ff5ee317ff47596210461924bdd635faeaab1..0000000000000000000000000000000000000000
Binary files a/doc/project_services/img/mattermost_configuration.png and /dev/null differ
diff --git a/doc/project_services/mattermost.md b/doc/project_services/mattermost.md
deleted file mode 100644
index fbc7dfeee6d0637cb01ad4fcada6af1cd675bc39..0000000000000000000000000000000000000000
--- a/doc/project_services/mattermost.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# Mattermost Notifications Service
-
-## On Mattermost
-
-To enable Mattermost integration you must create an incoming webhook integration:
-
-1. Sign in to your Mattermost instance
-1. Visit incoming webhooks, that will be something like: https://mattermost.example/your_team_name/integrations/incoming_webhooks/add
-1. Choose a display name, description and channel, those can be overridden on GitLab
-1. Save it, copy the **Webhook URL**, we'll need this later for GitLab.
-
-There might be some cases that Incoming Webhooks are blocked by admin, ask your mattermost admin to enable
-it on https://mattermost.example/admin_console/integrations/custom.
-
-Display name override is not enabled by default, you need to ask your admin to enable it on that same section.
-
-## On GitLab
-
-After you set up Mattermost, it's time to set up GitLab.
-
-Go to your project's **Settings > Services > Mattermost Notifications** and you will see a
-checkbox with the following events that can be triggered:
-
-- Push
-- Issue
-- Merge request
-- Note
-- Tag push
-- Build
-- Wiki page
-
-Bellow each of these event checkboxes, you will have an input field to insert
-which Mattermost channel you want to send that event message, with `#town-square`
-being the default. The hash sign is optional.
-
-At the end, fill in your Mattermost details:
-
-| Field | Description |
-| ----- | ----------- |
-| **Webhook** | The incoming webhooks which you have to setup on Mattermost, it will be something like: http://mattermost.example/hooks/5xo... |
-| **Username** | Optional username which can be on messages sent to Mattermost. Fill this in if you want to change the username of the bot. |
-| **Notify only broken builds** | If you choose to enable the **Build** event and you want to be only notified about failed builds. |
-
-
-
diff --git a/doc/project_services/project_services.md b/doc/project_services/project_services.md
index 0f398874b8fc6db774c9b8b8ca698bd83699ae46..a7bcd186a8c8356792283699282c40777c0b5d28 100644
--- a/doc/project_services/project_services.md
+++ b/doc/project_services/project_services.md
@@ -44,11 +44,10 @@ further configuration instructions and details. Contributions are welcome.
| JetBrains TeamCity CI | A continuous integration and build server |
| [Kubernetes](kubernetes.md) | A containerized deployment service |
| [Mattermost slash commands](mattermost_slash_commands.md) | Mattermost chat and ChatOps slash commands |
-| [Mattermost Notifications](mattermost.md) | Receive event notifications in Mattermost |
-| [Slack Notifications](slack.md) | Receive event notifications in Slack |
| PivotalTracker | Project Management Software (Source Commits Endpoint) |
| Pushover | Pushover makes it easy to get real-time notifications on your Android device, iPhone, iPad, and Desktop |
| [Redmine](redmine.md) | Redmine issue tracker |
+| [Slack](slack.md) | A team communication tool for the 21st century |
## Services Templates
diff --git a/doc/project_services/slack.md b/doc/project_services/slack.md
index 0b682b43810853a9fd1f868f4162563fa0a42b9e..3cfe77c9f851464350afc323ea9e4773e60b0ce9 100644
--- a/doc/project_services/slack.md
+++ b/doc/project_services/slack.md
@@ -1,4 +1,4 @@
-# Slack Notifications Service
+# Slack Service
## On Slack
@@ -15,7 +15,7 @@ Slack:
After you set up Slack, it's time to set up GitLab.
-Go to your project's **Settings > Services > Slack Notifications** and you will see a
+Go to your project's **Settings > Services > Slack** and you will see a
checkbox with the following events that can be triggered:
- Push
diff --git a/lib/api/services.rb b/lib/api/services.rb
index 24008aa7fb87aa51367434159a407c17b12a0d0e..9e983b9561ae96cff73b446403428d4ca12ed799 100644
--- a/lib/api/services.rb
+++ b/lib/api/services.rb
@@ -472,7 +472,7 @@ class Services < Grape::API
desc: 'The description of the tracker'
}
],
- 'slack-notification' => [
+ 'slack' => [
{
required: true,
name: :webhook,
@@ -492,14 +492,6 @@ class Services < Grape::API
desc: 'The channel name'
}
],
- 'mattermost-notification' => [
- {
- required: true,
- name: :webhook,
- type: String,
- desc: 'The Mattermost webhook. e.g. http://mattermost_host/hooks/...'
- }
- ],
'teamcity' => [
{
required: true,
diff --git a/spec/features/projects/import_export/test_project_export.tar.gz b/spec/features/projects/import_export/test_project_export.tar.gz
index d3165d07d7b9a37d532a6bf97c7d74de7d32098b..bfe59bdb90e75cb869cab6aa86cb9dc81ac5e225 100644
Binary files a/spec/features/projects/import_export/test_project_export.tar.gz and b/spec/features/projects/import_export/test_project_export.tar.gz differ
diff --git a/spec/features/projects/services/slack_service_spec.rb b/spec/features/projects/services/slack_service_spec.rb
index 320ed13a01dd3d277de9d3537ad91ad582529bce..16541f51d98cb9fc6e54b9ba6189db1929325efb 100644
--- a/spec/features/projects/services/slack_service_spec.rb
+++ b/spec/features/projects/services/slack_service_spec.rb
@@ -2,8 +2,8 @@
feature 'Projects > Slack service > Setup events', feature: true do
let(:user) { create(:user) }
- let(:service) { SlackNotificationService.new }
- let(:project) { create(:project, slack_notification_service: service) }
+ let(:service) { SlackService.new }
+ let(:project) { create(:project, slack_service: service) }
background do
service.fields
diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml
index 599023d45801615771d2dcb2ececdeade85a00f1..016b8b1eda1fc003d384ec41045cb41601803aab 100644
--- a/spec/lib/gitlab/import_export/all_models.yml
+++ b/spec/lib/gitlab/import_export/all_models.yml
@@ -145,8 +145,7 @@ project:
- assembla_service
- asana_service
- gemnasium_service
-- slack_notification_service
-- mattermost_notification_service
+- slack_service
- buildkite_service
- bamboo_service
- teamcity_service
diff --git a/spec/models/project_services/chat_notification_service_spec.rb b/spec/models/project_services/chat_notification_service_spec.rb
deleted file mode 100644
index c98e7ee14fdf76cd2bd7b694f52a07164ffc4bf3..0000000000000000000000000000000000000000
--- a/spec/models/project_services/chat_notification_service_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require 'spec_helper'
-
-describe ChatNotificationService, models: true do
- describe "Associations" do
- before do
- allow(subject).to receive(:activated?).and_return(true)
- end
-
- it { is_expected.to validate_presence_of :webhook }
- end
-end
diff --git a/spec/models/project_services/mattermost_notification_service_spec.rb b/spec/models/project_services/mattermost_notification_service_spec.rb
deleted file mode 100644
index c01e64b4c8e9ec3ddefb8401440936d9dcd3c041..0000000000000000000000000000000000000000
--- a/spec/models/project_services/mattermost_notification_service_spec.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-require 'spec_helper'
-
-describe MattermostNotificationService, models: true do
- it_behaves_like "slack or mattermost"
-end
diff --git a/spec/models/project_services/slack_notification_service_spec.rb b/spec/models/project_services/slack_notification_service_spec.rb
deleted file mode 100644
index 59ddddf745451a0cb049140aa09535011e9ac5a5..0000000000000000000000000000000000000000
--- a/spec/models/project_services/slack_notification_service_spec.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-require 'spec_helper'
-
-describe SlackNotificationService, models: true do
- it_behaves_like "slack or mattermost"
-end
diff --git a/spec/models/project_services/chat_message/build_message_spec.rb b/spec/models/project_services/slack_service/build_message_spec.rb
similarity index 94%
rename from spec/models/project_services/chat_message/build_message_spec.rb
rename to spec/models/project_services/slack_service/build_message_spec.rb
index b71d153f814b49f30919e6d7afec9311925a35e8..452f4e2782c80568f71bffc76f8deeaa6438b0ed 100644
--- a/spec/models/project_services/chat_message/build_message_spec.rb
+++ b/spec/models/project_services/slack_service/build_message_spec.rb
@@ -1,7 +1,7 @@
require 'spec_helper'
-describe ChatMessage::BuildMessage do
- subject { described_class.new(args) }
+describe SlackService::BuildMessage do
+ subject { SlackService::BuildMessage.new(args) }
let(:args) do
{
diff --git a/spec/models/project_services/chat_message/issue_message_spec.rb b/spec/models/project_services/slack_service/issue_message_spec.rb
similarity index 93%
rename from spec/models/project_services/chat_message/issue_message_spec.rb
rename to spec/models/project_services/slack_service/issue_message_spec.rb
index ebe0ead4408f8d7e16d2e33849ab26cf40f55ed3..98c36ec088dde79355b9a16943f194e68abbc285 100644
--- a/spec/models/project_services/chat_message/issue_message_spec.rb
+++ b/spec/models/project_services/slack_service/issue_message_spec.rb
@@ -1,7 +1,7 @@
require 'spec_helper'
-describe ChatMessage::IssueMessage, models: true do
- subject { described_class.new(args) }
+describe SlackService::IssueMessage, models: true do
+ subject { SlackService::IssueMessage.new(args) }
let(:args) do
{
diff --git a/spec/models/project_services/chat_message/merge_message_spec.rb b/spec/models/project_services/slack_service/merge_message_spec.rb
similarity index 94%
rename from spec/models/project_services/chat_message/merge_message_spec.rb
rename to spec/models/project_services/slack_service/merge_message_spec.rb
index 956e63197188b8a096c5b94bf5d7611c2cd2fd0b..e1c774cff644501b7a8298ecd19c601315f15a5e 100644
--- a/spec/models/project_services/chat_message/merge_message_spec.rb
+++ b/spec/models/project_services/slack_service/merge_message_spec.rb
@@ -1,7 +1,7 @@
require 'spec_helper'
-describe ChatMessage::MergeMessage, models: true do
- subject { described_class.new(args) }
+describe SlackService::MergeMessage, models: true do
+ subject { SlackService::MergeMessage.new(args) }
let(:args) do
{
diff --git a/spec/models/project_services/chat_message/note_message_spec.rb b/spec/models/project_services/slack_service/note_message_spec.rb
similarity index 92%
rename from spec/models/project_services/chat_message/note_message_spec.rb
rename to spec/models/project_services/slack_service/note_message_spec.rb
index 31936da40a221a8475933ed795764169fc8d6644..97f818125d33155cf1aea8f27098a97fa636e9a0 100644
--- a/spec/models/project_services/chat_message/note_message_spec.rb
+++ b/spec/models/project_services/slack_service/note_message_spec.rb
@@ -1,6 +1,6 @@
require 'spec_helper'
-describe ChatMessage::NoteMessage, models: true do
+describe SlackService::NoteMessage, models: true do
let(:color) { '#345' }
before do
@@ -36,7 +36,7 @@
end
it 'returns a message regarding notes on commits' do
- message = described_class.new(@args)
+ message = SlackService::NoteMessage.new(@args)
expect(message.pretext).to eq("test.user in : " \
"*Added a commit message*")
@@ -62,7 +62,7 @@
end
it 'returns a message regarding notes on a merge request' do
- message = described_class.new(@args)
+ message = SlackService::NoteMessage.new(@args)
expect(message.pretext).to eq("test.user in : " \
"*merge request title*")
@@ -88,7 +88,7 @@
end
it 'returns a message regarding notes on an issue' do
- message = described_class.new(@args)
+ message = SlackService::NoteMessage.new(@args)
expect(message.pretext).to eq(
"test.user in : " \
@@ -114,7 +114,7 @@
end
it 'returns a message regarding notes on a project snippet' do
- message = described_class.new(@args)
+ message = SlackService::NoteMessage.new(@args)
expect(message.pretext).to eq("test.user in : " \
"*snippet title*")
diff --git a/spec/models/project_services/chat_message/pipeline_message_spec.rb b/spec/models/project_services/slack_service/pipeline_message_spec.rb
similarity index 94%
rename from spec/models/project_services/chat_message/pipeline_message_spec.rb
rename to spec/models/project_services/slack_service/pipeline_message_spec.rb
index 532a5ecd8f519c86c31dc67a6e5f4eef78747a7e..4098500122f037867661722617e8b6f548aed4ec 100644
--- a/spec/models/project_services/chat_message/pipeline_message_spec.rb
+++ b/spec/models/project_services/slack_service/pipeline_message_spec.rb
@@ -1,8 +1,7 @@
require 'spec_helper'
-describe ChatMessage::PipelineMessage do
- subject { described_class.new(args) }
-
+describe SlackService::PipelineMessage do
+ subject { SlackService::PipelineMessage.new(args) }
let(:user) { { name: 'hacker' } }
let(:args) do
diff --git a/spec/models/project_services/chat_message/push_message_spec.rb b/spec/models/project_services/slack_service/push_message_spec.rb
similarity index 95%
rename from spec/models/project_services/chat_message/push_message_spec.rb
rename to spec/models/project_services/slack_service/push_message_spec.rb
index b781c4505db7b29e526142203bedaa1fb118712f..17cd05e24f1291e4765fc70ae839f11e0da82c6f 100644
--- a/spec/models/project_services/chat_message/push_message_spec.rb
+++ b/spec/models/project_services/slack_service/push_message_spec.rb
@@ -1,7 +1,7 @@
require 'spec_helper'
-describe ChatMessage::PushMessage, models: true do
- subject { described_class.new(args) }
+describe SlackService::PushMessage, models: true do
+ subject { SlackService::PushMessage.new(args) }
let(:args) do
{
diff --git a/spec/models/project_services/chat_message/wiki_page_message_spec.rb b/spec/models/project_services/slack_service/wiki_page_message_spec.rb
similarity index 97%
rename from spec/models/project_services/chat_message/wiki_page_message_spec.rb
rename to spec/models/project_services/slack_service/wiki_page_message_spec.rb
index 94c04dc08654bb46196a820c91ce1fdfa2fa38d6..093911598b009e29a2a606c2231f0968e5cd82e1 100644
--- a/spec/models/project_services/chat_message/wiki_page_message_spec.rb
+++ b/spec/models/project_services/slack_service/wiki_page_message_spec.rb
@@ -1,6 +1,6 @@
require 'spec_helper'
-describe ChatMessage::WikiPageMessage, models: true do
+describe SlackService::WikiPageMessage, models: true do
subject { described_class.new(args) }
let(:args) do
diff --git a/spec/support/slack_mattermost_shared_examples.rb b/spec/models/project_services/slack_service_spec.rb
similarity index 76%
rename from spec/support/slack_mattermost_shared_examples.rb
rename to spec/models/project_services/slack_service_spec.rb
index 56d4965f74df71a6cf46510e0cf40ee2900e95f0..c07a70a806965975c637e5a877b7225811c95a71 100644
--- a/spec/support/slack_mattermost_shared_examples.rb
+++ b/spec/models/project_services/slack_service_spec.rb
@@ -1,7 +1,7 @@
-Dir[Rails.root.join("app/models/project_services/chat_message/*.rb")].each { |f| require f }
+require 'spec_helper'
-RSpec.shared_examples 'slack or mattermost' do
- let(:chat_service) { described_class.new }
+describe SlackService, models: true do
+ let(:slack) { SlackService.new }
let(:webhook_url) { 'https://example.gitlab.com/' }
describe "Associations" do
@@ -24,7 +24,7 @@
end
end
- describe "#execute" do
+ describe "Execute" do
let(:user) { create(:user) }
let(:project) { create(:project) }
let(:username) { 'slack_username' }
@@ -35,7 +35,7 @@
end
before do
- allow(chat_service).to receive_messages(
+ allow(slack).to receive_messages(
project: project,
project_id: project.id,
service_hook: true,
@@ -77,55 +77,54 @@
@wiki_page_sample_data = wiki_page_service.hook_data(@wiki_page, 'create')
end
- it "calls Slack/Mattermost API for push events" do
- chat_service.execute(push_sample_data)
+ it "calls Slack API for push events" do
+ slack.execute(push_sample_data)
expect(WebMock).to have_requested(:post, webhook_url).once
end
- it "calls Slack/Mattermost API for issue events" do
- chat_service.execute(@issues_sample_data)
+ it "calls Slack API for issue events" do
+ slack.execute(@issues_sample_data)
expect(WebMock).to have_requested(:post, webhook_url).once
end
- it "calls Slack/Mattermost API for merge requests events" do
- chat_service.execute(@merge_sample_data)
+ it "calls Slack API for merge requests events" do
+ slack.execute(@merge_sample_data)
expect(WebMock).to have_requested(:post, webhook_url).once
end
- it "calls Slack/Mattermost API for wiki page events" do
- chat_service.execute(@wiki_page_sample_data)
+ it "calls Slack API for wiki page events" do
+ slack.execute(@wiki_page_sample_data)
expect(WebMock).to have_requested(:post, webhook_url).once
end
it 'uses the username as an option for slack when configured' do
- allow(chat_service).to receive(:username).and_return(username)
-
+ allow(slack).to receive(:username).and_return(username)
expect(Slack::Notifier).to receive(:new).
- with(webhook_url, username: username, channel: chat_service.default_channel).
+ with(webhook_url, username: username).
and_return(
double(:slack_service).as_null_object
)
- chat_service.execute(push_sample_data)
+ slack.execute(push_sample_data)
end
it 'uses the channel as an option when it is configured' do
- allow(chat_service).to receive(:channel).and_return(channel)
+ allow(slack).to receive(:channel).and_return(channel)
expect(Slack::Notifier).to receive(:new).
with(webhook_url, channel: channel).
and_return(
double(:slack_service).as_null_object
)
- chat_service.execute(push_sample_data)
+ slack.execute(push_sample_data)
end
context "event channels" do
it "uses the right channel for push event" do
- chat_service.update_attributes(push_channel: "random")
+ slack.update_attributes(push_channel: "random")
expect(Slack::Notifier).to receive(:new).
with(webhook_url, channel: "random").
@@ -133,11 +132,11 @@
double(:slack_service).as_null_object
)
- chat_service.execute(push_sample_data)
+ slack.execute(push_sample_data)
end
it "uses the right channel for merge request event" do
- chat_service.update_attributes(merge_request_channel: "random")
+ slack.update_attributes(merge_request_channel: "random")
expect(Slack::Notifier).to receive(:new).
with(webhook_url, channel: "random").
@@ -145,11 +144,11 @@
double(:slack_service).as_null_object
)
- chat_service.execute(@merge_sample_data)
+ slack.execute(@merge_sample_data)
end
it "uses the right channel for issue event" do
- chat_service.update_attributes(issue_channel: "random")
+ slack.update_attributes(issue_channel: "random")
expect(Slack::Notifier).to receive(:new).
with(webhook_url, channel: "random").
@@ -157,11 +156,11 @@
double(:slack_service).as_null_object
)
- chat_service.execute(@issues_sample_data)
+ slack.execute(@issues_sample_data)
end
it "uses the right channel for wiki event" do
- chat_service.update_attributes(wiki_page_channel: "random")
+ slack.update_attributes(wiki_page_channel: "random")
expect(Slack::Notifier).to receive(:new).
with(webhook_url, channel: "random").
@@ -169,7 +168,7 @@
double(:slack_service).as_null_object
)
- chat_service.execute(@wiki_page_sample_data)
+ slack.execute(@wiki_page_sample_data)
end
context "note event" do
@@ -178,7 +177,7 @@
end
it "uses the right channel" do
- chat_service.update_attributes(note_channel: "random")
+ slack.update_attributes(note_channel: "random")
note_data = Gitlab::DataBuilder::Note.build(issue_note, user)
@@ -188,7 +187,7 @@
double(:slack_service).as_null_object
)
- chat_service.execute(note_data)
+ slack.execute(note_data)
end
end
end
@@ -199,7 +198,7 @@
let(:project) { create(:project, creator_id: user.id) }
before do
- allow(chat_service).to receive_messages(
+ allow(slack).to receive_messages(
project: project,
project_id: project.id,
service_hook: true,
@@ -217,9 +216,9 @@
note: 'a comment on a commit')
end
- it "calls Slack/Mattermost API for commit comment events" do
+ it "calls Slack API for commit comment events" do
data = Gitlab::DataBuilder::Note.build(commit_note, user)
- chat_service.execute(data)
+ slack.execute(data)
expect(WebMock).to have_requested(:post, webhook_url).once
end
@@ -233,7 +232,7 @@
it "calls Slack API for merge request comment events" do
data = Gitlab::DataBuilder::Note.build(merge_request_note, user)
- chat_service.execute(data)
+ slack.execute(data)
expect(WebMock).to have_requested(:post, webhook_url).once
end
@@ -246,7 +245,7 @@
it "calls Slack API for issue comment events" do
data = Gitlab::DataBuilder::Note.build(issue_note, user)
- chat_service.execute(data)
+ slack.execute(data)
expect(WebMock).to have_requested(:post, webhook_url).once
end
@@ -260,7 +259,7 @@
it "calls Slack API for snippet comment events" do
data = Gitlab::DataBuilder::Note.build(snippet_note, user)
- chat_service.execute(data)
+ slack.execute(data)
expect(WebMock).to have_requested(:post, webhook_url).once
end
@@ -278,21 +277,21 @@
end
before do
- allow(chat_service).to receive_messages(
+ allow(slack).to receive_messages(
project: project,
service_hook: true,
webhook: webhook_url
)
end
- shared_examples 'call Slack/Mattermost API' do
+ shared_examples 'call Slack API' do
before do
WebMock.stub_request(:post, webhook_url)
end
- it 'calls Slack/Mattermost API for pipeline events' do
+ it 'calls Slack API for pipeline events' do
data = Gitlab::DataBuilder::Pipeline.build(pipeline)
- chat_service.execute(data)
+ slack.execute(data)
expect(WebMock).to have_requested(:post, webhook_url).once
end
@@ -301,16 +300,16 @@
context 'with failed pipeline' do
let(:status) { 'failed' }
- it_behaves_like 'call Slack/Mattermost API'
+ it_behaves_like 'call Slack API'
end
context 'with succeeded pipeline' do
let(:status) { 'success' }
context 'with default to notify_only_broken_pipelines' do
- it 'does not call Slack/Mattermost API for pipeline events' do
+ it 'does not call Slack API for pipeline events' do
data = Gitlab::DataBuilder::Pipeline.build(pipeline)
- result = chat_service.execute(data)
+ result = slack.execute(data)
expect(result).to be_falsy
end
@@ -318,10 +317,10 @@
context 'with setting notify_only_broken_pipelines to false' do
before do
- chat_service.notify_only_broken_pipelines = false
+ slack.notify_only_broken_pipelines = false
end
- it_behaves_like 'call Slack/Mattermost API'
+ it_behaves_like 'call Slack API'
end
end
end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 894ba6a718de2ab50c173e1294f24e319500c219..09f98c0ec4eeb203afc63c9dc270b5135a46b18c 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -22,8 +22,7 @@
it { is_expected.to have_many(:protected_branches).dependent(:destroy) }
it { is_expected.to have_many(:chat_services) }
it { is_expected.to have_one(:forked_project_link).dependent(:destroy) }
- it { is_expected.to have_one(:slack_notification_service).dependent(:destroy) }
- it { is_expected.to have_one(:mattermost_notification_service).dependent(:destroy) }
+ it { is_expected.to have_one(:slack_service).dependent(:destroy) }
it { is_expected.to have_one(:pushover_service).dependent(:destroy) }
it { is_expected.to have_one(:asana_service).dependent(:destroy) }
it { is_expected.to have_many(:boards).dependent(:destroy) }