diff options
author | Berna Castro <bernacas@gmail.com> | 2016-12-15 15:51:50 +0100 |
---|---|---|
committer | Oswaldo Ferreira <oswaldo@gitlab.com> | 2017-01-27 20:20:17 -0200 |
commit | ac66268443b05029cbc45cc358f62b764f1ff165 (patch) | |
tree | 1c662775a6c480449ba2a074ec0bb4397dc38700 | |
parent | 08481a710319073065776fb6297b337dc1dc7ae8 (diff) | |
download | gitlab-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.rb | 4 | ||||
-rw-r--r-- | app/models/project.rb | 46 | ||||
-rw-r--r-- | app/views/projects/issues/_issue.html.haml | 8 | ||||
-rw-r--r-- | changelogs/unreleased/23634-remove-project-grouping.yml | 4 | ||||
-rw-r--r-- | spec/models/issue_spec.rb | 66 | ||||
-rw-r--r-- | spec/models/project_spec.rb | 38 |
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)} · + - if controller_name == "dashboard" + #{issue.to_reference(full_path: true)} + - else + #{issue.to_reference(@group || @project)} + + · + 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 |