Commit f4e66f2e authored by Dmitry Gruzd's avatar Dmitry Gruzd

Merge branch '345009-fix-todos-for-alerts' into 'master'

Fix todo API when used with Alerts

See merge request gitlab-org/gitlab!73812
parents 3df3912b 8f9f9877
...@@ -360,6 +360,8 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do ...@@ -360,6 +360,8 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do
get 'details', on: :member get 'details', on: :member
end end
get 'alert_management/:id', to: 'alert_management#details', as: 'alert_management_alert'
get 'work_items/*work_items_path' => 'work_items#index', as: :work_items get 'work_items/*work_items_path' => 'work_items#index', as: :work_items
resource :tracing, only: [:show] resource :tracing, only: [:show]
......
# frozen_string_literal: true
module API
module Entities
module AlertManagement
class Alert < Grape::Entity
expose :iid
expose :title
end
end
end
end
...@@ -33,7 +33,7 @@ module API ...@@ -33,7 +33,7 @@ module API
def todo_target_url(todo) def todo_target_url(todo)
return design_todo_target_url(todo) if todo.for_design? return design_todo_target_url(todo) if todo.for_design?
target_type = todo.target_type.underscore target_type = todo.target_type.gsub('::', '_').underscore
target_url = "#{todo.resource_parent.class.to_s.underscore}_#{target_type}_url" target_url = "#{todo.resource_parent.class.to_s.underscore}_#{target_type}_url"
Gitlab::Routing Gitlab::Routing
......
...@@ -13,6 +13,8 @@ RSpec.describe API::Todos do ...@@ -13,6 +13,8 @@ RSpec.describe API::Todos do
let_it_be(:john_doe) { create(:user, username: 'john_doe') } let_it_be(:john_doe) { create(:user, username: 'john_doe') }
let_it_be(:issue) { create(:issue, project: project_1) } let_it_be(:issue) { create(:issue, project: project_1) }
let_it_be(:merge_request) { create(:merge_request, source_project: project_1) } let_it_be(:merge_request) { create(:merge_request, source_project: project_1) }
let_it_be(:alert) { create(:alert_management_alert, project: project_1) }
let_it_be(:alert_todo) { create(:todo, project: project_1, author: john_doe, user: john_doe, target: alert) }
let_it_be(:merge_request_todo) { create(:todo, project: project_1, author: author_2, user: john_doe, target: merge_request) } let_it_be(:merge_request_todo) { create(:todo, project: project_1, author: author_2, user: john_doe, target: merge_request) }
let_it_be(:pending_1) { create(:todo, :mentioned, project: project_1, author: author_1, user: john_doe, target: issue) } let_it_be(:pending_1) { create(:todo, :mentioned, project: project_1, author: author_1, user: john_doe, target: issue) }
let_it_be(:pending_2) { create(:todo, project: project_2, author: author_2, user: john_doe, target: issue) } let_it_be(:pending_2) { create(:todo, project: project_2, author: author_2, user: john_doe, target: issue) }
...@@ -67,7 +69,7 @@ RSpec.describe API::Todos do ...@@ -67,7 +69,7 @@ RSpec.describe API::Todos do
expect(response).to have_gitlab_http_status(:ok) expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers expect(response).to include_pagination_headers
expect(json_response).to be_an Array expect(json_response).to be_an Array
expect(json_response.length).to eq(4) expect(json_response.length).to eq(5)
expect(json_response[0]['id']).to eq(pending_3.id) expect(json_response[0]['id']).to eq(pending_3.id)
expect(json_response[0]['project']).to be_a Hash expect(json_response[0]['project']).to be_a Hash
expect(json_response[0]['author']).to be_a Hash expect(json_response[0]['author']).to be_a Hash
...@@ -95,6 +97,10 @@ RSpec.describe API::Todos do ...@@ -95,6 +97,10 @@ RSpec.describe API::Todos do
expect(json_response[3]['target']['merge_requests_count']).to be_nil expect(json_response[3]['target']['merge_requests_count']).to be_nil
expect(json_response[3]['target']['upvotes']).to eq(1) expect(json_response[3]['target']['upvotes']).to eq(1)
expect(json_response[3]['target']['downvotes']).to eq(0) expect(json_response[3]['target']['downvotes']).to eq(0)
expect(json_response[4]['target_type']).to eq('AlertManagement::Alert')
expect(json_response[4]['target']['iid']).to eq(alert.iid)
expect(json_response[4]['target']['title']).to eq(alert.title)
end end
context "when current user does not have access to one of the TODO's target" do context "when current user does not have access to one of the TODO's target" do
...@@ -105,7 +111,7 @@ RSpec.describe API::Todos do ...@@ -105,7 +111,7 @@ RSpec.describe API::Todos do
get api('/todos', john_doe) get api('/todos', john_doe)
expect(json_response.count).to eq(4) expect(json_response.count).to eq(5)
expect(json_response.map { |t| t['id'] }).not_to include(no_access_todo.id, pending_4.id) expect(json_response.map { |t| t['id'] }).not_to include(no_access_todo.id, pending_4.id)
end end
end end
...@@ -163,7 +169,7 @@ RSpec.describe API::Todos do ...@@ -163,7 +169,7 @@ RSpec.describe API::Todos do
expect(response).to have_gitlab_http_status(:ok) expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers expect(response).to include_pagination_headers
expect(json_response).to be_an Array expect(json_response).to be_an Array
expect(json_response.length).to eq(3) expect(json_response.length).to eq(4)
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment