From 8c77a1fb250cf6d6ca06bedc3b52fc62f1cc4819 Mon Sep 17 00:00:00 2001 From: Katarzyna Kobierska Date: Thu, 1 Sep 2016 13:42:17 +0200 Subject: Before deleting project if forked unlink fork --- app/services/projects/destroy_service.rb | 2 ++ spec/controllers/projects_controller_spec.rb | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/app/services/projects/destroy_service.rb b/app/services/projects/destroy_service.rb index 8a53f65aec1..a08c6fcd94b 100644 --- a/app/services/projects/destroy_service.rb +++ b/app/services/projects/destroy_service.rb @@ -27,6 +27,8 @@ module Projects # Git data (e.g. a list of branch names). flush_caches(project, wiki_path) + Projects::UnlinkForkService.new(project, current_user).execute + Project.transaction do project.destroy! diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb index ffe0641ddd7..95315d86c4d 100644 --- a/spec/controllers/projects_controller_spec.rb +++ b/spec/controllers/projects_controller_spec.rb @@ -181,6 +181,23 @@ describe ProjectsController do expect(response).to have_http_status(302) expect(response).to redirect_to(dashboard_projects_path) end + + context "when project is forked" do + let(:project) { create(:project) } + let(:fork_project) { create(:project, forked_from_project: project) } + let(:merge_request) do + create(:merge_request, + source_project: fork_project, + target_project: project) + end + + it "closes all related merge requests" do + fork_project.destroy + + expect(fork_project.destroyed?).to be_truthy + expect(merge_request.state).to eq('closed') + end + end end describe "POST #toggle_star" do -- cgit v1.2.1 From 09cded29d8b86cafbcfaed57b1d915588195f69f Mon Sep 17 00:00:00 2001 From: Katarzyna Kobierska Date: Fri, 2 Sep 2016 13:36:25 +0200 Subject: Checks if deleting forked project closed all open merge requests --- app/controllers/projects/merge_requests_controller.rb | 4 ++-- app/models/merge_request.rb | 2 +- spec/controllers/projects_controller_spec.rb | 8 +++++--- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 8895cb955bd..479b2d1d900 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -429,7 +429,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController def validates_merge_request # If source project was removed (Ex. mr from fork to origin) - return invalid_mr unless @merge_request.source_project + # return invalid_mr unless @merge_request.source_project # Show git not found page # if there is no saved commits between source & target branch @@ -438,7 +438,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController return invalid_mr unless @merge_request.target_branch_exists? # or if source branch doesn't exist - return invalid_mr unless @merge_request.source_branch_exists? + # return invalid_mr unless @merge_request.source_branch_exists? end end diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index b0b1313f94a..7d3c8c5078a 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -313,7 +313,7 @@ class MergeRequest < ActiveRecord::Base end def closed_without_fork? - closed? && forked_source_project_missing? + closed? && (forked_source_project_missing? || !source_project) end def forked_source_project_missing? diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb index 95315d86c4d..4f5741f1647 100644 --- a/spec/controllers/projects_controller_spec.rb +++ b/spec/controllers/projects_controller_spec.rb @@ -192,10 +192,12 @@ describe ProjectsController do end it "closes all related merge requests" do - fork_project.destroy + project.merge_requests << merge_request + sign_in(admin) - expect(fork_project.destroyed?).to be_truthy - expect(merge_request.state).to eq('closed') + delete :destroy, namespace_id: fork_project.namespace.path, id: fork_project.path + + expect(merge_request.reload.state).to eq('closed') end end end -- cgit v1.2.1 From 31c37c6c38258684fc92e0d91119c33872e39034 Mon Sep 17 00:00:00 2001 From: Katarzyna Kobierska Date: Fri, 2 Sep 2016 15:36:59 +0200 Subject: Add #closed_without_source_project? --- app/models/merge_request.rb | 6 ++++- .../projects/merge_requests/_discussion.html.haml | 2 +- app/views/projects/merge_requests/_show.html.haml | 31 ++++++++++++---------- spec/controllers/projects_controller_spec.rb | 6 ++--- 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 7d3c8c5078a..f752a4fd1cc 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -313,7 +313,11 @@ class MergeRequest < ActiveRecord::Base end def closed_without_fork? - closed? && (forked_source_project_missing? || !source_project) + closed? && forked_source_project_missing? + end + + def closed_without_source_project? + closed? && !source_project end def forked_source_project_missing? diff --git a/app/views/projects/merge_requests/_discussion.html.haml b/app/views/projects/merge_requests/_discussion.html.haml index d070979bcfe..0aec7b2fbbb 100644 --- a/app/views/projects/merge_requests/_discussion.html.haml +++ b/app/views/projects/merge_requests/_discussion.html.haml @@ -2,7 +2,7 @@ - if can?(current_user, :update_merge_request, @merge_request) - if @merge_request.open? = link_to 'Close merge request', merge_request_path(@merge_request, merge_request: {state_event: :close }), method: :put, class: "btn btn-nr btn-comment btn-close close-mr-link js-note-target-close", title: "Close merge request", data: {original_text: "Close merge request", alternative_text: "Comment & close merge request"} - - if @merge_request.closed? + - unless @merge_request.open? || @merge_request.closed_without_fork? = link_to 'Reopen merge request', merge_request_path(@merge_request, merge_request: {state_event: :reopen }), method: :put, class: "btn btn-nr btn-comment btn-reopen reopen-mr-link js-note-target-reopen", title: "Reopen merge request", data: {original_text: "Reopen merge request", alternative_text: "Comment & reopen merge request"} %comment-and-resolve-btn{ "inline-template" => true, ":discussion-id" => "" } %button.btn.btn-nr.btn-default.append-right-10.js-comment-resolve-button{ "v-if" => "showButton", type: "submit", data: { namespace_path: "#{@merge_request.project.namespace.path}", project_path: "#{@merge_request.project.path}" } } diff --git a/app/views/projects/merge_requests/_show.html.haml b/app/views/projects/merge_requests/_show.html.haml index 4b4d418e8ec..d03ff9ec7e8 100644 --- a/app/views/projects/merge_requests/_show.html.haml +++ b/app/views/projects/merge_requests/_show.html.haml @@ -29,17 +29,19 @@ %ul.dropdown-menu.dropdown-menu-align-right %li= link_to "Email Patches", merge_request_path(@merge_request, format: :patch) %li= link_to "Plain Diff", merge_request_path(@merge_request, format: :diff) - .normal - %span Request to merge - %span.label-branch= source_branch_with_namespace(@merge_request) - %span into - %span.label-branch - = link_to @merge_request.target_branch, namespace_project_commits_path(@project.namespace, @project, @merge_request.target_branch) - - if @merge_request.open? && @merge_request.diverged_from_target_branch? - %span (#{pluralize(@merge_request.diverged_commits_count, 'commit')} behind) + - unless @merge_request.closed_without_fork? + .normal + %span Request to merge + %span.label-branch= source_branch_with_namespace(@merge_request) + %span into + %span.label-branch + = link_to @merge_request.target_branch, namespace_project_commits_path(@project.namespace, @project, @merge_request.target_branch) + - if @merge_request.open? && @merge_request.diverged_from_target_branch? + %span (#{pluralize(@merge_request.diverged_commits_count, 'commit')} behind) - = render "projects/merge_requests/show/how_to_merge" - = render "projects/merge_requests/widget/show.html.haml" + - unless @merge_request.closed_without_source_project? + = render "projects/merge_requests/show/how_to_merge" + = render "projects/merge_requests/widget/show.html.haml" - if @merge_request.source_branch_exists? && @merge_request.mergeable? && @merge_request.can_be_merged_by?(current_user) .light.prepend-top-default.append-bottom-default @@ -53,10 +55,11 @@ = link_to namespace_project_merge_request_path(@project.namespace, @project, @merge_request), data: { target: 'div#notes', action: 'notes', toggle: 'tab' } do Discussion %span.badge= @merge_request.mr_and_commit_notes.user.count - %li.commits-tab - = link_to commits_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), data: { target: 'div#commits', action: 'commits', toggle: 'tab' } do - Commits - %span.badge= @commits_count + - unless @merge_request.closed_without_source_project? + %li.commits-tab + = link_to commits_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), data: { target: 'div#commits', action: 'commits', toggle: 'tab' } do + Commits + %span.badge= @commits_count - if @pipeline %li.pipelines-tab = link_to pipelines_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), data: { target: '#pipelines', action: 'pipelines', toggle: 'tab' } do diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb index 4f5741f1647..da75f4ccd2c 100644 --- a/spec/controllers/projects_controller_spec.rb +++ b/spec/controllers/projects_controller_spec.rb @@ -186,9 +186,9 @@ describe ProjectsController do let(:project) { create(:project) } let(:fork_project) { create(:project, forked_from_project: project) } let(:merge_request) do - create(:merge_request, - source_project: fork_project, - target_project: project) + create(:merge_request, + source_project: fork_project, + target_project: project) end it "closes all related merge requests" do -- cgit v1.2.1 From 81da7f137807a9f8c35b6c96b6034975558ddf97 Mon Sep 17 00:00:00 2001 From: Katarzyna Kobierska Date: Mon, 5 Sep 2016 13:42:35 +0200 Subject: Add test checking method closed_without_source_project --- .../projects/merge_requests_controller.rb | 6 ---- spec/models/merge_request_spec.rb | 38 ++++++++++++++++++++++ 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 479b2d1d900..aa8645ba8cc 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -428,17 +428,11 @@ class Projects::MergeRequestsController < Projects::ApplicationController end def validates_merge_request - # If source project was removed (Ex. mr from fork to origin) - # return invalid_mr unless @merge_request.source_project - # Show git not found page # if there is no saved commits between source & target branch if @merge_request.commits.blank? # and if target branch doesn't exist return invalid_mr unless @merge_request.target_branch_exists? - - # or if source branch doesn't exist - # return invalid_mr unless @merge_request.source_branch_exists? end end diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 5bf3b8e609e..e223d51aa6a 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -1038,4 +1038,42 @@ describe MergeRequest, models: true do end end end + + describe "#closed_without_source_project?" do + let(:project) { create(:project) } + let(:fork_project) { create(:project, forked_from_project: project) } + let(:user) { create(:user) } + let(:destroy_project) { Projects::DestroyService.new(fork_project, user, {}) } + + context "when the merge request is closed" do + let(:closed_merge_request) do + create(:closed_merge_request, + source_project: fork_project, + target_project: project) + end + + it "returns false if the source project exist" do + expect(closed_merge_request.closed_without_source_project?).to be_falsey + end + + it "returns true if the source project does not exist" do + destroy_project.async_execute + closed_merge_request.reload + + expect(closed_merge_request.closed_without_source_project?).to be_truthy + end + end + + context "when the merge request is open" do + let(:open_merge_request) do + create(:merge_request, + source_project: fork_project, + target_project: project) + end + + it "returns false" do + expect(open_merge_request.closed_without_source_project?).to be_falsey + end + end + end end -- cgit v1.2.1 From 554baec9e8d2d077afff5502fdfa4ab78036499c Mon Sep 17 00:00:00 2001 From: Katarzyna Kobierska Date: Tue, 6 Sep 2016 16:48:59 +0200 Subject: Add method --- app/models/merge_request.rb | 7 +++++++ spec/models/merge_request_spec.rb | 13 +++++++++++++ 2 files changed, 20 insertions(+) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index f752a4fd1cc..5986a464bbc 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -327,6 +327,13 @@ class MergeRequest < ActiveRecord::Base !source_project.forked_from?(target_project) end + def can_reopen? + return false if closed_without_fork? || closed_without_source_project? + return true if closed? + + # false + end + def ensure_merge_request_diff merge_request_diff || create_merge_request_diff end diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index e223d51aa6a..4780d9fb3fe 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -1076,4 +1076,17 @@ describe MergeRequest, models: true do end end end + + describe '#can_reopen?' do + it "returns true" do + subject.close + binding.pry + + expect(subject.can_reopen?).to be_truthy + end + + it "returns false" do + expect(subject.can_reopen?).to be_falsey + end + end end -- cgit v1.2.1 From 34c146a17dbb66322bc57b0755c979c05e7d4340 Mon Sep 17 00:00:00 2001 From: Katarzyna Kobierska Date: Thu, 8 Sep 2016 13:25:16 +0200 Subject: Add #can_reopen? and tests --- app/helpers/merge_requests_helper.rb | 2 +- app/models/merge_request.rb | 4 +- .../projects/merge_requests/_discussion.html.haml | 2 +- spec/models/merge_request_spec.rb | 64 +++++++++++++++------- 4 files changed, 48 insertions(+), 24 deletions(-) diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb index 8abe7865fed..e9a61e2c2a6 100644 --- a/app/helpers/merge_requests_helper.rb +++ b/app/helpers/merge_requests_helper.rb @@ -98,7 +98,7 @@ module MergeRequestsHelper end def merge_request_button_visibility(merge_request, closed) - return 'hidden' if merge_request.closed? == closed || (merge_request.merged? == closed && !merge_request.closed?) || merge_request.closed_without_fork? + return 'hidden' if merge_request.can_reopen? end def merge_request_version_path(project, merge_request, merge_request_diff, start_sha = nil) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 5986a464bbc..014a6ce023b 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -328,10 +328,8 @@ class MergeRequest < ActiveRecord::Base end def can_reopen? - return false if closed_without_fork? || closed_without_source_project? + return false if closed_without_fork? || closed_without_source_project? || merged? return true if closed? - - # false end def ensure_merge_request_diff diff --git a/app/views/projects/merge_requests/_discussion.html.haml b/app/views/projects/merge_requests/_discussion.html.haml index 0aec7b2fbbb..b8013c4ee82 100644 --- a/app/views/projects/merge_requests/_discussion.html.haml +++ b/app/views/projects/merge_requests/_discussion.html.haml @@ -2,7 +2,7 @@ - if can?(current_user, :update_merge_request, @merge_request) - if @merge_request.open? = link_to 'Close merge request', merge_request_path(@merge_request, merge_request: {state_event: :close }), method: :put, class: "btn btn-nr btn-comment btn-close close-mr-link js-note-target-close", title: "Close merge request", data: {original_text: "Close merge request", alternative_text: "Comment & close merge request"} - - unless @merge_request.open? || @merge_request.closed_without_fork? + - if @merge_request.can_reopen? = link_to 'Reopen merge request', merge_request_path(@merge_request, merge_request: {state_event: :reopen }), method: :put, class: "btn btn-nr btn-comment btn-reopen reopen-mr-link js-note-target-reopen", title: "Reopen merge request", data: {original_text: "Reopen merge request", alternative_text: "Comment & reopen merge request"} %comment-and-resolve-btn{ "inline-template" => true, ":discussion-id" => "" } %button.btn.btn-nr.btn-default.append-right-10.js-comment-resolve-button{ "v-if" => "showButton", type: "submit", data: { namespace_path: "#{@merge_request.project.namespace.path}", project_path: "#{@merge_request.project.path}" } } diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 4780d9fb3fe..d58156ba045 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -1039,24 +1039,24 @@ describe MergeRequest, models: true do end end - describe "#closed_without_source_project?" do + describe '#closed_without_source_project?' do let(:project) { create(:project) } let(:fork_project) { create(:project, forked_from_project: project) } let(:user) { create(:user) } let(:destroy_project) { Projects::DestroyService.new(fork_project, user, {}) } - context "when the merge request is closed" do + context 'when the merge request is closed' do let(:closed_merge_request) do create(:closed_merge_request, source_project: fork_project, target_project: project) end - it "returns false if the source project exist" do + it 'returns false if the source project exists' do expect(closed_merge_request.closed_without_source_project?).to be_falsey end - it "returns true if the source project does not exist" do + it 'returns true if the source project does not exist' do destroy_project.async_execute closed_merge_request.reload @@ -1064,29 +1064,55 @@ describe MergeRequest, models: true do end end - context "when the merge request is open" do - let(:open_merge_request) do - create(:merge_request, - source_project: fork_project, - target_project: project) - end - - it "returns false" do - expect(open_merge_request.closed_without_source_project?).to be_falsey + context 'when the merge request is open' do + it 'returns false' do + expect(subject.closed_without_source_project?).to be_falsey end end end describe '#can_reopen?' do - it "returns true" do - subject.close - binding.pry + context 'when the merge request is closed' do + it 'returns true' do + subject.close - expect(subject.can_reopen?).to be_truthy + expect(subject.can_reopen?).to be_truthy + end + + context 'forked project' do + let(:project) { create(:project) } + let(:fork_project) { create(:project, forked_from_project: project) } + let(:user) { create(:user) } + let(:merge_request) do + create(:closed_merge_request, + source_project: fork_project, + target_project: project) + end + + it 'returns false if unforked' do + Projects::UnlinkForkService.new(fork_project, user).execute + + expect(merge_request.reload.can_reopen?).to be_falsey + end + + it 'returns false if the source project is deleted' do + Projects::DestroyService.new(fork_project, user, {}).async_execute + + expect(merge_request.reload.can_reopen?).to be_falsey + end + + it 'returnes false if the merge request is merged' do + merge_request.update_attributes(state: 'merged') + + expect(merge_request.reload.can_reopen?).to be_falsey + end + end end - it "returns false" do - expect(subject.can_reopen?).to be_falsey + context 'when merge request is opened' do + it 'returns false' do + expect(subject.can_reopen?).to be_falsey + end end end end -- cgit v1.2.1 From d88f708b02720404af4b7647a65f831dae59f764 Mon Sep 17 00:00:00 2001 From: Katarzyna Kobierska Date: Thu, 8 Sep 2016 14:20:11 +0200 Subject: Improve grammar --- spec/controllers/projects_controller_spec.rb | 2 +- spec/models/merge_request_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb index da75f4ccd2c..b0f740f48f7 100644 --- a/spec/controllers/projects_controller_spec.rb +++ b/spec/controllers/projects_controller_spec.rb @@ -182,7 +182,7 @@ describe ProjectsController do expect(response).to redirect_to(dashboard_projects_path) end - context "when project is forked" do + context "when the project is forked" do let(:project) { create(:project) } let(:fork_project) { create(:project, forked_from_project: project) } let(:merge_request) do diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index d58156ba045..9ec26a65ba1 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -1109,7 +1109,7 @@ describe MergeRequest, models: true do end end - context 'when merge request is opened' do + context 'when the merge request is opened' do it 'returns false' do expect(subject.can_reopen?).to be_falsey end -- cgit v1.2.1 From 0437842d84a04953609b52e04bf970f4e9e050db Mon Sep 17 00:00:00 2001 From: Katarzyna Kobierska Date: Thu, 8 Sep 2016 14:22:05 +0200 Subject: Add CHANGELOG --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 195362046dc..4cad8707015 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -127,6 +127,7 @@ v 8.12.0 (unreleased) - Allow bulk update merge requests from merge requests index page - Add notification_settings API calls !5632 (mahcsig) - Remove duplication between project builds and admin builds view !5680 (Katarzyna Kobierska Ula Budziszewska) + - Deleting source project with existing fork link will close all related merge requests !6177 (Katarzyna Kobierska Ula Budziszeska) v 8.11.6 (unreleased) - Fix an error where we were unable to create a CommitStatus for running state -- cgit v1.2.1 From bef1292cbd0588bbd9daa9484a00381d95ffbf94 Mon Sep 17 00:00:00 2001 From: Katarzyna Kobierska Date: Tue, 13 Sep 2016 08:27:37 +0200 Subject: Fix not working test with execute --- spec/models/merge_request_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 9ec26a65ba1..031e95b411e 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -1041,8 +1041,8 @@ describe MergeRequest, models: true do describe '#closed_without_source_project?' do let(:project) { create(:project) } - let(:fork_project) { create(:project, forked_from_project: project) } let(:user) { create(:user) } + let(:fork_project) { create(:project, forked_from_project: project, namespace: user.namespace) } let(:destroy_project) { Projects::DestroyService.new(fork_project, user, {}) } context 'when the merge request is closed' do @@ -1057,7 +1057,7 @@ describe MergeRequest, models: true do end it 'returns true if the source project does not exist' do - destroy_project.async_execute + destroy_project.execute closed_merge_request.reload expect(closed_merge_request.closed_without_source_project?).to be_truthy @@ -1081,8 +1081,8 @@ describe MergeRequest, models: true do context 'forked project' do let(:project) { create(:project) } - let(:fork_project) { create(:project, forked_from_project: project) } let(:user) { create(:user) } + let(:fork_project) { create(:project, forked_from_project: project, namespace: user.namespace) } let(:merge_request) do create(:closed_merge_request, source_project: fork_project, @@ -1096,7 +1096,7 @@ describe MergeRequest, models: true do end it 'returns false if the source project is deleted' do - Projects::DestroyService.new(fork_project, user, {}).async_execute + Projects::DestroyService.new(fork_project, user, {}).execute expect(merge_request.reload.can_reopen?).to be_falsey end -- cgit v1.2.1 From 34586c1894882ce1ec2a0978d16cbd23d8603986 Mon Sep 17 00:00:00 2001 From: Katarzyna Kobierska Date: Tue, 13 Sep 2016 12:16:40 +0200 Subject: Improve grammar --- app/helpers/merge_requests_helper.rb | 2 +- spec/models/merge_request_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb index e9a61e2c2a6..8abe7865fed 100644 --- a/app/helpers/merge_requests_helper.rb +++ b/app/helpers/merge_requests_helper.rb @@ -98,7 +98,7 @@ module MergeRequestsHelper end def merge_request_button_visibility(merge_request, closed) - return 'hidden' if merge_request.can_reopen? + return 'hidden' if merge_request.closed? == closed || (merge_request.merged? == closed && !merge_request.closed?) || merge_request.closed_without_fork? end def merge_request_version_path(project, merge_request, merge_request_diff, start_sha = nil) diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 031e95b411e..4b8daacc7e0 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -1101,7 +1101,7 @@ describe MergeRequest, models: true do expect(merge_request.reload.can_reopen?).to be_falsey end - it 'returnes false if the merge request is merged' do + it 'returns false if the merge request is merged' do merge_request.update_attributes(state: 'merged') expect(merge_request.reload.can_reopen?).to be_falsey -- cgit v1.2.1 From 66e92895e3c62a53c10ac93148d5f4fd963c93b2 Mon Sep 17 00:00:00 2001 From: Katarzyna Kobierska Date: Tue, 13 Sep 2016 14:40:00 +0200 Subject: Change method name to #reopenable? --- app/models/merge_request.rb | 5 +++-- .../projects/merge_requests/_discussion.html.haml | 2 +- spec/models/merge_request_spec.rb | 18 +++++++++--------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 014a6ce023b..f7d1253d957 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -327,9 +327,10 @@ class MergeRequest < ActiveRecord::Base !source_project.forked_from?(target_project) end - def can_reopen? + def reopenable? return false if closed_without_fork? || closed_without_source_project? || merged? - return true if closed? + + closed? end def ensure_merge_request_diff diff --git a/app/views/projects/merge_requests/_discussion.html.haml b/app/views/projects/merge_requests/_discussion.html.haml index b8013c4ee82..3900b4f6f17 100644 --- a/app/views/projects/merge_requests/_discussion.html.haml +++ b/app/views/projects/merge_requests/_discussion.html.haml @@ -2,7 +2,7 @@ - if can?(current_user, :update_merge_request, @merge_request) - if @merge_request.open? = link_to 'Close merge request', merge_request_path(@merge_request, merge_request: {state_event: :close }), method: :put, class: "btn btn-nr btn-comment btn-close close-mr-link js-note-target-close", title: "Close merge request", data: {original_text: "Close merge request", alternative_text: "Comment & close merge request"} - - if @merge_request.can_reopen? + - if @merge_request.reopenable? = link_to 'Reopen merge request', merge_request_path(@merge_request, merge_request: {state_event: :reopen }), method: :put, class: "btn btn-nr btn-comment btn-reopen reopen-mr-link js-note-target-reopen", title: "Reopen merge request", data: {original_text: "Reopen merge request", alternative_text: "Comment & reopen merge request"} %comment-and-resolve-btn{ "inline-template" => true, ":discussion-id" => "" } %button.btn.btn-nr.btn-default.append-right-10.js-comment-resolve-button{ "v-if" => "showButton", type: "submit", data: { namespace_path: "#{@merge_request.project.namespace.path}", project_path: "#{@merge_request.project.path}" } } diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 4b8daacc7e0..3b815ded2d3 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -1043,7 +1043,7 @@ describe MergeRequest, models: true do let(:project) { create(:project) } let(:user) { create(:user) } let(:fork_project) { create(:project, forked_from_project: project, namespace: user.namespace) } - let(:destroy_project) { Projects::DestroyService.new(fork_project, user, {}) } + let(:destroy_service) { Projects::DestroyService.new(fork_project, user) } context 'when the merge request is closed' do let(:closed_merge_request) do @@ -1057,7 +1057,7 @@ describe MergeRequest, models: true do end it 'returns true if the source project does not exist' do - destroy_project.execute + destroy_service.execute closed_merge_request.reload expect(closed_merge_request.closed_without_source_project?).to be_truthy @@ -1071,12 +1071,12 @@ describe MergeRequest, models: true do end end - describe '#can_reopen?' do + describe '#reopenable?' do context 'when the merge request is closed' do it 'returns true' do subject.close - expect(subject.can_reopen?).to be_truthy + expect(subject.reopenable?).to be_truthy end context 'forked project' do @@ -1092,26 +1092,26 @@ describe MergeRequest, models: true do it 'returns false if unforked' do Projects::UnlinkForkService.new(fork_project, user).execute - expect(merge_request.reload.can_reopen?).to be_falsey + expect(merge_request.reload.reopenable?).to be_falsey end it 'returns false if the source project is deleted' do - Projects::DestroyService.new(fork_project, user, {}).execute + Projects::DestroyService.new(fork_project, user).execute - expect(merge_request.reload.can_reopen?).to be_falsey + expect(merge_request.reload.reopenable?).to be_falsey end it 'returns false if the merge request is merged' do merge_request.update_attributes(state: 'merged') - expect(merge_request.reload.can_reopen?).to be_falsey + expect(merge_request.reload.reopenable?).to be_falsey end end end context 'when the merge request is opened' do it 'returns false' do - expect(subject.can_reopen?).to be_falsey + expect(subject.reopenable?).to be_falsey end end end -- cgit v1.2.1