Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
2009279a
Commit
2009279a
authored
Sep 12, 2019
by
Balasankar "Balu" C
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Make specs DRY
Signed-off-by:
Balasankar "Balu" C
<
balasankar@gitlab.com
>
parent
399eb9f1
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
289 additions
and
721 deletions
+289
-721
spec/models/project_services/mattermost_service_spec.rb
spec/models/project_services/mattermost_service_spec.rb
+1
-1
spec/models/project_services/microsoft_teams_service_spec.rb
spec/models/project_services/microsoft_teams_service_spec.rb
+26
-86
spec/models/project_services/pipelines_email_service_spec.rb
spec/models/project_services/pipelines_email_service_spec.rb
+29
-123
spec/models/project_services/slack_service_spec.rb
spec/models/project_services/slack_service_spec.rb
+1
-1
spec/support/shared_examples/models/chat_service_shared_examples.rb
...rt/shared_examples/models/chat_service_shared_examples.rb
+75
-155
spec/support/shared_examples/slack_mattermost_notifications_shared_examples.rb
...xamples/slack_mattermost_notifications_shared_examples.rb
+157
-355
No files found.
spec/models/project_services/mattermost_service_spec.rb
View file @
2009279a
...
...
@@ -3,5 +3,5 @@
require
'spec_helper'
describe
MattermostService
do
it_behaves_like
"slack or mattermost notifications"
it_behaves_like
"slack or mattermost notifications"
,
"Mattermost"
end
spec/models/project_services/microsoft_teams_service_spec.rb
View file @
2009279a
...
...
@@ -226,9 +226,10 @@ describe MicrosoftTeamsService do
)
end
shared_examples
'call Microsoft Teams API'
do
shared_examples
'call Microsoft Teams API'
do
|
branches_to_be_notified:
nil
|
before
do
WebMock
.
stub_request
(
:post
,
webhook_url
)
chat_service
.
branches_to_be_notified
=
branches_to_be_notified
if
branches_to_be_notified
end
it
'calls Microsoft Teams API for pipeline events'
do
...
...
@@ -245,6 +246,18 @@ describe MicrosoftTeamsService do
end
end
shared_examples
'does not call Microsoft Teams API'
do
|
branches_to_be_notified:
nil
|
before
do
chat_service
.
branches_to_be_notified
=
branches_to_be_notified
if
branches_to_be_notified
end
it
'does not call Microsoft Teams API for pipeline events'
do
data
=
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
result
=
chat_service
.
execute
(
data
)
expect
(
result
).
to
be_falsy
end
end
context
'with failed pipeline'
do
let
(
:status
)
{
'failed'
}
...
...
@@ -278,40 +291,19 @@ describe MicrosoftTeamsService do
end
context
'only notify for the default branch'
do
before
do
chat_service
.
branches_to_be_notified
=
"default"
end
it_behaves_like
'call Microsoft Teams API'
it_behaves_like
'call Microsoft Teams API'
,
branches_to_be_notified:
"default"
end
context
'notify for only protected branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"protected"
end
it
'does not call the Microsoft Teams API for pipeline events'
do
data
=
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
result
=
chat_service
.
execute
(
data
)
expect
(
result
).
to
be_falsy
end
it_behaves_like
'does not call Microsoft Teams API'
,
branches_to_be_notified:
"protected"
end
context
'notify for only default and protected branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"default_and_protected"
end
it_behaves_like
'call Microsoft Teams API'
it_behaves_like
'call Microsoft Teams API'
,
branches_to_be_notified:
"default_and_protected"
end
context
'notify for all branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"all"
end
it_behaves_like
'call Microsoft Teams API'
it_behaves_like
'call Microsoft Teams API'
,
branches_to_be_notified:
"all"
end
end
...
...
@@ -325,40 +317,19 @@ describe MicrosoftTeamsService do
end
context
'only notify for the default branch'
do
before
do
chat_service
.
branches_to_be_notified
=
"default"
end
it
'does not call the Microsoft Teams API for pipeline events'
do
data
=
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
result
=
chat_service
.
execute
(
data
)
expect
(
result
).
to
be_falsy
end
it_behaves_like
'does not call Microsoft Teams API'
,
branches_to_be_notified:
"default"
end
context
'notify for only protected branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"protected"
end
it_behaves_like
'call Microsoft Teams API'
it_behaves_like
'call Microsoft Teams API'
,
branches_to_be_notified:
"protected"
end
context
'notify for only default and protected branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"default_and_protected"
end
it_behaves_like
'call Microsoft Teams API'
it_behaves_like
'call Microsoft Teams API'
,
branches_to_be_notified:
"default_and_protected"
end
context
'notify for all branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"all"
end
it_behaves_like
'call Microsoft Teams API'
it_behaves_like
'call Microsoft Teams API'
,
branches_to_be_notified:
"all"
end
end
...
...
@@ -368,50 +339,19 @@ describe MicrosoftTeamsService do
end
context
'only notify for the default branch'
do
before
do
chat_service
.
branches_to_be_notified
=
"default"
end
it
'does not call the Microsoft Teams API for pipeline events'
do
data
=
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
result
=
chat_service
.
execute
(
data
)
expect
(
result
).
to
be_falsy
end
it_behaves_like
'does not call Microsoft Teams API'
,
branches_to_be_notified:
"default"
end
context
'notify for only protected branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"protected"
end
it
'does not call the Microsoft Teams API for pipeline events'
do
data
=
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
result
=
chat_service
.
execute
(
data
)
expect
(
result
).
to
be_falsy
end
it_behaves_like
'does not call Microsoft Teams API'
,
branches_to_be_notified:
"protected"
end
context
'notify for only default and protected branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"default_and_protected"
end
it
'does not call the Microsoft Teams API for pipeline events'
do
data
=
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
result
=
chat_service
.
execute
(
data
)
expect
(
result
).
to
be_falsy
end
it_behaves_like
'does not call Microsoft Teams API'
,
branches_to_be_notified:
"default_and_protected"
end
context
'notify for all branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"all"
end
it_behaves_like
'call Microsoft Teams API'
it_behaves_like
'call Microsoft Teams API'
,
branches_to_be_notified:
"all"
end
end
end
...
...
spec/models/project_services/pipelines_email_service_spec.rb
View file @
2009279a
...
...
@@ -53,9 +53,10 @@ describe PipelinesEmailService, :mailer do
end
end
shared_examples
'sending email'
do
shared_examples
'sending email'
do
|
branches_to_be_notified:
nil
|
before
do
subject
.
recipients
=
recipients
subject
.
branches_to_be_notified
=
branches_to_be_notified
if
branches_to_be_notified
perform_enqueued_jobs
do
run
...
...
@@ -69,9 +70,10 @@ describe PipelinesEmailService, :mailer do
end
end
shared_examples
'not sending email'
do
shared_examples
'not sending email'
do
|
branches_to_be_notified:
nil
|
before
do
subject
.
recipients
=
recipients
subject
.
branches_to_be_notified
=
branches_to_be_notified
if
branches_to_be_notified
perform_enqueued_jobs
do
run
...
...
@@ -109,35 +111,19 @@ describe PipelinesEmailService, :mailer do
end
context
'notifications are enabled only for default branch'
do
before
do
subject
.
branches_to_be_notified
=
"default"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"default"
end
context
'notifications are enabled only for protected branch'
do
before
do
subject
.
branches_to_be_notified
=
"protected"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"protected"
end
context
'notifications are enabled only for default and protected branches '
do
before
do
subject
.
branches_to_be_notified
=
"default_and_protected"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"default_and_protected"
end
context
'notifications are enabled only for all branches'
do
before
do
subject
.
branches_to_be_notified
=
"all"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"all"
end
end
...
...
@@ -149,35 +135,19 @@ describe PipelinesEmailService, :mailer do
end
context
'notifications are enabled only for default branch'
do
before
do
subject
.
branches_to_be_notified
=
"default"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"default"
end
context
'notifications are enabled only for protected branch'
do
before
do
subject
.
branches_to_be_notified
=
"protected"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"protected"
end
context
'notifications are enabled only for default and protected branches '
do
before
do
subject
.
branches_to_be_notified
=
"default_and_protected"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"default_and_protected"
end
context
'notifications are enabled only for all branches'
do
before
do
subject
.
branches_to_be_notified
=
"all"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"all"
end
end
...
...
@@ -188,35 +158,19 @@ describe PipelinesEmailService, :mailer do
end
context
'notifications are enabled only for default branch'
do
before
do
subject
.
branches_to_be_notified
=
"default"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"default"
end
context
'notifications are enabled only for protected branch'
do
before
do
subject
.
branches_to_be_notified
=
"protected"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"protected"
end
context
'notifications are enabled only for default and protected branches '
do
before
do
subject
.
branches_to_be_notified
=
"default_and_protected"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"default_and_protected"
end
context
'notifications are enabled only for all branches'
do
before
do
subject
.
branches_to_be_notified
=
"all"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"all"
end
end
end
...
...
@@ -265,42 +219,26 @@ describe PipelinesEmailService, :mailer do
end
context
'when the pipeline failed'
do
context
'on
a
default branch'
do
context
'on default branch'
do
before
do
data
[
:object_attributes
][
:ref
]
=
project
.
default_branch
pipeline
.
update
(
ref:
project
.
default_branch
)
end
context
'notifications are enabled only for default branch'
do
before
do
subject
.
branches_to_be_notified
=
"default"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"default"
end
context
'notifications are enabled only for protected branch'
do
before
do
subject
.
branches_to_be_notified
=
"protected"
end
it_behaves_like
'not sending email'
it_behaves_like
'not sending email'
,
branches_to_be_notified:
"protected"
end
context
'notifications are enabled only for default and protected branches '
do
before
do
subject
.
branches_to_be_notified
=
"default_and_protected"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"default_and_protected"
end
context
'notifications are enabled only for all branches'
do
before
do
subject
.
branches_to_be_notified
=
"all"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"all"
end
end
...
...
@@ -312,35 +250,19 @@ describe PipelinesEmailService, :mailer do
end
context
'notifications are enabled only for default branch'
do
before
do
subject
.
branches_to_be_notified
=
"default"
end
it_behaves_like
'not sending email'
it_behaves_like
'not sending email'
,
branches_to_be_notified:
"default"
end
context
'notifications are enabled only for protected branch'
do
before
do
subject
.
branches_to_be_notified
=
"protected"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"protected"
end
context
'notifications are enabled only for default and protected branches '
do
before
do
subject
.
branches_to_be_notified
=
"default_and_protected"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"default_and_protected"
end
context
'notifications are enabled only for all branches'
do
before
do
subject
.
branches_to_be_notified
=
"all"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"all"
end
end
...
...
@@ -351,35 +273,19 @@ describe PipelinesEmailService, :mailer do
end
context
'notifications are enabled only for default branch'
do
before
do
subject
.
branches_to_be_notified
=
"default"
end
it_behaves_like
'not sending email'
it_behaves_like
'not sending email'
,
branches_to_be_notified:
"default"
end
context
'notifications are enabled only for protected branch'
do
before
do
subject
.
branches_to_be_notified
=
"protected"
end
it_behaves_like
'not sending email'
it_behaves_like
'not sending email'
,
branches_to_be_notified:
"protected"
end
context
'notifications are enabled only for default and protected branches '
do
before
do
subject
.
branches_to_be_notified
=
"default_and_protected"
end
it_behaves_like
'not sending email'
it_behaves_like
'not sending email'
,
branches_to_be_notified:
"default_and_protected"
end
context
'notifications are enabled only for all branches'
do
before
do
subject
.
branches_to_be_notified
=
"all"
end
it_behaves_like
'sending email'
it_behaves_like
'sending email'
,
branches_to_be_notified:
"all"
end
end
end
...
...
spec/models/project_services/slack_service_spec.rb
View file @
2009279a
...
...
@@ -3,5 +3,5 @@
require
'spec_helper'
describe
SlackService
do
it_behaves_like
"slack or mattermost notifications"
it_behaves_like
"slack or mattermost notifications"
,
"Slack"
end
spec/support/shared_examples/models/chat_service_shared_examples.rb
View file @
2009279a
...
...
@@ -49,7 +49,11 @@ shared_examples_for "chat service" do |service_name|
WebMock
.
stub_request
(
:post
,
webhook_url
)
end
shared_examples
"
#{
service_name
}
service"
do
shared_examples
"triggered
#{
service_name
}
service"
do
|
branches_to_be_notified:
nil
|
before
do
subject
.
branches_to_be_notified
=
branches_to_be_notified
if
branches_to_be_notified
end
it
"calls
#{
service_name
}
API"
do
subject
.
execute
(
sample_data
)
...
...
@@ -57,12 +61,24 @@ shared_examples_for "chat service" do |service_name|
end
end
shared_examples
"untriggered
#{
service_name
}
service"
do
|
branches_to_be_notified:
nil
|
before
do
subject
.
branches_to_be_notified
=
branches_to_be_notified
if
branches_to_be_notified
end
it
"does not call
#{
service_name
}
API"
do
result
=
subject
.
execute
(
sample_data
)
expect
(
result
).
to
be_falsy
end
end
context
"with push events"
do
let
(
:sample_data
)
do
Gitlab
::
DataBuilder
::
Push
.
build_sample
(
project
,
user
)
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"
triggered
#{
service_name
}
service"
it
"specifies the webhook when it is configured"
do
expect
(
client
).
to
receive
(
:new
).
with
(
client_arguments
).
and_return
(
double
(
:chat_service
).
as_null_object
)
...
...
@@ -76,39 +92,19 @@ shared_examples_for "chat service" do |service_name|
end
context
"when only default branch are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"default"
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"triggered
#{
service_name
}
service"
,
branches_to_be_notified:
"default"
end
context
"when only protected branches are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"protected"
end
it
"does not call the Discord Webhooks API"
do
result
=
subject
.
execute
(
sample_data
)
expect
(
result
).
to
be_falsy
end
it_behaves_like
"untriggered
#{
service_name
}
service"
,
branches_to_be_notified:
"protected"
end
context
"when default and protected branches are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"default_and_protected"
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"triggered
#{
service_name
}
service"
,
branches_to_be_notified:
"default_and_protected"
end
context
"when all branches are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"all"
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"triggered
#{
service_name
}
service"
,
branches_to_be_notified:
"all"
end
end
...
...
@@ -122,39 +118,19 @@ shared_examples_for "chat service" do |service_name|
end
context
"when only default branch are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"default"
end
it
"does not call the Discord Webhooks API"
do
result
=
subject
.
execute
(
sample_data
)
expect
(
result
).
to
be_falsy
end
it_behaves_like
"untriggered
#{
service_name
}
service"
,
branches_to_be_notified:
"default"
end
context
"when only protected branches are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"protected"
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"triggered
#{
service_name
}
service"
,
branches_to_be_notified:
"protected"
end
context
"when default and protected branches are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"default_and_protected"
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"triggered
#{
service_name
}
service"
,
branches_to_be_notified:
"default_and_protected"
end
context
"when all branches are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"all"
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"triggered
#{
service_name
}
service"
,
branches_to_be_notified:
"all"
end
end
...
...
@@ -164,47 +140,19 @@ shared_examples_for "chat service" do |service_name|
end
context
"when only default branch are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"default"
end
it
"does not call the Discord Webhooks API"
do
result
=
subject
.
execute
(
sample_data
)
expect
(
result
).
to
be_falsy
end
it_behaves_like
"untriggered
#{
service_name
}
service"
,
branches_to_be_notified:
"default"
end
context
"when only protected branches are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"protected"
end
it
"does not call the Discord Webhooks API"
do
result
=
subject
.
execute
(
sample_data
)
expect
(
result
).
to
be_falsy
end
it_behaves_like
"untriggered
#{
service_name
}
service"
,
branches_to_be_notified:
"protected"
end
context
"when default and protected branches are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"default_and_protected"
end
it
"does not call the Discord Webhooks API"
do
result
=
subject
.
execute
(
sample_data
)
expect
(
result
).
to
be_falsy
end
it_behaves_like
"untriggered
#{
service_name
}
service"
,
branches_to_be_notified:
"default_and_protected"
end
context
"when all branches are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"all"
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"triggered
#{
service_name
}
service"
,
branches_to_be_notified:
"all"
end
end
end
...
...
@@ -217,7 +165,7 @@ shared_examples_for "chat service" do |service_name|
service
.
hook_data
(
issue
,
"open"
)
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"
triggered
#{
service_name
}
service"
end
context
"with merge events"
do
...
...
@@ -240,7 +188,7 @@ shared_examples_for "chat service" do |service_name|
project
.
add_developer
(
user
)
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"
triggered
#{
service_name
}
service"
end
context
"with wiki page events"
do
...
...
@@ -255,7 +203,7 @@ shared_examples_for "chat service" do |service_name|
let
(
:wiki_page
)
{
create
(
:wiki_page
,
wiki:
project
.
wiki
,
attrs:
opts
)
}
let
(
:sample_data
)
{
Gitlab
::
DataBuilder
::
WikiPage
.
build
(
wiki_page
,
user
,
"create"
)
}
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"
triggered
#{
service_name
}
service"
end
context
"with note events"
do
...
...
@@ -270,7 +218,7 @@ shared_examples_for "chat service" do |service_name|
note:
"a comment on a commit"
)
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"
triggered
#{
service_name
}
service"
end
context
"with merge request comment"
do
...
...
@@ -278,7 +226,7 @@ shared_examples_for "chat service" do |service_name|
create
(
:note_on_merge_request
,
project:
project
,
note:
"merge request note"
)
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"
triggered
#{
service_name
}
service"
end
context
"with issue comment"
do
...
...
@@ -286,7 +234,7 @@ shared_examples_for "chat service" do |service_name|
create
(
:note_on_issue
,
project:
project
,
note:
"issue note"
)
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"
triggered
#{
service_name
}
service"
end
context
"with snippet comment"
do
...
...
@@ -294,7 +242,7 @@ shared_examples_for "chat service" do |service_name|
create
(
:note_on_project_snippet
,
project:
project
,
note:
"snippet note"
)
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"
triggered
#{
service_name
}
service"
end
end
...
...
@@ -309,14 +257,14 @@ shared_examples_for "chat service" do |service_name|
context
"with failed pipeline"
do
let
(
:status
)
{
"failed"
}
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"
triggered
#{
service_name
}
service"
end
context
"with succeeded pipeline"
do
let
(
:status
)
{
"success"
}
context
"with default notify_only_broken_pipelines"
do
it
"does not call
Discord Webhooks
API"
do
it
"does not call
#{
service_name
}
API"
do
result
=
subject
.
execute
(
sample_data
)
expect
(
result
).
to
be_falsy
...
...
@@ -328,105 +276,77 @@ shared_examples_for "chat service" do |service_name|
subject
.
notify_only_broken_pipelines
=
false
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"triggered
#{
service_name
}
service"
end
end
context
"with default branch"
do
let
(
:sample_data
)
do
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
project
.
default_branch
)
end
context
"when only default branch are to be notified"
do
it_behaves_like
"triggered
#{
service_name
}
service"
,
branches_to_be_notified:
"default"
end
context
"when only protected branches are to be notified"
do
it_behaves_like
"untriggered
#{
service_name
}
service"
,
branches_to_be_notified:
"protected"
end
context
"when default and protected branches are to be notified"
do
it_behaves_like
"triggered
#{
service_name
}
service"
,
branches_to_be_notified:
"default_and_protected"
end
context
"when all branches are to be notified"
do
it_behaves_like
"triggered
#{
service_name
}
service"
,
branches_to_be_notified:
"all"
end
end
context
"with protected branch"
do
before
do
create
(
:protected_branch
,
project:
project
,
name:
'a-protected-branch'
)
create
(
:protected_branch
,
project:
project
,
name:
"a-protected-branch"
)
end
let
(
:pipeline
)
do
create
(
:ci_pipeline
,
:failed
,
project:
project
,
sha:
project
.
commit
.
sha
,
ref:
'a-protected-branch'
)
let
(
:sample_data
)
do
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
"a-protected-branch"
)
end
context
"when only default branch are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"default"
end
it
"does not call the Discord Webhooks API"
do
result
=
subject
.
execute
(
sample_data
)
expect
(
result
).
to
be_falsy
end
it_behaves_like
"untriggered
#{
service_name
}
service"
,
branches_to_be_notified:
"default"
end
context
"when only protected branches are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"protected"
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"triggered
#{
service_name
}
service"
,
branches_to_be_notified:
"protected"
end
context
"when default and protected branches are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"default_and_protected"
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"triggered
#{
service_name
}
service"
,
branches_to_be_notified:
"default_and_protected"
end
context
"when all branches are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"all"
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"triggered
#{
service_name
}
service"
,
branches_to_be_notified:
"all"
end
end
context
"with neither default nor protected branch"
do
let
(
:pipeline
)
do
create
(
:ci_pipeline
,
:failed
,
project:
project
,
sha:
project
.
commit
.
sha
,
ref:
"a-random-branch"
)
let
(
:sample_data
)
do
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
"a-random-branch"
)
end
context
"when only default branch are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"default"
end
it
"does not call the Discord Webhooks API"
do
result
=
subject
.
execute
(
sample_data
)
expect
(
result
).
to
be_falsy
end
it_behaves_like
"untriggered
#{
service_name
}
service"
,
branches_to_be_notified:
"default"
end
context
"when only protected branches are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"protected"
end
it
"does not call the Discord Webhooks API"
do
result
=
subject
.
execute
(
sample_data
)
expect
(
result
).
to
be_falsy
end
it_behaves_like
"untriggered
#{
service_name
}
service"
,
branches_to_be_notified:
"protected"
end
context
"when default and protected branches are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"default_and_protected"
end
it
"does not call the Discord Webhooks API"
do
result
=
subject
.
execute
(
sample_data
)
expect
(
result
).
to
be_falsy
end
it_behaves_like
"untriggered
#{
service_name
}
service"
,
branches_to_be_notified:
"default_and_protected"
end
context
"when all branches are to be notified"
do
before
do
subject
.
branches_to_be_notified
=
"all"
end
it_behaves_like
"
#{
service_name
}
service"
it_behaves_like
"triggered
#{
service_name
}
service"
,
branches_to_be_notified:
"all"
end
end
end
...
...
spec/support/shared_examples/slack_mattermost_notifications_shared_examples.rb
View file @
2009279a
...
...
@@ -2,7 +2,7 @@
Dir
[
Rails
.
root
.
join
(
"app/models/project_services/chat_message/*.rb"
)].
each
{
|
f
|
require
f
}
RSpec
.
shared_examples
'slack or mattermost notifications'
do
RSpec
.
shared_examples
'slack or mattermost notifications'
do
|
service_name
|
let
(
:chat_service
)
{
described_class
.
new
}
let
(
:webhook_url
)
{
'https://example.gitlab.com/'
}
...
...
@@ -35,6 +35,28 @@ RSpec.shared_examples 'slack or mattermost notifications' do
end
end
shared_examples
"triggered
#{
service_name
}
service"
do
|
event_type:
nil
,
branches_to_be_notified:
nil
|
before
do
chat_service
.
branches_to_be_notified
=
branches_to_be_notified
if
branches_to_be_notified
end
it
"notifies about
#{
event_type
}
events"
do
chat_service
.
execute
(
data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
)
end
end
shared_examples
"untriggered
#{
service_name
}
service"
do
|
event_type:
nil
,
branches_to_be_notified:
nil
|
before
do
chat_service
.
branches_to_be_notified
=
branches_to_be_notified
if
branches_to_be_notified
end
it
"notifies about
#{
event_type
}
events"
do
chat_service
.
execute
(
data
)
expect
(
WebMock
).
not_to
have_requested
(
:post
,
webhook_url
)
end
end
describe
"#execute"
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:project
)
{
create
(
:project
,
:repository
,
:wiki_repo
)
}
...
...
@@ -42,7 +64,7 @@ RSpec.shared_examples 'slack or mattermost notifications' do
let
(
:channel
)
{
'slack_channel'
}
let
(
:issue_service_options
)
{
{
title:
'Awesome issue'
,
description:
'please fix'
}
}
let
(
:
push_sample_
data
)
do
let
(
:data
)
do
Gitlab
::
DataBuilder
::
Push
.
build_sample
(
project
,
user
)
end
...
...
@@ -84,31 +106,31 @@ RSpec.shared_examples 'slack or mattermost notifications' do
@wiki_page_sample_data
=
Gitlab
::
DataBuilder
::
WikiPage
.
build
(
@wiki_page
,
user
,
'create'
)
end
it
"calls
Slack/Mattermost
API for push events"
do
chat_service
.
execute
(
push_sample_
data
)
it
"calls
#{
service_name
}
API for push events"
do
chat_service
.
execute
(
data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
it
"calls
Slack/Mattermost
API for issue events"
do
it
"calls
#{
service_name
}
API for issue events"
do
chat_service
.
execute
(
@issues_sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
it
"calls
Slack/Mattermost
API for merge requests events"
do
it
"calls
#{
service_name
}
API for merge requests events"
do
chat_service
.
execute
(
@merge_sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
it
"calls
Slack/Mattermost
API for wiki page events"
do
it
"calls
#{
service_name
}
API for wiki page events"
do
chat_service
.
execute
(
@wiki_page_sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
it
"calls
Slack/Mattermost
API for deployment events"
do
it
"calls
#{
service_name
}
API for deployment events"
do
deployment_event_data
=
{
object_kind:
'deployment'
}
chat_service
.
execute
(
deployment_event_data
)
...
...
@@ -125,7 +147,7 @@ RSpec.shared_examples 'slack or mattermost notifications' do
double
(
:slack_service
).
as_null_object
)
chat_service
.
execute
(
push_sample_
data
)
chat_service
.
execute
(
data
)
end
it
'uses the channel as an option when it is configured'
do
...
...
@@ -135,7 +157,7 @@ RSpec.shared_examples 'slack or mattermost notifications' do
.
and_return
(
double
(
:slack_service
).
as_null_object
)
chat_service
.
execute
(
push_sample_
data
)
chat_service
.
execute
(
data
)
end
context
"event channels"
do
...
...
@@ -148,7 +170,7 @@ RSpec.shared_examples 'slack or mattermost notifications' do
double
(
:slack_service
).
as_null_object
)
chat_service
.
execute
(
push_sample_
data
)
chat_service
.
execute
(
data
)
end
it
"uses the right channel for merge request event"
do
...
...
@@ -270,85 +292,40 @@ RSpec.shared_examples 'slack or mattermost notifications' do
end
context
'on default branch'
do
it
'still notifies about pushed tags'
do
ref
=
"
#{
Gitlab
::
Git
::
TAG_REF_PREFIX
}
test"
push_sample_data
=
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
ref
)
chat_service
.
execute
(
push_sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
let
(
:data
)
do
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
project
.
default_branch
)
end
context
'notification enabled only for default branch'
do
before
do
chat_service
.
branches_to_be_notified
=
"default"
end
it
'notifies about push events'
do
push_sample_data
=
Gitlab
::
DataBuilder
::
Push
.
build
(
context
'pushing tags'
do
let
(
:data
)
do
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
project
.
default_branch
ref:
"
#{
Gitlab
::
Git
::
TAG_REF_PREFIX
}
test"
)
end
chat_service
.
execute
(
push_sample_data
)
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"push"
end
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
)
end
context
'notification enabled only for default branch'
do
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"push"
,
branches_to_be_notified:
"default"
end
context
'notification enabled only for protected branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"protected"
end
it
'does not notify about push events'
do
push_sample_data
=
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
project
.
default_branch
)
chat_service
.
execute
(
push_sample_data
)
expect
(
WebMock
).
not_to
have_requested
(
:post
,
webhook_url
).
once
end
it_behaves_like
"untriggered
#{
service_name
}
service"
,
event_type:
"push"
,
branches_to_be_notified:
"protected"
end
context
'notification enabled only for default and protected branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"default_and_protected"
end
it
'notifies about push events'
do
push_sample_data
=
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
project
.
default_branch
)
chat_service
.
execute
(
push_sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"push"
,
branches_to_be_notified:
"default_and_protected"
end
context
'notification enabled for all branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"all"
end
it
'notifies about push events'
do
push_sample_data
=
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
project
.
default_branch
)
chat_service
.
execute
(
push_sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"push"
,
branches_to_be_notified:
"all"
end
end
...
...
@@ -357,179 +334,89 @@ RSpec.shared_examples 'slack or mattermost notifications' do
create
(
:protected_branch
,
project:
project
,
name:
'a-protected-branch'
)
end
it
'still notifies about pushed tags'
do
ref
=
"
#{
Gitlab
::
Git
::
TAG_REF_PREFIX
}
test"
push_sample_data
=
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
ref
)
chat_service
.
execute
(
push_sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
let
(
:data
)
do
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
'a-protected-branch'
)
end
context
'notification enabled only for default branch'
do
before
do
chat_service
.
branches_to_be_notified
=
"default"
end
it
'does not notify about push events'
do
push_sample_data
=
Gitlab
::
DataBuilder
::
Push
.
build
(
context
'pushing tags'
do
let
(
:data
)
do
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
'a-protected-branch'
ref:
"
#{
Gitlab
::
Git
::
TAG_REF_PREFIX
}
test"
)
end
chat_service
.
execute
(
push_sample_data
)
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"push"
end
expect
(
WebMock
).
not_to
have_requested
(
:post
,
webhook_url
)
end
context
'notification enabled only for default branch'
do
it_behaves_like
"untriggered
#{
service_name
}
service"
,
event_type:
"push"
,
branches_to_be_notified:
"default"
end
context
'notification enabled only for protected branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"protected"
end
it
'notifies about push events'
do
push_sample_data
=
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
'a-protected-branch'
)
chat_service
.
execute
(
push_sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"push"
,
branches_to_be_notified:
"protected"
end
context
'notification enabled only for default and protected branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"default_and_protected"
end
it
'notifies about push events'
do
push_sample_data
=
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
'a-protected-branch'
)
chat_service
.
execute
(
push_sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"push"
,
branches_to_be_notified:
"default_and_protected"
end
context
'notification enabled for all branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"all"
end
it
'notifies about push events'
do
push_sample_data
=
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
'a-protected-branch'
)
chat_service
.
execute
(
push_sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"push"
,
branches_to_be_notified:
"all"
end
end
context
'on a neither protected nor default branch'
do
it
'still notifies about pushed tags'
do
ref
=
"
#{
Gitlab
::
Git
::
TAG_REF_PREFIX
}
test"
push_sample_data
=
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
ref
)
chat_service
.
execute
(
push_sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
let
(
:data
)
do
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
'a-random-branch'
)
end
context
'notification enabled only for default branch'
do
before
do
chat_service
.
branches_to_be_notified
=
"default"
end
it
'does not notify about push events'
do
push_sample_data
=
Gitlab
::
DataBuilder
::
Push
.
build
(
context
'pushing tags'
do
let
(
:data
)
do
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
'a-random-branch'
ref:
"
#{
Gitlab
::
Git
::
TAG_REF_PREFIX
}
test"
)
end
chat_service
.
execute
(
push_sample_data
)
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"push"
end
expect
(
WebMock
).
not_to
have_requested
(
:post
,
webhook_url
)
end
context
'notification enabled only for default branch'
do
it_behaves_like
"untriggered
#{
service_name
}
service"
,
event_type:
"push"
,
branches_to_be_notified:
"default"
end
context
'notification enabled only for protected branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"protected"
end
it
'does not notify about push events'
do
push_sample_data
=
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
'a-random-branch'
)
chat_service
.
execute
(
push_sample_data
)
expect
(
WebMock
).
not_to
have_requested
(
:post
,
webhook_url
).
once
end
it_behaves_like
"untriggered
#{
service_name
}
service"
,
event_type:
"push"
,
branches_to_be_notified:
"protected"
end
context
'notification enabled only for default and protected branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"default_and_protected"
end
it
'does not notify about push events'
do
push_sample_data
=
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
'a-random-branch'
)
chat_service
.
execute
(
push_sample_data
)
expect
(
WebMock
).
not_to
have_requested
(
:post
,
webhook_url
).
once
end
it_behaves_like
"untriggered
#{
service_name
}
service"
,
event_type:
"push"
,
branches_to_be_notified:
"default_and_protected"
end
context
'notification enabled for all branches'
do
before
do
chat_service
.
branches_to_be_notified
=
"all"
end
it
'notifies about push events'
do
push_sample_data
=
Gitlab
::
DataBuilder
::
Push
.
build
(
project:
project
,
user:
user
,
ref:
'a-random-branch'
)
chat_service
.
execute
(
push_sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"push"
,
branches_to_be_notified:
"all"
end
end
end
describe
"Note events"
do
describe
'Note events'
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:project
)
{
create
(
:project
,
:repository
,
creator:
user
)
}
before
do
allow
(
chat_service
).
to
receive_messages
(
project:
project
,
project_id:
project
.
id
,
service_hook:
true
,
webhook:
webhook_url
)
...
...
@@ -545,61 +432,56 @@ RSpec.shared_examples 'slack or mattermost notifications' do
note:
'a comment on a commit'
)
end
it
"calls Slack/Mattermost API for commit comment events"
do
data
=
Gitlab
::
DataBuilder
::
Note
.
build
(
commit_note
,
user
)
chat_service
.
execute
(
data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
let
(
:data
)
do
Gitlab
::
DataBuilder
::
Note
.
build
(
commit_note
,
user
)
end
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"commit comment"
end
context
'when merge request comment event executed'
do
let
(
:merge_request_note
)
do
create
(
:note_on_merge_request
,
project:
project
,
note:
"merge request note"
)
note:
'a comment on a merge request'
)
end
it
"calls Slack API for merge request comment events"
do
data
=
Gitlab
::
DataBuilder
::
Note
.
build
(
merge_request_note
,
user
)
chat_service
.
execute
(
data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
let
(
:data
)
do
Gitlab
::
DataBuilder
::
Note
.
build
(
merge_request_note
,
user
)
end
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"merge request comment"
end
context
'when issue comment event executed'
do
let
(
:issue_note
)
do
create
(
:note_on_issue
,
project:
project
,
note:
"issue note"
)
create
(
:note_on_issue
,
project:
project
,
note:
'a comment on an issue'
)
end
let
(
:data
)
{
Gitlab
::
DataBuilder
::
Note
.
build
(
issue_note
,
user
)
}
it
"calls Slack API for issue comment events"
do
chat_service
.
execute
(
data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
let
(
:data
)
do
Gitlab
::
DataBuilder
::
Note
.
build
(
issue_note
,
user
)
end
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"issue comment"
end
context
'when snippet comment event executed'
do
let
(
:snippet_note
)
do
create
(
:note_on_project_snippet
,
project:
project
,
note:
"snippet note"
)
note:
'a comment on a snippet'
)
end
it
"calls Slack API for snippet comment events"
do
data
=
Gitlab
::
DataBuilder
::
Note
.
build
(
snippet_note
,
user
)
chat_service
.
execute
(
data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
let
(
:data
)
do
Gitlab
::
DataBuilder
::
Note
.
build
(
snippet_note
,
user
)
end
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"snippet comment"
end
end
describe
'Pipeline events'
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:project
)
{
create
(
:project
,
:repository
)
}
let
(
:project
)
{
create
(
:project
,
:repository
,
creator:
user
)
}
let
(
:pipeline
)
do
create
(
:ci_pipeline
,
project:
project
,
status:
status
,
...
...
@@ -612,37 +494,16 @@ RSpec.shared_examples 'slack or mattermost notifications' do
service_hook:
true
,
webhook:
webhook_url
)
end
shared_examples
'call Slack/Mattermost API'
do
before
do
WebMock
.
stub_request
(
:post
,
webhook_url
)
end
it
'calls Slack/Mattermost API for pipeline events'
do
data
=
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
chat_service
.
execute
(
data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
end
context
'with failed pipeline'
do
let
(
:status
)
{
'failed'
}
it_behaves_like
'call Slack/Mattermost API'
WebMock
.
stub_request
(
:post
,
webhook_url
)
end
context
'with succeeded pipeline'
do
let
(
:status
)
{
'success'
}
let
(
:data
)
{
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
}
context
'with default to notify_only_broken_pipelines'
do
it
'does not call Slack/Mattermost API for pipeline events'
do
data
=
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
result
=
chat_service
.
execute
(
data
)
expect
(
result
).
to
be_falsy
end
it_behaves_like
"untriggered
#{
service_name
}
service"
,
event_type:
"pipeline"
end
context
'with setting notify_only_broken_pipelines to false'
do
...
...
@@ -650,150 +511,91 @@ RSpec.shared_examples 'slack or mattermost notifications' do
chat_service
.
notify_only_broken_pipelines
=
false
end
it_behaves_like
'call Slack/Mattermost API'
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"pipeline"
end
end
context
'on a default branch'
do
let
(
:pipeline
)
do
create
(
:ci_pipeline
,
:failed
,
project:
project
,
sha:
project
.
commit
.
sha
,
ref:
project
.
default_branch
)
end
context
'notification enabled only for default branch'
do
before
do
chat_service
.
branches_to_be_notified
=
'default'
context
'with failed pipeline'
do
context
'on default branch'
do
let
(
:pipeline
)
do
create
(
:ci_pipeline
,
project:
project
,
status: :failed
,
sha:
project
.
commit
.
sha
,
ref:
project
.
default_branch
)
end
it_behaves_like
'call Slack/Mattermost API'
end
let
(
:data
)
{
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
}
context
'notification enabled only for protected branch'
do
before
do
chat_service
.
branches_to_be_notified
=
'protected'
context
'notification enabled only for default branch'
do
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"pipeline"
,
branches_to_be_notified:
"default"
end
it
'does not call the Slack/Mattermost API for pipeline events'
do
data
=
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
result
=
chat_service
.
execute
(
data
)
expect
(
result
).
to
be_falsy
context
'notification enabled only for protected branches'
do
it_behaves_like
"untriggered
#{
service_name
}
service"
,
event_type:
"pipeline"
,
branches_to_be_notified:
"protected"
end
end
context
'notification enabled only for default and protected branches'
do
before
do
chat_service
.
branches_to_be_notified
=
'default_and_protected'
context
'notification enabled only for default and protected branches'
do
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"pipeline"
,
branches_to_be_notified:
"default_and_protected"
end
it_behaves_like
'call Slack/Mattermost API'
end
context
'notification enabled for all branches'
do
before
do
chat_service
.
branches_to_be_notified
=
'all'
context
'notification enabled for all branches'
do
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"pipeline"
,
branches_to_be_notified:
"all"
end
it_behaves_like
'call Slack/Mattermost API'
end
end
context
'on a protected branch'
do
before
do
create
(
:protected_branch
,
project:
project
,
name:
'a-protected-branch'
)
end
let
(
:pipeline
)
do
create
(
:ci_pipeline
,
:failed
,
project:
project
,
sha:
project
.
commit
.
sha
,
ref:
'a-protected-branch'
)
end
context
'notification enabled only for default branch'
do
context
'on a protected branch'
do
before
do
chat_service
.
branches_to_be_notified
=
'default'
end
it
'does not call the Slack/Mattermost API for pipeline events'
do
data
=
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
result
=
chat_service
.
execute
(
data
)
expect
(
result
).
to
be_falsy
create
(
:protected_branch
,
project:
project
,
name:
'a-protected-branch'
)
end
end
context
'notification enabled only for protected branch'
do
before
do
chat_service
.
branches_to_be_notified
=
'protected'
let
(
:pipeline
)
do
create
(
:ci_pipeline
,
project:
project
,
status: :failed
,
sha:
project
.
commit
.
sha
,
ref:
'a-protected-branch'
)
end
it_behaves_like
'call Slack/Mattermost API'
end
let
(
:data
)
{
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
}
context
'notification enabled only for default and protected branches'
do
before
do
chat_service
.
branches_to_be_notified
=
'default_and_protected'
context
'notification enabled only for default branch'
do
it_behaves_like
"untriggered
#{
service_name
}
service"
,
event_type:
"pipeline"
,
branches_to_be_notified:
"default"
end
it_behaves_like
'call Slack/Mattermost API'
end
context
'notification enabled for all branches'
do
before
do
chat_service
.
branches_to_be_notified
=
'all'
context
'notification enabled only for protected branches'
do
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"pipeline"
,
branches_to_be_notified:
"protected"
end
it_behaves_like
'call Slack/Mattermost API'
end
end
context
'on a neithuer protected nor default branch'
do
let
(
:pipeline
)
do
create
(
:ci_pipeline
,
:failed
,
project:
project
,
sha:
project
.
commit
.
sha
,
ref:
'a-random-branch'
)
end
context
'notification enabled only for default branch'
do
before
do
chat_service
.
branches_to_be_notified
=
'default'
context
'notification enabled only for default and protected branches'
do
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"pipeline"
,
branches_to_be_notified:
"default_and_protected"
end
it
'does not call the Slack/Mattermost API for pipeline events'
do
data
=
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
result
=
chat_service
.
execute
(
data
)
expect
(
result
).
to
be_falsy
context
'notification enabled for all branches'
do
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"pipeline"
,
branches_to_be_notified:
"all"
end
end
context
'notification enabled only for protected branch'
do
before
do
chat_service
.
branches_to_be_notified
=
'protected'
context
'on a neither protected nor default branch'
do
let
(
:pipeline
)
do
create
(
:ci_pipeline
,
project:
project
,
status: :failed
,
sha:
project
.
commit
.
sha
,
ref:
'a-random-branch'
)
end
it
'does not call the Slack/Mattermost API for pipeline events'
do
data
=
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
result
=
chat_service
.
execute
(
data
)
let
(
:data
)
{
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
}
expect
(
result
).
to
be_falsy
context
'notification enabled only for default branch'
do
it_behaves_like
"untriggered
#{
service_name
}
service"
,
event_type:
"pipeline"
,
branches_to_be_notified:
"default"
end
end
context
'notification enabled only for default and protected branches'
do
before
do
chat_service
.
branches_to_be_notified
=
'default_and_protected'
context
'notification enabled only for protected branches'
do
it_behaves_like
"untriggered
#{
service_name
}
service"
,
event_type:
"pipeline"
,
branches_to_be_notified:
"protected"
end
it
'does not call the Slack/Mattermost API for pipeline events'
do
data
=
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
result
=
chat_service
.
execute
(
data
)
expect
(
result
).
to
be_falsy
context
'notification enabled only for default and protected branches'
do
it_behaves_like
"untriggered
#{
service_name
}
service"
,
event_type:
"pipeline"
,
branches_to_be_notified:
"default_and_protected"
end
end
context
'notification enabled for all branches'
do
before
do
chat_service
.
branches_to_be_notified
=
'all'
context
'notification enabled for all branches'
do
it_behaves_like
"triggered
#{
service_name
}
service"
,
event_type:
"pipeline"
,
branches_to_be_notified:
"all"
end
it_behaves_like
'call Slack/Mattermost API'
end
end
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment