Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
heptapod
heptapod
Commits
9600a3988cf2
Commit
f749fb7f
authored
Nov 18, 2016
by
Z.J. van de Weg
Browse files
Improve style, add more tests
parent
5879656a59c3
Changes
10
Hide whitespace changes
Inline
Side-by-side
changelogs/unreleased/zj-slash-commands-mattermost.yml
View file @
9600a398
---
title
:
Add
fir
st slash command
s
title
:
Add
ed Mattermo
st slash command
merge_request
:
7438
author
:
lib/api/helpers.rb
View file @
9600a398
...
...
@@ -85,20 +85,11 @@ def find_project(id)
end
end
def
project_service
@project_service
||=
user_
project
.
find_or_initialize_service
(
params
[
:service_slug
].
underscore
)
def
project_service
(
project
=
user_project
)
@project_service
||=
project
.
find_or_initialize_service
(
params
[
:service_slug
].
underscore
)
@project_service
||
not_found!
(
"Service"
)
end
def
service_by_slug
(
project
,
slug
)
underscored_service
=
slug
.
underscore
not_found!
(
'Service'
)
unless
Service
.
available_services_names
.
include?
(
underscored_service
)
service_method
=
"
#{
underscored_service
}
_service"
service
=
project
.
public_send
(
service_method
)
end
def
service_attributes
@service_attributes
||=
project_service
.
fields
.
inject
([])
do
|
arr
,
hash
|
arr
<<
hash
[
:name
].
to_sym
...
...
lib/api/services.rb
View file @
9600a398
...
...
@@ -67,7 +67,9 @@ class Services < Grape::API
post
':id/services/:service_slug/trigger'
do
project
=
Project
.
find_with_namespace
(
params
[
:id
])
||
Project
.
find_by
(
id:
params
[
:id
])
service
=
service_by_slug
(
project
,
params
[
:service_slug
])
not_found!
unless
project
service
=
project_service
(
project
)
result
=
service
.
try
(
:active?
)
&&
service
.
try
(
:trigger
,
params
)
...
...
@@ -75,7 +77,7 @@ class Services < Grape::API
status
result
[
:status
]
||
200
present
result
else
not_found!
(
'Service'
)
not_found!
end
end
end
...
...
lib/gitlab/chat_commands/base_command.rb
View file @
9600a398
...
...
@@ -3,7 +3,7 @@ module ChatCommands
class
BaseCommand
QUERY_LIMIT
=
5
def
self
.
match
(
_
)
def
self
.
match
(
_
text
)
raise
NotImplementedError
end
...
...
@@ -11,11 +11,11 @@ def self.help_message
raise
NotImplementedError
end
def
self
.
available?
(
_
)
def
self
.
available?
(
_
project
)
raise
NotImplementedError
end
def
self
.
allowed?
(
_
,
_
)
def
self
.
allowed?
(
_
user
,
_ability
)
true
end
...
...
lib/mattermost/presenter.rb
View file @
9600a398
module
Mattermost
class
Presenter
class
<<
self
include
Rails
.
application
.
routes
.
url_helpers
include
Gitlab
::
Routing
.
url_helpers
def
authorize_chat_name
(
url
)
message
=
if
url
...
...
@@ -14,7 +14,7 @@ def authorize_chat_name(url)
end
def
help
(
commands
,
trigger
)
if
commands
.
count
==
0
if
commands
.
empty?
ephemeral_response
(
"No commands configured"
)
unless
messages
.
count
>
1
else
message
=
header_with_list
(
"Available commands"
,
commands
)
...
...
@@ -50,7 +50,7 @@ def not_found
end
def
single_resource
(
resource
)
return
error
(
resource
)
if
resource
.
errors
.
any?
return
error
(
resource
)
if
resource
.
errors
.
any?
||
!
resource
.
persisted?
message
=
"###
#{
title
(
resource
)
}
"
message
<<
"
\n\n
#{
resource
.
description
}
"
if
resource
.
description
...
...
spec/lib/gitlab/chat_commands/command_spec.rb
View file @
9600a398
...
...
@@ -7,7 +7,7 @@
subject
{
described_class
.
new
(
project
,
user
,
params
).
execute
}
describe
'#execute'
do
context
'when no command is
not
available'
do
context
'when no command is available'
do
let
(
:params
)
{
{
text:
'issue show 1'
}
}
let
(
:project
)
{
create
(
:project
,
has_external_issue_tracker:
true
)
}
...
...
@@ -45,6 +45,10 @@
it
'presents the issue'
do
expect
(
subject
[
:text
]).
to
match
(
"my new issue"
)
end
it
'shows a link to the new issue'
do
expect
(
subject
[
:text
]).
to
match
(
/\/issues\/\d+/
)
end
end
end
end
spec/lib/gitlab/chat_commands/issue_create_spec.rb
View file @
9600a398
...
...
@@ -34,7 +34,7 @@
end
end
describe
'
self
.match'
do
describe
'.match'
do
it
'matches the title without description'
do
match
=
described_class
.
match
(
"issue create my title"
)
...
...
spec/lib/gitlab/import_export/all_models.yml
View file @
9600a398
...
...
@@ -116,6 +116,7 @@ project:
-
base_tags
-
tag_taggings
-
tags
-
chat_services
-
creator
-
group
-
namespace
...
...
@@ -127,6 +128,7 @@ project:
-
emails_on_push_service
-
builds_email_service
-
pipelines_email_service
-
mattermost_command_service
-
irker_service
-
pivotaltracker_service
-
hipchat_service
...
...
@@ -188,4 +190,4 @@ award_emoji:
-
awardable
-
user
priorities
:
-
label
\ No newline at end of file
-
label
spec/models/project_services/mattermost_command_service_spec.rb
View file @
9600a398
...
...
@@ -55,11 +55,11 @@
end
context
'when an auth url can be generated'
do
let
(
:params
)
do
let
(
:params
)
do
{
team_domain:
'http://domain.tld'
,
team_id:
'T3423423'
,
user_id:
'U234234'
,
team_domain:
'http://domain.tld'
,
team_id:
'T3423423'
,
user_id:
'U234234'
,
user_name:
'mepmep'
,
token:
'token'
}
...
...
@@ -72,7 +72,7 @@
end
it
'generates the url'
do
response
=
service
.
trigger
(
params
)
response
=
service
.
trigger
(
params
)
expect
(
response
[
:text
]).
to
start_with
(
':wave: Hi there!'
)
end
...
...
spec/requests/api/services_spec.rb
View file @
9600a398
...
...
@@ -102,6 +102,8 @@
end
context
'the service exists'
do
let
(
:params
)
{
{
token:
'token'
}
}
context
'the service is not active'
do
let!
(
:inactive_service
)
do
project
.
create_mattermost_command_service
(
...
...
@@ -124,7 +126,6 @@
properties:
{
token:
'token'
}
)
end
let
(
:params
)
{
{
token:
'token'
}
}
it
'retusn status 200'
do
post
api
(
"/projects/
#{
project
.
id
}
/services/mattermost_command/trigger"
),
params
...
...
@@ -132,6 +133,15 @@
expect
(
response
).
to
have_http_status
(
200
)
end
end
context
'when the project can not be found'
do
it
'returns a generic 404'
do
post
api
(
"/projects/404/services/mattermost_command/trigger"
),
params
expect
(
response
).
to
have_http_status
(
404
)
expect
(
json_response
[
"message"
]).
to
eq
'404 Not Found'
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