Merge branch 'assign-to-issuable-opener' into 'master'
Issuable can be assigned to author Closes #9014 The only difference with #9014 is that I thoughed the author should also be able to assign the issue. If this is unwanted behavior Ill revert it. /cc @DouweM See merge request !2765
This commit is contained in:
commit
bb59a1f98e
|
@ -50,6 +50,7 @@ v 8.7.0 (unreleased)
|
|||
- Fix high CPU usage when PostReceive receives refs/merge-requests/<id>
|
||||
- Hide `Create a group` help block when creating a new project in a group
|
||||
- Implement 'TODOs View' as an option for dashboard preferences !3379 (Elias W.)
|
||||
- Allow issues and merge requests to be assigned to the author !2765
|
||||
- Gracefully handle notes on deleted commits in merge requests (Stan Hu)
|
||||
- Decouple membership and notifications
|
||||
- Fix creation of merge requests for orphaned branches (Stan Hu)
|
||||
|
|
|
@ -12,6 +12,7 @@ class @UsersSelect
|
|||
showNullUser = $dropdown.data('null-user')
|
||||
showAnyUser = $dropdown.data('any-user')
|
||||
firstUser = $dropdown.data('first-user')
|
||||
@authorId = $dropdown.data('author-id')
|
||||
selectedId = $dropdown.data('selected')
|
||||
defaultLabel = $dropdown.data('default-label')
|
||||
issueURL = $dropdown.data('issueUpdate')
|
||||
|
@ -207,6 +208,7 @@ class @UsersSelect
|
|||
@projectId = $(select).data('project-id')
|
||||
@groupId = $(select).data('group-id')
|
||||
@showCurrentUser = $(select).data('current-user')
|
||||
@authorId = $(select).data('author-id')
|
||||
showNullUser = $(select).data('null-user')
|
||||
showAnyUser = $(select).data('any-user')
|
||||
showEmailUser = $(select).data('email-user')
|
||||
|
@ -312,6 +314,7 @@ class @UsersSelect
|
|||
project_id: @projectId
|
||||
group_id: @groupId
|
||||
current_user: @showCurrentUser
|
||||
author_id: @authorId
|
||||
dataType: "json"
|
||||
).done (users) ->
|
||||
callback(users)
|
||||
|
|
|
@ -12,8 +12,15 @@ class AutocompleteController < ApplicationController
|
|||
if params[:search].blank?
|
||||
# Include current user if available to filter by "Me"
|
||||
if params[:current_user] && current_user
|
||||
@users = [*@users, current_user].uniq
|
||||
@users = [*@users, current_user]
|
||||
end
|
||||
|
||||
if params[:author_id].present?
|
||||
author = User.find_by_id(params[:author_id])
|
||||
@users = [author, *@users] if author
|
||||
end
|
||||
|
||||
@users.uniq!
|
||||
end
|
||||
|
||||
render json: @users, only: [:name, :username, :id], methods: [:avatar_url]
|
||||
|
|
|
@ -60,8 +60,8 @@ class Projects::IssuesController < Projects::ApplicationController
|
|||
end
|
||||
|
||||
def show
|
||||
@note = @project.notes.new(noteable: @issue)
|
||||
@notes = @issue.notes.nonawards.with_associations.fresh
|
||||
@note = @project.notes.new(noteable: @issue)
|
||||
@notes = @issue.notes.nonawards.with_associations.fresh
|
||||
@noteable = @issue
|
||||
|
||||
respond_to do |format|
|
||||
|
|
|
@ -6,12 +6,13 @@ module SelectsHelper
|
|||
value = opts[:selected] || ''
|
||||
placeholder = opts[:placeholder] || 'Search for a user'
|
||||
|
||||
null_user = opts[:null_user] || false
|
||||
any_user = opts[:any_user] || false
|
||||
email_user = opts[:email_user] || false
|
||||
first_user = opts[:first_user] && current_user ? current_user.username : false
|
||||
current_user = opts[:current_user] || false
|
||||
project = opts[:project] || @project
|
||||
null_user = opts[:null_user] || false
|
||||
any_user = opts[:any_user] || false
|
||||
email_user = opts[:email_user] || false
|
||||
first_user = opts[:first_user] && current_user ? current_user.username : false
|
||||
current_user = opts[:current_user] || false
|
||||
author_id = opts[:author_id] || ''
|
||||
project = opts[:project] || @project
|
||||
|
||||
html = {
|
||||
class: css_class,
|
||||
|
@ -21,7 +22,8 @@ module SelectsHelper
|
|||
any_user: any_user,
|
||||
email_user: email_user,
|
||||
first_user: first_user,
|
||||
current_user: current_user
|
||||
current_user: current_user,
|
||||
author_id: author_id
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
|
||||
.selectbox.hide-collapsed
|
||||
= f.hidden_field 'assignee_id', value: issuable.assignee_id, id: 'issue_assignee_id'
|
||||
= dropdown_tag('Select assignee', options: { toggle_class: 'js-user-search js-author-search', title: 'Assign to', filter: true, dropdown_class: 'dropdown-menu-user dropdown-menu-selectable dropdown-menu-author', placeholder: 'Search users', data: { first_user: (current_user.username if current_user), current_user: true, project_id: (@project.id if @project), field_name: "#{issuable.to_ability_name}[assignee_id]", issue_update: issuable_json_path(issuable), ability_name: issuable.to_ability_name, null_user: true } })
|
||||
= dropdown_tag('Select assignee', options: { toggle_class: 'js-user-search js-author-search', title: 'Assign to', filter: true, dropdown_class: 'dropdown-menu-user dropdown-menu-selectable dropdown-menu-author', placeholder: 'Search users', data: { first_user: (current_user.username if current_user), current_user: true, project_id: (@project.id if @project), author_id: issuable.author_id, field_name: "#{issuable.to_ability_name}[assignee_id]", issue_update: issuable_json_path(issuable), ability_name: issuable.to_ability_name, null_user: true } })
|
||||
|
||||
.block.milestone
|
||||
.sidebar-collapsed-icon
|
||||
|
|
|
@ -12,13 +12,13 @@ describe AutocompleteController do
|
|||
project.team << [user, :master]
|
||||
end
|
||||
|
||||
let(:body) { JSON.parse(response.body) }
|
||||
|
||||
describe 'GET #users with project ID' do
|
||||
before do
|
||||
get(:users, project_id: project.id)
|
||||
end
|
||||
|
||||
let(:body) { JSON.parse(response.body) }
|
||||
|
||||
it { expect(body).to be_kind_of(Array) }
|
||||
it { expect(body.size).to eq 1 }
|
||||
it { expect(body.map { |u| u["username"] }).to include(user.username) }
|
||||
|
@ -143,4 +143,24 @@ describe AutocompleteController do
|
|||
it { expect(body.size).to eq 0 }
|
||||
end
|
||||
end
|
||||
|
||||
context 'author of issuable included' do
|
||||
before do
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
let(:body) { JSON.parse(response.body) }
|
||||
|
||||
it 'includes the author' do
|
||||
get(:users, author_id: non_member.id)
|
||||
|
||||
expect(body.first["username"]).to eq non_member.username
|
||||
end
|
||||
|
||||
it 'rejects non existent user ids' do
|
||||
get(:users, author_id: 99999)
|
||||
|
||||
expect(body.collect { |u| u['id'] }).not_to include(99999)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue