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
0
Merge Requests
0
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
Boxiang Sun
gitlab-ce
Commits
6cfb0a9e
Commit
6cfb0a9e
authored
Jul 03, 2018
by
Kukovskii Vladimir
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Rework spec for Hangouts Chat service
parent
5b3a9d6b
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
107 additions
and
172 deletions
+107
-172
spec/models/project_services/hangouts_chat_service_spec.rb
spec/models/project_services/hangouts_chat_service_spec.rb
+107
-172
No files found.
spec/models/project_services/hangouts_chat_service_spec.rb
View file @
6cfb0a9e
...
@@ -43,37 +43,64 @@ describe HangoutsChatService do
...
@@ -43,37 +43,64 @@ describe HangoutsChatService do
WebMock
.
stub_request
(
:post
,
webhook_url
)
WebMock
.
stub_request
(
:post
,
webhook_url
)
end
end
shared_examples
'Hangouts Chat service'
do
it
'calls Hangouts Chat API'
do
chat_service
.
execute
(
sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
end
context
'with push events'
do
context
'with push events'
do
let
(
:
push_
sample_data
)
do
let
(
:sample_data
)
do
Gitlab
::
DataBuilder
::
Push
.
build_sample
(
project
,
user
)
Gitlab
::
DataBuilder
::
Push
.
build_sample
(
project
,
user
)
end
end
it
'calls Hangouts Chat API for push events'
do
it_behaves_like
'Hangouts Chat service'
chat_service
.
execute
(
push_sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
it
'specifies the webhook when it is configured'
do
it
'specifies the webhook when it is configured'
do
expect
(
HangoutsChat
::
Sender
).
to
receive
(
:new
).
with
(
webhook_url
).
and_return
(
double
(
:hangouts_chat_service
).
as_null_object
)
expect
(
HangoutsChat
::
Sender
).
to
receive
(
:new
).
with
(
webhook_url
).
and_return
(
double
(
:hangouts_chat_service
).
as_null_object
)
chat_service
.
execute
(
push_sample_data
)
chat_service
.
execute
(
sample_data
)
end
context
'with not default branch'
do
let
(
:sample_data
)
do
ref
=
"
#{
Gitlab
::
Git
::
BRANCH_REF_PREFIX
}
test"
Gitlab
::
DataBuilder
::
Push
.
build
(
project
,
user
,
nil
,
nil
,
ref
,
[])
end
context
'when notify_only_default_branch enabled'
do
before
do
chat_service
.
notify_only_default_branch
=
true
end
it
'does not call the Hangouts Chat API'
do
result
=
chat_service
.
execute
(
sample_data
)
expect
(
result
).
to
be_falsy
end
end
context
'when notify_only_default_branch disabled'
do
before
do
chat_service
.
notify_only_default_branch
=
false
end
it_behaves_like
'Hangouts Chat service'
end
end
end
end
end
context
'with issue events'
do
context
'with issue events'
do
let
(
:opts
)
{
{
title:
'Awesome issue'
,
description:
'please fix'
}
}
let
(
:opts
)
{
{
title:
'Awesome issue'
,
description:
'please fix'
}
}
let
(
:
issues_
sample_data
)
do
let
(
:sample_data
)
do
service
=
Issues
::
CreateService
.
new
(
project
,
user
,
opts
)
service
=
Issues
::
CreateService
.
new
(
project
,
user
,
opts
)
issue
=
service
.
execute
issue
=
service
.
execute
service
.
hook_data
(
issue
,
'open'
)
service
.
hook_data
(
issue
,
'open'
)
end
end
it
'calls Hangouts Chat API'
do
it_behaves_like
'Hangouts Chat service'
chat_service
.
execute
(
issues_sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
end
end
context
'with merge events'
do
context
'with merge events'
do
...
@@ -86,7 +113,7 @@ describe HangoutsChatService do
...
@@ -86,7 +113,7 @@ describe HangoutsChatService do
}
}
end
end
let
(
:
merge_
sample_data
)
do
let
(
:sample_data
)
do
service
=
MergeRequests
::
CreateService
.
new
(
project
,
user
,
opts
)
service
=
MergeRequests
::
CreateService
.
new
(
project
,
user
,
opts
)
merge_request
=
service
.
execute
merge_request
=
service
.
execute
service
.
hook_data
(
merge_request
,
'open'
)
service
.
hook_data
(
merge_request
,
'open'
)
...
@@ -96,11 +123,7 @@ describe HangoutsChatService do
...
@@ -96,11 +123,7 @@ describe HangoutsChatService do
project
.
add_developer
(
user
)
project
.
add_developer
(
user
)
end
end
it
'calls Hangouts Chat API'
do
it_behaves_like
'Hangouts Chat service'
chat_service
.
execute
(
merge_sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
end
end
context
'with wiki page events'
do
context
'with wiki page events'
do
...
@@ -113,198 +136,110 @@ describe HangoutsChatService do
...
@@ -113,198 +136,110 @@ describe HangoutsChatService do
}
}
end
end
let
(
:wiki_page
)
{
create
(
:wiki_page
,
wiki:
project
.
wiki
,
attrs:
opts
)
}
let
(
:wiki_page
)
{
create
(
:wiki_page
,
wiki:
project
.
wiki
,
attrs:
opts
)
}
let
(
:wiki_page_sample_data
)
{
Gitlab
::
DataBuilder
::
WikiPage
.
build
(
wiki_page
,
user
,
'create'
)
}
let
(
:sample_data
)
{
Gitlab
::
DataBuilder
::
WikiPage
.
build
(
wiki_page
,
user
,
'create'
)
}
it
'calls Hangouts Chat API'
do
chat_service
.
execute
(
wiki_page_sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
it_behaves_like
'Hangouts Chat service'
end
end
end
end
describe
'Note events'
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:project
)
{
create
(
:project
,
:repository
,
creator:
user
)
}
before
do
context
'with note events'
do
allow
(
chat_service
).
to
receive_messages
(
let
(
:sample_data
)
{
Gitlab
::
DataBuilder
::
Note
.
build
(
note
,
user
)
}
project:
project
,
project_id:
project
.
id
,
service_hook:
true
,
webhook:
webhook_url
)
WebMock
.
stub_request
(
:post
,
webhook_url
)
end
context
'when commit comment event executed
'
do
context
'with commit comment
'
do
let
(
:commit_
note
)
do
let
(
:
note
)
do
create
(
:note_on_commit
,
author:
user
,
create
(
:note_on_commit
,
author:
user
,
project:
project
,
project:
project
,
commit_id:
project
.
repository
.
commit
.
id
,
commit_id:
project
.
repository
.
commit
.
id
,
note:
'a comment on a commit'
)
note:
'a comment on a commit'
)
end
end
it
'calls Hangouts Chat API for commit comment events'
do
it_behaves_like
'Hangouts Chat service'
data
=
Gitlab
::
DataBuilder
::
Note
.
build
(
commit_note
,
user
)
chat_service
.
execute
(
data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
end
end
context
'when merge request comment event executed
'
do
context
'with merge request comment
'
do
let
(
:merge_request_
note
)
do
let
(
:
note
)
do
create
(
:note_on_merge_request
,
project:
project
,
create
(
:note_on_merge_request
,
project:
project
,
note:
'merge request note'
)
note:
'merge request note'
)
end
end
it
'calls Hangouts Chat API for merge request comment events'
do
it_behaves_like
'Hangouts Chat service'
data
=
Gitlab
::
DataBuilder
::
Note
.
build
(
merge_request_note
,
user
)
chat_service
.
execute
(
data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
end
end
context
'when issue comment event executed
'
do
context
'with issue comment
'
do
let
(
:issue_
note
)
do
let
(
:
note
)
do
create
(
:note_on_issue
,
project:
project
,
note:
'issue note'
)
create
(
:note_on_issue
,
project:
project
,
note:
'issue note'
)
end
end
it
'calls Hangouts Chat API for issue comment events'
do
it_behaves_like
'Hangouts Chat service'
data
=
Gitlab
::
DataBuilder
::
Note
.
build
(
issue_note
,
user
)
chat_service
.
execute
(
data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
end
end
context
'when snippet comment event executed
'
do
context
'wiht snippet comment
'
do
let
(
:snippet_
note
)
do
let
(
:
note
)
do
create
(
:note_on_project_snippet
,
project:
project
,
create
(
:note_on_project_snippet
,
project:
project
,
note:
'snippet note'
)
note:
'snippet note'
)
end
end
it
'calls Hangouts Chat API for snippet comment events'
do
it_behaves_like
'Hangouts Chat service'
data
=
Gitlab
::
DataBuilder
::
Note
.
build
(
snippet_note
,
user
)
chat_service
.
execute
(
data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
end
end
end
end
describe
'Pipeline events'
do
context
'with pipeline events'
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:project
)
{
create
(
:project
,
:repository
)
}
let
(
:pipeline
)
do
let
(
:pipeline
)
do
create
(
:ci_pipeline
,
create
(
:ci_pipeline
,
project:
project
,
status:
status
,
project:
project
,
status:
status
,
sha:
project
.
commit
.
sha
,
ref:
project
.
default_branch
)
sha:
project
.
commit
.
sha
,
ref:
project
.
default_branch
)
end
end
let
(
:sample_data
)
{
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
}
before
do
allow
(
chat_service
).
to
receive_messages
(
project:
project
,
service_hook:
true
,
webhook:
webhook_url
)
end
shared_examples
'call Hangouts Chat API'
do
before
do
WebMock
.
stub_request
(
:post
,
webhook_url
)
end
it
'calls Hangouts Chat 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
context
'with failed pipeline'
do
let
(
:status
)
{
'failed'
}
let
(
:status
)
{
'failed'
}
it_behaves_like
'call Hangouts Chat API
'
it_behaves_like
'Hangouts Chat service
'
end
end
context
'with succeeded pipeline'
do
context
'with succeeded pipeline'
do
let
(
:status
)
{
'success'
}
let
(
:status
)
{
'success'
}
context
'with default to notify_only_broken_pipelines'
do
context
'with default notify_only_broken_pipelines'
do
it
'does not call Hangouts Chat API for pipeline events'
do
it
'does not call Hangouts Chat API'
do
data
=
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
result
=
chat_service
.
execute
(
sample_data
)
result
=
chat_service
.
execute
(
data
)
expect
(
result
).
to
be_falsy
expect
(
result
).
to
be_falsy
end
end
end
end
context
'with setting notify_only_broken_pipelines to
false'
do
context
'when notify_only_broken_pipelines is
false'
do
before
do
before
do
chat_service
.
notify_only_broken_pipelines
=
false
chat_service
.
notify_only_broken_pipelines
=
false
end
end
it_behaves_like
'call Hangouts Chat API
'
it_behaves_like
'Hangouts Chat service
'
end
end
end
end
context
'only notify for the default branch'
do
context
'with not default branch'
do
context
'when enabled'
do
let
(
:pipeline
)
do
let
(
:pipeline
)
do
create
(
:ci_pipeline
,
project:
project
,
status:
'failed'
,
ref:
'not-the-default-branch'
)
create
(
:ci_pipeline
,
project:
project
,
status:
'failed'
,
ref:
'not-the-default-branch'
)
end
end
context
'when notify_only_default_branch enabled'
do
before
do
before
do
chat_service
.
notify_only_default_branch
=
true
chat_service
.
notify_only_default_branch
=
true
WebMock
.
stub_request
(
:post
,
webhook_url
)
end
end
it
'does not call the Hangouts Chat API for pipeline events'
do
it
'does not call the Hangouts Chat API'
do
data
=
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
result
=
chat_service
.
execute
(
sample_data
)
result
=
chat_service
.
execute
(
data
)
expect
(
result
).
to
be_falsy
expect
(
result
).
to
be_falsy
end
end
it
'does not notify push events if they are not for the default branch'
do
ref
=
"
#{
Gitlab
::
Git
::
BRANCH_REF_PREFIX
}
test"
push_sample_data
=
Gitlab
::
DataBuilder
::
Push
.
build
(
project
,
user
,
nil
,
nil
,
ref
,
[])
chat_service
.
execute
(
push_sample_data
)
expect
(
WebMock
).
not_to
have_requested
(
:post
,
webhook_url
)
end
it
'notifies about push events for the default branch'
do
push_sample_data
=
Gitlab
::
DataBuilder
::
Push
.
build_sample
(
project
,
user
)
chat_service
.
execute
(
push_sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
once
end
end
context
'when disabled'
do
let
(
:pipeline
)
do
create
(
:ci_pipeline
,
:failed
,
project:
project
,
ref:
'not-the-default-branch'
)
end
end
context
'when notify_only_default_branch disabled'
do
before
do
before
do
chat_service
.
notify_only_default_branch
=
false
chat_service
.
notify_only_default_branch
=
false
end
end
it_behaves_like
'call Hangouts Chat API'
it_behaves_like
'Hangouts Chat service'
end
end
end
end
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