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
e5c58b44
Commit
e5c58b44
authored
Feb 06, 2019
by
Reuben Pereira
Committed by
Sean McGivern
Feb 06, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add list_projects endpoint to error tracking
parent
0ef68a58
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
158 additions
and
4 deletions
+158
-4
app/controllers/projects/error_tracking_controller.rb
app/controllers/projects/error_tracking_controller.rb
+40
-0
app/serializers/error_tracking/project_serializer.rb
app/serializers/error_tracking/project_serializer.rb
+1
-1
config/routes/project.rb
config/routes/project.rb
+5
-1
spec/controllers/projects/error_tracking_controller_spec.rb
spec/controllers/projects/error_tracking_controller_spec.rb
+112
-2
No files found.
app/controllers/projects/error_tracking_controller.rb
View file @
e5c58b44
...
...
@@ -15,6 +15,14 @@ class Projects::ErrorTrackingController < Projects::ApplicationController
end
end
def
list_projects
respond_to
do
|
format
|
format
.
json
do
render_project_list_json
end
end
end
private
def
render_index_json
...
...
@@ -32,6 +40,32 @@ class Projects::ErrorTrackingController < Projects::ApplicationController
}
end
def
render_project_list_json
service
=
ErrorTracking
::
ListProjectsService
.
new
(
project
,
current_user
,
list_projects_params
)
result
=
service
.
execute
if
result
[
:status
]
==
:success
render
json:
{
projects:
serialize_projects
(
result
[
:projects
])
}
else
return
render
(
status:
result
[
:http_status
]
||
:bad_request
,
json:
{
message:
result
[
:message
]
}
)
end
end
def
list_projects_params
params
.
require
(
:error_tracking_setting
).
permit
([
:api_host
,
:token
])
end
def
set_polling_interval
Gitlab
::
PollingInterval
.
set_header
(
response
,
interval:
POLLING_INTERVAL
)
end
...
...
@@ -41,4 +75,10 @@ class Projects::ErrorTrackingController < Projects::ApplicationController
.
new
(
project:
project
,
user:
current_user
)
.
represent
(
errors
)
end
def
serialize_projects
(
projects
)
ErrorTracking
::
ProjectSerializer
.
new
(
project:
project
,
user:
current_user
)
.
represent
(
projects
)
end
end
app/serializers/error_tracking/project_serializer.rb
View file @
e5c58b44
...
...
@@ -2,6 +2,6 @@
module
ErrorTracking
class
ProjectSerializer
<
BaseSerializer
entity
ProjectEntity
entity
ErrorTracking
::
ProjectEntity
end
end
config/routes/project.rb
View file @
e5c58b44
...
...
@@ -444,7 +444,11 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do
end
end
resources
:error_tracking
,
only:
[
:index
],
controller: :error_tracking
resources
:error_tracking
,
only:
[
:index
],
controller: :error_tracking
do
collection
do
post
:list_projects
end
end
# Since both wiki and repository routing contains wildcard characters
# its preferable to keep it below all other project routes
...
...
spec/controllers/projects/error_tracking_controller_spec.rb
View file @
e5c58b44
...
...
@@ -107,8 +107,11 @@ describe Projects::ErrorTrackingController do
let
(
:http_status
)
{
:no_content
}
before
do
expect
(
list_issues_service
).
to
receive
(
:execute
)
.
and_return
(
status: :error
,
message:
error_message
,
http_status:
http_status
)
expect
(
list_issues_service
).
to
receive
(
:execute
).
and_return
(
status: :error
,
message:
error_message
,
http_status:
http_status
)
end
it
'returns http_status with message'
do
...
...
@@ -122,6 +125,113 @@ describe Projects::ErrorTrackingController do
end
end
describe
'POST #list_projects'
do
context
'with insufficient permissions'
do
before
do
project
.
add_guest
(
user
)
end
it
'returns 404'
do
post
:list_projects
,
params:
list_projects_params
expect
(
response
).
to
have_gitlab_http_status
(
:not_found
)
end
end
context
'with an anonymous user'
do
before
do
sign_out
(
user
)
end
it
'redirects to sign-in page'
do
post
:list_projects
,
params:
list_projects_params
expect
(
response
).
to
have_gitlab_http_status
(
:unauthorized
)
end
end
context
'with authorized user'
do
let
(
:list_projects_service
)
{
spy
(
:list_projects_service
)
}
let
(
:sentry_project
)
{
build
(
:error_tracking_project
)
}
let
(
:permitted_params
)
do
ActionController
::
Parameters
.
new
(
list_projects_params
[
:error_tracking_setting
]
).
permit!
end
before
do
allow
(
ErrorTracking
::
ListProjectsService
)
.
to
receive
(
:new
).
with
(
project
,
user
,
permitted_params
)
.
and_return
(
list_projects_service
)
end
context
'service result is successful'
do
before
do
expect
(
list_projects_service
).
to
receive
(
:execute
)
.
and_return
(
status: :success
,
projects:
[
sentry_project
])
end
it
'returns a list of projects'
do
post
:list_projects
,
params:
list_projects_params
expect
(
response
).
to
have_gitlab_http_status
(
:ok
)
expect
(
response
).
to
match_response_schema
(
'error_tracking/list_projects'
)
expect
(
json_response
[
'projects'
]).
to
eq
([
sentry_project
].
as_json
)
end
end
context
'service result is erroneous'
do
let
(
:error_message
)
{
'error message'
}
context
'without http_status'
do
before
do
expect
(
list_projects_service
).
to
receive
(
:execute
)
.
and_return
(
status: :error
,
message:
error_message
)
end
it
'returns 400 with message'
do
get
:list_projects
,
params:
list_projects_params
expect
(
response
).
to
have_gitlab_http_status
(
:bad_request
)
expect
(
json_response
[
'message'
]).
to
eq
(
error_message
)
end
end
context
'with explicit http_status'
do
let
(
:http_status
)
{
:no_content
}
before
do
expect
(
list_projects_service
).
to
receive
(
:execute
).
and_return
(
status: :error
,
message:
error_message
,
http_status:
http_status
)
end
it
'returns http_status with message'
do
get
:list_projects
,
params:
list_projects_params
expect
(
response
).
to
have_gitlab_http_status
(
http_status
)
expect
(
json_response
[
'message'
]).
to
eq
(
error_message
)
end
end
end
end
private
def
list_projects_params
(
opts
=
{})
project_params
(
format: :json
,
error_tracking_setting:
{
api_host:
'gitlab.com'
,
token:
'token'
}
)
end
end
private
def
project_params
(
opts
=
{})
...
...
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