summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-03-15 15:01:26 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-03-17 07:39:16 +0100
commit1dd279d83335de71c69d0acfdcdd7eb0ebe7f3dd (patch)
tree3965a00f0ad5562da835d19ef0555ac9703c7fbf
parent414558939339bd636a3549866ce532fa25500bc5 (diff)
downloadgitlab-ce-1dd279d83335de71c69d0acfdcdd7eb0ebe7f3dd.tar.gz
Use helper to create list of projects issue can be moved to
This also adds confirmation message if issue move has been requested.
-rw-r--r--app/assets/javascripts/issuable_form.js.coffee11
-rw-r--r--app/helpers/issues_helper.rb11
-rw-r--r--app/views/shared/issuable/_form.html.haml6
-rw-r--r--spec/services/issues/move_service_spec.rb15
4 files changed, 37 insertions, 6 deletions
diff --git a/app/assets/javascripts/issuable_form.js.coffee b/app/assets/javascripts/issuable_form.js.coffee
index 48c249943f2..9b939985b33 100644
--- a/app/assets/javascripts/issuable_form.js.coffee
+++ b/app/assets/javascripts/issuable_form.js.coffee
@@ -1,4 +1,6 @@
class @IssuableForm
+ ISSUE_MOVE_CONFIRM_MSG = 'Are you sure you want to move this issue to another project?'
+
constructor: (@form) ->
GitLab.GfmAutoComplete.setup()
new UsersSelect()
@@ -6,12 +8,13 @@ class @IssuableForm
@titleField = @form.find("input[name*='[title]']")
@descriptionField = @form.find("textarea[name*='[description]']")
+ @issueMoveField = @form.find("#move_to_project_id")
return unless @titleField.length && @descriptionField.length
@initAutosave()
- @form.on "submit", @resetAutosave
+ @form.on "submit", @handleSubmit
@form.on "click", ".btn-cancel", @resetAutosave
initAutosave: ->
@@ -27,6 +30,12 @@ class @IssuableForm
"description"
]
+ handleSubmit: (e) =>
+ @resetAutosave
+
+ if (parseInt(@issueMoveField?.val()) ? 0) > 0
+ e.preventDefault() unless confirm(ISSUE_MOVE_CONFIRM_MSG)
+
resetAutosave: =>
@titleField.data("autosave").reset()
@descriptionField.data("autosave").reset()
diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb
index ae4ebc0854a..62479b8d1ce 100644
--- a/app/helpers/issues_helper.rb
+++ b/app/helpers/issues_helper.rb
@@ -57,6 +57,17 @@ module IssuesHelper
options_from_collection_for_select(milestones, 'id', 'title', object.milestone_id)
end
+ def project_options(issuable, current_user, ability: :read_project)
+ projects = current_user.authorized_projects
+ projects = projects.select do |project|
+ current_user.can?(ability, project) && project != issuable.project
+ end
+
+ projects.unshift(OpenStruct.new(id: 0, name_with_namespace: 'No project'))
+
+ options_from_collection_for_select(projects, :id, :name_with_namespace, 0)
+ end
+
def status_box_class(item)
if item.respond_to?(:expired?) && item.expired?
'status-box-expired'
diff --git a/app/views/shared/issuable/_form.html.haml b/app/views/shared/issuable/_form.html.haml
index f9160a46093..11b8b9d44af 100644
--- a/app/views/shared/issuable/_form.html.haml
+++ b/app/views/shared/issuable/_form.html.haml
@@ -72,9 +72,9 @@
.form-group
= f.label :move_to_project_id, 'Move', class: 'control-label'
.col-sm-10
- = project_select_tag(:move_to_project_id, placeholder: 'Select project',
- class: 'custom-form-control', data: { 'select-id' => 'id',
- 'access-level' => Gitlab::Access::REPORTER, 'without-id' => issuable.project.id })
+ - projects = project_options(issuable, current_user, ability: :admin_issue)
+ = select_tag(:move_to_project_id, projects, include_blank: true,
+ class: 'select2', data: { placeholder: 'Select project' })
- if issuable.is_a?(MergeRequest)
%hr
diff --git a/spec/services/issues/move_service_spec.rb b/spec/services/issues/move_service_spec.rb
index b71ce311afd..cb02b8721ac 100644
--- a/spec/services/issues/move_service_spec.rb
+++ b/spec/services/issues/move_service_spec.rb
@@ -28,7 +28,7 @@ describe Issues::MoveService, services: true do
new_project.team << [user, :reporter]
end
end
-
+
context 'issue movable' do
include_context 'issue move requested'
include_context 'user can move issue'
@@ -162,6 +162,18 @@ describe Issues::MoveService, services: true do
end
end
+ context 'moving to same project' do
+ let(:new_project) { old_project }
+
+ include_context 'issue move requested'
+ include_context 'user can move issue'
+
+ it 'raises error' do
+ expect { move_service }
+ .to raise_error(StandardError, /Cannot move issue/)
+ end
+ end
+
context 'issue move not requested' do
let(:new_project_id) { nil }
@@ -179,7 +191,6 @@ describe Issues::MoveService, services: true do
end
end
-
describe 'move permissions' do
include_context 'issue move requested'