summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBerna Castro <bernacas@gmail.com>2016-12-15 15:51:50 +0100
committerOswaldo Ferreira <oswaldo@gitlab.com>2017-01-27 20:20:17 -0200
commitac66268443b05029cbc45cc358f62b764f1ff165 (patch)
tree1c662775a6c480449ba2a074ec0bb4397dc38700
parent08481a710319073065776fb6297b337dc1dc7ae8 (diff)
downloadgitlab-ce-ac66268443b05029cbc45cc358f62b764f1ff165.tar.gz
Refactor Project#to_reference and make full_path a keyword argument
Refactor overall code and fix failing specs Fix Project#to_reference Fix wrong spaces and update changelog Refactor #to_reference for Project & Issue Fix and improves Project#to_reference
-rw-r--r--app/models/issue.rb4
-rw-r--r--app/models/project.rb46
-rw-r--r--app/views/projects/issues/_issue.html.haml8
-rw-r--r--changelogs/unreleased/23634-remove-project-grouping.yml4
-rw-r--r--spec/models/issue_spec.rb66
-rw-r--r--spec/models/project_spec.rb38
6 files changed, 124 insertions, 42 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 65638d9a299..41cca47b015 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -97,10 +97,10 @@ class Issue < ActiveRecord::Base
end
end
- def to_reference(from_project = nil, full: false)
+ def to_reference(from = nil, full_path: false)
reference = "#{self.class.reference_prefix}#{iid}"
- "#{project.to_reference(from_project, full: full)}#{reference}"
+ "#{project.to_reference(from, full_path: full_path)}#{reference}"
end
def referenced_merge_requests(current_user = nil)
diff --git a/app/models/project.rb b/app/models/project.rb
index b6ec54af3f3..52df648ede6 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -591,20 +591,10 @@ class Project < ActiveRecord::Base
end
end
- def to_reference(from_project = nil, from_group = nil)
- if from_group.nil?
- if cross_namespace_reference?(from_project)
- path_with_namespace
- elsif cross_project_reference?(from_project)
- path
- elsif self == from_project
- nil
- else
- path_with_namespace
- end
- else
- path
- end
+ def to_reference(from = nil, full_path: false)
+ return path_with_namespace if full_path
+
+ path_from(from)
end
def to_human_reference(from_project = nil)
@@ -1299,21 +1289,33 @@ class Project < ActiveRecord::Base
private
+ def path_from(from)
+ if cross_namespace_reference?(from)
+ path_with_namespace
+ elsif cross_project_reference?(from)
+ path
+ end
+ end
+
+ def cross_namespace_reference?(from)
+ if from.is_a?(Project)
+ from && namespace != from.namespace
+ else
+ from && namespace != from
+ end
+ end
+
# Check if a reference is being done cross-project
- #
- # from_project - Refering Project object
- def cross_project_reference?(from_project)
- from_project && self != from_project
+ def cross_project_reference?(from)
+ return true if from.is_a?(Namespace)
+
+ from && self != from
end
def pushes_since_gc_redis_key
"projects/#{id}/pushes_since_gc"
end
- def cross_namespace_reference?(from_project)
- from_project && namespace != from_project.namespace
- end
-
def default_branch_protected?
current_application_settings.default_branch_protection == Gitlab::Access::PROTECTION_FULL ||
current_application_settings.default_branch_protection == Gitlab::Access::PROTECTION_DEV_CAN_MERGE
diff --git a/app/views/projects/issues/_issue.html.haml b/app/views/projects/issues/_issue.html.haml
index 8bb3fe6ba26..6cfbab92f0f 100644
--- a/app/views/projects/issues/_issue.html.haml
+++ b/app/views/projects/issues/_issue.html.haml
@@ -34,7 +34,13 @@
= note_count
.issue-info
- #{issue.to_reference(@project, @group)} &middot;
+ - if controller_name == "dashboard"
+ #{issue.to_reference(full_path: true)}
+ - else
+ #{issue.to_reference(@group || @project)}
+
+ &middot;
+
opened #{time_ago_with_tooltip(issue.created_at, placement: 'bottom')}
by #{link_to_member(@project, issue.author, avatar: false)}
- if issue.milestone
diff --git a/changelogs/unreleased/23634-remove-project-grouping.yml b/changelogs/unreleased/23634-remove-project-grouping.yml
new file mode 100644
index 00000000000..dde8b2d1815
--- /dev/null
+++ b/changelogs/unreleased/23634-remove-project-grouping.yml
@@ -0,0 +1,4 @@
+---
+title: Don't group issues by project on group-level and dashboard issue indexes.
+merge_request: 8111
+author: Bernardo Castro
diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb
index 5c37141e3ad..623238e9d86 100644
--- a/spec/models/issue_spec.rb
+++ b/spec/models/issue_spec.rb
@@ -23,19 +23,37 @@ describe Issue, models: true do
end
describe '#to_reference' do
- let(:project) { build(:empty_project, name: 'sample-project') }
- let(:issue) { build(:issue, iid: 1, project: project) }
+ let(:namespace) { build(:namespace, path: 'sample-namespace') }
+ let(:project) { build(:empty_project, name: 'sample-project', namespace: namespace) }
+ let(:issue) { build(:issue, iid: 1, project: project) }
+ let(:group) { create(:group, name: 'Group', path: 'sample-group') }
+
+ context 'when nil argument' do
+ it 'returns issue id' do
+ expect(issue.to_reference).to eq "#1"
+ end
+ end
- it 'returns a String reference to the object' do
- expect(issue.to_reference).to eq "#{project.namespace.name}/sample-project#1"
+ context 'when full_path is true' do
+ it 'returns complete path to the issue' do
+ expect(issue.to_reference(full_path: true)).to eq 'sample-namespace/sample-project#1'
+ expect(issue.to_reference(project, full_path: true)).to eq 'sample-namespace/sample-project#1'
+ expect(issue.to_reference(group, full_path: true)).to eq 'sample-namespace/sample-project#1'
+ end
end
- it 'supports a project reference' do
- expect(issue.to_reference(project)).to eq "#1"
+ context 'when same project argument' do
+ it 'returns issue id' do
+ expect(issue.to_reference(project)).to eq("#1")
+ end
end
- it 'returns a String reference with the full path' do
- expect(issue.to_reference(full: true)).to eq(project.path_with_namespace + '#1')
+ context 'when cross namespace project argument' do
+ let(:another_namespace_project) { create(:empty_project, name: 'another-project') }
+
+ it 'returns complete path to the issue' do
+ expect(issue.to_reference(another_namespace_project)).to eq 'sample-namespace/sample-project#1'
+ end
end
it 'supports a cross-project reference' do
@@ -43,9 +61,35 @@ describe Issue, models: true do
expect(issue.to_reference(another_project)).to eq "sample-project#1"
end
- it 'supports a group reference' do
- group = build(:group, name: 'sample-group')
- expect(issue.to_reference(nil, group)).to eq("sample-project#1")
+ context 'when same namespace / cross-project argument' do
+ let(:another_project) { create(:empty_project, namespace: namespace) }
+
+ it 'returns path to the issue with the project name' do
+ expect(issue.to_reference(another_project)).to eq 'sample-project#1'
+ end
+ end
+
+ context 'when different namespace / cross-project argument' do
+ let(:another_namespace) { create(:namespace, path: 'another-namespace') }
+ let(:another_project) { create(:empty_project, path: 'another-project', namespace: another_namespace) }
+
+ it 'returns full path to the issue' do
+ expect(issue.to_reference(another_project)).to eq 'sample-namespace/sample-project#1'
+ end
+ end
+
+ context 'when argument is a namespace' do
+ context 'with same project path' do
+ it 'returns path to the issue with the project name' do
+ expect(issue.to_reference(namespace)).to eq 'sample-project#1'
+ end
+ end
+
+ context 'with different project path' do
+ it 'returns full path to the issue' do
+ expect(issue.to_reference(group)).to eq 'sample-namespace/sample-project#1'
+ end
+ end
end
end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index d99c18ebe1e..7d61c26a6e9 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -282,13 +282,22 @@ describe Project, models: true do
end
describe '#to_reference' do
- let(:owner) { create(:user, name: 'Gitlab') }
+ let(:owner) { create(:user, name: 'Gitlab') }
let(:namespace) { create(:namespace, path: 'sample-namespace', owner: owner) }
- let(:project) { create(:empty_project, path: 'sample-project', namespace: namespace) }
+ let(:project) { create(:empty_project, path: 'sample-project', namespace: namespace) }
+ let(:group) { create(:group, name: 'Group', path: 'sample-group', owner: owner) }
context 'when nil argument' do
+ it 'returns nil' do
+ expect(project.to_reference).to be_nil
+ end
+ end
+
+ context 'when full_path is true' do
it 'returns complete path to the project' do
- expect(project.to_reference).to eq 'sample-namespace/sample-project'
+ expect(project.to_reference(full_path: true)).to eq 'sample-namespace/sample-project'
+ expect(project.to_reference(project, full_path: true)).to eq 'sample-namespace/sample-project'
+ expect(project.to_reference(group, full_path: true)).to eq 'sample-namespace/sample-project'
end
end
@@ -314,9 +323,26 @@ describe Project, models: true do
end
end
- context 'when group argument' do
- it 'returns path to the project' do
- expect(project.to_reference(nil, namespace)).to eq 'sample-project'
+ context 'when different namespace / cross-project argument' do
+ let(:another_namespace) { create(:namespace, path: 'another-namespace', owner: owner) }
+ let(:another_project) { create(:empty_project, path: 'another-project', namespace: another_namespace) }
+
+ it 'returns full path to the project' do
+ expect(project.to_reference(another_project)).to eq 'sample-namespace/sample-project'
+ end
+ end
+
+ context 'when argument is a namespace' do
+ context 'with same project path' do
+ it 'returns path to the project' do
+ expect(project.to_reference(namespace)).to eq 'sample-project'
+ end
+ end
+
+ context 'with different project path' do
+ it 'returns full path to the project' do
+ expect(project.to_reference(group)).to eq 'sample-namespace/sample-project'
+ end
end
end
end