Commit 6c5e9480 authored by Gosia Ksionek's avatar Gosia Ksionek Committed by Mayra Cabrera

Fix error on project name

Add project path to sql query to build proper path
parent 1dfbb27f
...@@ -26,6 +26,6 @@ class AnalyticsIssueEntity < Grape::Entity ...@@ -26,6 +26,6 @@ class AnalyticsIssueEntity < Grape::Entity
private private
def url_to(route, object) def url_to(route, object)
public_send("#{route}_url", object[:path], object[:name], object[:iid].to_s) # rubocop:disable GitlabSecurity/PublicSend public_send("#{route}_url", object[:namespace_path], object[:project_path], object[:iid].to_s) # rubocop:disable GitlabSecurity/PublicSend
end end
end end
---
title: Fix broken issue links and possible 500 error on cycle analytics page when project name and path are different
merge_request: 31471
author:
type: fixed
...@@ -19,9 +19,10 @@ module Gitlab ...@@ -19,9 +19,10 @@ module Gitlab
.join(projects_table).on(issue_table[:project_id].eq(projects_table[:id])) .join(projects_table).on(issue_table[:project_id].eq(projects_table[:id]))
.join(routes_table).on(projects_table[:namespace_id].eq(routes_table[:source_id])) .join(routes_table).on(projects_table[:namespace_id].eq(routes_table[:source_id]))
.project(issue_table[:project_id].as("project_id")) .project(issue_table[:project_id].as("project_id"))
.where(issue_table[:project_id].in(project_ids)) .project(projects_table[:path].as("project_path"))
.where(routes_table[:source_type].eq('Namespace')) .project(routes_table[:path].as("namespace_path"))
.where(issue_table[:created_at].gteq(options[:from]))
query = limit_query(query, project_ids)
# Load merge_requests # Load merge_requests
...@@ -30,6 +31,12 @@ module Gitlab ...@@ -30,6 +31,12 @@ module Gitlab
query query
end end
def limit_query(query, project_ids)
query.where(issue_table[:project_id].in(project_ids))
.where(routes_table[:source_type].eq('Namespace'))
.where(issue_table[:created_at].gteq(options[:from]))
end
def load_merge_requests(query) def load_merge_requests(query)
query.join(mr_table, Arel::Nodes::OuterJoin) query.join(mr_table, Arel::Nodes::OuterJoin)
.on(mr_table[:id].eq(mr_closing_issues_table[:merge_request_id])) .on(mr_table[:id].eq(mr_closing_issues_table[:merge_request_id]))
......
...@@ -11,9 +11,7 @@ module Gitlab ...@@ -11,9 +11,7 @@ module Gitlab
mr_table[:id], mr_table[:id],
mr_table[:created_at], mr_table[:created_at],
mr_table[:state], mr_table[:state],
mr_table[:author_id], mr_table[:author_id]]
projects_table[:name],
routes_table[:path]]
@order = mr_table[:created_at] @order = mr_table[:created_at]
super(*args) super(*args)
......
...@@ -10,9 +10,7 @@ module Gitlab ...@@ -10,9 +10,7 @@ module Gitlab
issue_table[:iid], issue_table[:iid],
issue_table[:id], issue_table[:id],
issue_table[:created_at], issue_table[:created_at],
issue_table[:author_id], issue_table[:author_id]]
projects_table[:name],
routes_table[:path]]
super(*args) super(*args)
end end
......
...@@ -8,12 +8,19 @@ module Gitlab ...@@ -8,12 +8,19 @@ module Gitlab
.join(projects_table).on(issue_table[:project_id].eq(projects_table[:id])) .join(projects_table).on(issue_table[:project_id].eq(projects_table[:id]))
.join(routes_table).on(projects_table[:namespace_id].eq(routes_table[:source_id])) .join(routes_table).on(projects_table[:namespace_id].eq(routes_table[:source_id]))
.project(issue_table[:project_id].as("project_id")) .project(issue_table[:project_id].as("project_id"))
.where(issue_table[:project_id].in(project_ids)) .project(projects_table[:path].as("project_path"))
.project(routes_table[:path].as("namespace_path"))
query = limit_query(query, project_ids)
query
end
def limit_query(query, project_ids)
query.where(issue_table[:project_id].in(project_ids))
.where(routes_table[:source_type].eq('Namespace')) .where(routes_table[:source_type].eq('Namespace'))
.where(issue_table[:created_at].gteq(options[:from])) .where(issue_table[:created_at].gteq(options[:from]))
.where(issue_metrics_table[:first_added_to_board_at].not_eq(nil).or(issue_metrics_table[:first_associated_with_milestone_at].not_eq(nil))) .where(issue_metrics_table[:first_added_to_board_at].not_eq(nil).or(issue_metrics_table[:first_associated_with_milestone_at].not_eq(nil)))
query
end end
end end
end end
......
...@@ -10,9 +10,7 @@ module Gitlab ...@@ -10,9 +10,7 @@ module Gitlab
issue_table[:iid], issue_table[:iid],
issue_table[:id], issue_table[:id],
issue_table[:created_at], issue_table[:created_at],
issue_table[:author_id], issue_table[:author_id]]
projects_table[:name],
routes_table[:path]]
super(*args) super(*args)
end end
......
...@@ -8,14 +8,16 @@ module Gitlab ...@@ -8,14 +8,16 @@ module Gitlab
.join(projects_table).on(issue_table[:project_id].eq(projects_table[:id])) .join(projects_table).on(issue_table[:project_id].eq(projects_table[:id]))
.join(routes_table).on(projects_table[:namespace_id].eq(routes_table[:source_id])) .join(routes_table).on(projects_table[:namespace_id].eq(routes_table[:source_id]))
.project(issue_table[:project_id].as("project_id")) .project(issue_table[:project_id].as("project_id"))
.project(projects_table[:path].as("project_path"))
.project(routes_table[:path].as("namespace_path"))
.where(issue_table[:project_id].in(project_ids)) .where(issue_table[:project_id].in(project_ids))
.where(routes_table[:source_type].eq('Namespace')) .where(routes_table[:source_type].eq('Namespace'))
query = add_conditions_to_query(query) query = limit_query(query)
query query
end end
def add_conditions_to_query(query) def limit_query(query)
query.where(issue_table[:created_at].gteq(options[:from])) query.where(issue_table[:created_at].gteq(options[:from]))
.where(issue_metrics_table[:first_added_to_board_at].not_eq(nil).or(issue_metrics_table[:first_associated_with_milestone_at].not_eq(nil))) .where(issue_metrics_table[:first_added_to_board_at].not_eq(nil).or(issue_metrics_table[:first_associated_with_milestone_at].not_eq(nil)))
.where(issue_metrics_table[:first_mentioned_in_commit_at].not_eq(nil)) .where(issue_metrics_table[:first_mentioned_in_commit_at].not_eq(nil))
......
...@@ -11,7 +11,6 @@ module Gitlab ...@@ -11,7 +11,6 @@ module Gitlab
issue_table[:id], issue_table[:id],
issue_table[:created_at], issue_table[:created_at],
issue_table[:author_id], issue_table[:author_id],
projects_table[:name],
routes_table[:path]] routes_table[:path]]
super(*args) super(*args)
......
...@@ -11,9 +11,7 @@ module Gitlab ...@@ -11,9 +11,7 @@ module Gitlab
mr_table[:id], mr_table[:id],
mr_table[:created_at], mr_table[:created_at],
mr_table[:state], mr_table[:state],
mr_table[:author_id], mr_table[:author_id]]
projects_table[:name],
routes_table[:path]]
super(*args) super(*args)
end end
......
...@@ -10,12 +10,12 @@ describe AnalyticsIssueEntity do ...@@ -10,12 +10,12 @@ describe AnalyticsIssueEntity do
id: "1", id: "1",
created_at: "2016-11-12 15:04:02.948604", created_at: "2016-11-12 15:04:02.948604",
author: user, author: user,
name: project.name, project_path: project.path,
path: project.namespace namespace_path: project.namespace.route.path
} }
end end
let(:project) { create(:project) } let(:project) { create(:project, name: 'my project') }
let(:request) { EntityRequest.new(entity: :merge_request) } let(:request) { EntityRequest.new(entity: :merge_request) }
let(:entity) do let(:entity) do
......
...@@ -8,7 +8,7 @@ describe AnalyticsIssueSerializer do ...@@ -8,7 +8,7 @@ describe AnalyticsIssueSerializer do
end end
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project) } let(:project) { create(:project, name: 'my project') }
let(:resource) do let(:resource) do
{ {
total_time: "172802.724419", total_time: "172802.724419",
...@@ -17,8 +17,8 @@ describe AnalyticsIssueSerializer do ...@@ -17,8 +17,8 @@ describe AnalyticsIssueSerializer do
id: "1", id: "1",
created_at: "2016-11-12 15:04:02.948604", created_at: "2016-11-12 15:04:02.948604",
author: user, author: user,
name: project.name, project_path: project.path,
path: project.namespace namespace_path: project.namespace.route.path
} }
end end
......
...@@ -8,7 +8,7 @@ describe AnalyticsMergeRequestSerializer do ...@@ -8,7 +8,7 @@ describe AnalyticsMergeRequestSerializer do
end end
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project) } let(:project) { create(:project, name: 'my project') }
let(:resource) do let(:resource) do
{ {
total_time: "172802.724419", total_time: "172802.724419",
...@@ -18,8 +18,8 @@ describe AnalyticsMergeRequestSerializer do ...@@ -18,8 +18,8 @@ describe AnalyticsMergeRequestSerializer do
state: 'open', state: 'open',
created_at: "2016-11-12 15:04:02.948604", created_at: "2016-11-12 15:04:02.948604",
author: user, author: user,
name: project.name, project_path: project.path,
path: project.namespace namespace_path: project.namespace.route.path
} }
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