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
Léo-Paul Géneau
gitlab-ce
Commits
6a4236da
Commit
6a4236da
authored
Nov 05, 2018
by
blackst0ne
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add spec for DiscordService
parent
736b6f1d
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
242 additions
and
0 deletions
+242
-0
spec/models/project_services/discord_service_spec.rb
spec/models/project_services/discord_service_spec.rb
+242
-0
No files found.
spec/models/project_services/discord_service_spec.rb
0 → 100644
View file @
6a4236da
require
"spec_helper"
describe
DiscordService
do
describe
"Associations"
do
it
{
is_expected
.
to
belong_to
:project
}
it
{
is_expected
.
to
have_one
:service_hook
}
end
describe
"Validations"
do
context
"when service is active"
do
before
do
subject
.
active
=
true
end
it
{
is_expected
.
to
validate_presence_of
(
:webhook
)
}
it_behaves_like
"issue tracker service URL attribute"
,
:webhook
end
context
"when service is inactive"
do
before
do
subject
.
active
=
false
end
it
{
is_expected
.
not_to
validate_presence_of
(
:webhook
)
}
end
end
describe
"#execute"
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:project
)
{
create
(
:project
,
:repository
)
}
let
(
:webhook_url
)
{
"https://example.gitlab.com/"
}
before
do
allow
(
subject
).
to
receive_messages
(
project:
project
,
project_id:
project
.
id
,
service_hook:
true
,
webhook:
webhook_url
)
WebMock
.
stub_request
(
:post
,
webhook_url
)
end
shared_examples
"Discord service"
do
it
"calls Discord Webhooks API"
do
subject
.
execute
(
sample_data
)
expect
(
WebMock
).
to
have_requested
(
:post
,
webhook_url
).
with
{
|
req
|
req
.
body
=~
/\A{"content":.+}\Z/
}.
once
end
end
context
"with push events"
do
let
(
:sample_data
)
do
Gitlab
::
DataBuilder
::
Push
.
build_sample
(
project
,
user
)
end
it_behaves_like
"Discord service"
it
"specifies the webhook when it is configured"
do
expect
(
Discordrb
::
Webhooks
::
Client
).
to
receive
(
:new
).
with
(
url:
webhook_url
).
and_return
(
double
(
:discord_service
).
as_null_object
)
subject
.
execute
(
sample_data
)
end
context
"with not default branch"
do
let
(
:sample_data
)
do
Gitlab
::
DataBuilder
::
Push
.
build
(
project
,
user
,
nil
,
nil
,
"not-the-default-branch"
)
end
context
"when notify_only_default_branch enabled"
do
before
do
subject
.
notify_only_default_branch
=
true
end
it
"does not call the Discord Webhooks API"
do
result
=
subject
.
execute
(
sample_data
)
expect
(
result
).
to
be_falsy
end
end
context
"when notify_only_default_branch disabled"
do
before
do
subject
.
notify_only_default_branch
=
false
end
it_behaves_like
"Discord service"
end
end
end
context
"with issue events"
do
let
(
:opts
)
{
{
title:
"Awesome issue"
,
description:
"please fix"
}
}
let
(
:sample_data
)
do
service
=
Issues
::
CreateService
.
new
(
project
,
user
,
opts
)
issue
=
service
.
execute
service
.
hook_data
(
issue
,
"open"
)
end
it_behaves_like
"Discord service"
end
context
"with merge events"
do
let
(
:opts
)
do
{
title:
"Awesome merge_request"
,
description:
"please fix"
,
source_branch:
"feature"
,
target_branch:
"master"
}
end
let
(
:sample_data
)
do
service
=
MergeRequests
::
CreateService
.
new
(
project
,
user
,
opts
)
merge_request
=
service
.
execute
service
.
hook_data
(
merge_request
,
"open"
)
end
before
do
project
.
add_developer
(
user
)
end
it_behaves_like
"Discord service"
end
context
"with wiki page events"
do
let
(
:opts
)
do
{
title:
"Awesome wiki_page"
,
content:
"Some text describing some thing or another"
,
format:
"md"
,
message:
"user created page: Awesome wiki_page"
}
end
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
"Discord service"
end
context
"with note events"
do
let
(
:sample_data
)
{
Gitlab
::
DataBuilder
::
Note
.
build
(
note
,
user
)
}
context
"with commit comment"
do
let
(
:note
)
do
create
(
:note_on_commit
,
author:
user
,
project:
project
,
commit_id:
project
.
repository
.
commit
.
id
,
note:
"a comment on a commit"
)
end
it_behaves_like
"Discord service"
end
context
"with merge request comment"
do
let
(
:note
)
do
create
(
:note_on_merge_request
,
project:
project
,
note:
"merge request note"
)
end
it_behaves_like
"Discord service"
end
context
"with issue comment"
do
let
(
:note
)
do
create
(
:note_on_issue
,
project:
project
,
note:
"issue note"
)
end
it_behaves_like
"Discord service"
end
context
"with snippet comment"
do
let
(
:note
)
do
create
(
:note_on_project_snippet
,
project:
project
,
note:
"snippet note"
)
end
it_behaves_like
"Discord service"
end
end
context
"with pipeline events"
do
let
(
:pipeline
)
do
create
(
:ci_pipeline
,
project:
project
,
status:
status
,
sha:
project
.
commit
.
sha
,
ref:
project
.
default_branch
)
end
let
(
:sample_data
)
{
Gitlab
::
DataBuilder
::
Pipeline
.
build
(
pipeline
)
}
context
"with failed pipeline"
do
let
(
:status
)
{
"failed"
}
it_behaves_like
"Discord 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
result
=
subject
.
execute
(
sample_data
)
expect
(
result
).
to
be_falsy
end
end
context
"when notify_only_broken_pipelines is false"
do
before
do
subject
.
notify_only_broken_pipelines
=
false
end
it_behaves_like
"Discord service"
end
end
context
"with not default branch"
do
let
(
:pipeline
)
do
create
(
:ci_pipeline
,
project:
project
,
status:
"failed"
,
ref:
"not-the-default-branch"
)
end
context
"when notify_only_default_branch enabled"
do
before
do
subject
.
notify_only_default_branch
=
true
end
it
"does not call the Discord Webhooks API"
do
result
=
subject
.
execute
(
sample_data
)
expect
(
result
).
to
be_falsy
end
end
context
"when notify_only_default_branch disabled"
do
before
do
subject
.
notify_only_default_branch
=
false
end
it_behaves_like
"Discord service"
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