Merge branch '20824-scope-users-to-members-in-group-issuable-list' into 'master'
Resolve "Scope users by group inside dropdowns if I'm on group page (Issue, MRs)" Closes #20824 See merge request gitlab-org/gitlab-ce!14249
This commit is contained in:
commit
2203e8fc35
7 changed files with 57 additions and 2 deletions
|
@ -15,6 +15,7 @@ class DropdownUser extends gl.FilteredSearchDropdown {
|
|||
params: {
|
||||
per_page: 20,
|
||||
active: true,
|
||||
group_id: this.getGroupId(),
|
||||
project_id: this.getProjectId(),
|
||||
current_user: true,
|
||||
},
|
||||
|
@ -47,6 +48,10 @@ class DropdownUser extends gl.FilteredSearchDropdown {
|
|||
super.renderContent(forceShowList);
|
||||
}
|
||||
|
||||
getGroupId() {
|
||||
return this.input.getAttribute('data-group-id');
|
||||
}
|
||||
|
||||
getProjectId() {
|
||||
return this.input.getAttribute('data-project-id');
|
||||
}
|
||||
|
|
|
@ -11,13 +11,13 @@
|
|||
- if params[:author_id].present?
|
||||
= hidden_field_tag(:author_id, params[:author_id])
|
||||
= dropdown_tag(user_dropdown_label(params[:author_id], "Author"), options: { toggle_class: "js-user-search js-filter-submit js-author-search", title: "Filter by author", filter: true, dropdown_class: "dropdown-menu-user dropdown-menu-selectable dropdown-menu-author js-filter-submit",
|
||||
placeholder: "Search authors", data: { any_user: "Any Author", first_user: current_user.try(:username), current_user: true, project_id: @project.try(:id), selected: params[:author_id], field_name: "author_id", default_label: "Author" } })
|
||||
placeholder: "Search authors", data: { any_user: "Any Author", first_user: current_user&.username, current_user: true, project_id: @project&.id, group_id: @group&.id, selected: params[:author_id], field_name: "author_id", default_label: "Author" } })
|
||||
|
||||
.filter-item.inline
|
||||
- if params[:assignee_id].present?
|
||||
= hidden_field_tag(:assignee_id, params[:assignee_id])
|
||||
= dropdown_tag(user_dropdown_label(params[:assignee_id], "Assignee"), options: { toggle_class: "js-user-search js-filter-submit js-assignee-search", title: "Filter by assignee", filter: true, dropdown_class: "dropdown-menu-user dropdown-menu-selectable dropdown-menu-assignee js-filter-submit",
|
||||
placeholder: "Search assignee", data: { any_user: "Any Assignee", first_user: current_user.try(:username), null_user: true, current_user: true, project_id: @project.try(:id), group_id: @group&.id, selected: params[:assignee_id], field_name: "assignee_id", default_label: "Assignee" } })
|
||||
placeholder: "Search assignee", data: { any_user: "Any Assignee", first_user: current_user&.username, null_user: true, current_user: true, project_id: @project&.id, group_id: @group&.id, selected: params[:assignee_id], field_name: "assignee_id", default_label: "Assignee" } })
|
||||
|
||||
.filter-item.inline.milestone-filter
|
||||
= render "shared/issuable/milestone_dropdown", selected: finder.milestones.try(:first), name: :milestone_title, show_any: true, show_upcoming: true, show_started: true
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Return only group's members in user dropdowns on issuables list pages
|
||||
merge_request: 14249
|
||||
author:
|
||||
type: changed
|
|
@ -0,0 +1,22 @@
|
|||
require 'spec_helper'
|
||||
|
||||
feature 'Groups > User sees users dropdowns in issuables list' do
|
||||
let(:entity) { create(:group) }
|
||||
let(:user_in_dropdown) { create(:user) }
|
||||
let!(:user_not_in_dropdown) { create(:user) }
|
||||
let!(:project) { create(:project, group: entity) }
|
||||
|
||||
before do
|
||||
entity.add_developer(user_in_dropdown)
|
||||
end
|
||||
|
||||
it_behaves_like 'issuable user dropdown behaviors' do
|
||||
let(:issuable) { create(:issue, project: project) }
|
||||
let(:issuables_path) { issues_group_path(entity) }
|
||||
end
|
||||
|
||||
it_behaves_like 'issuable user dropdown behaviors' do
|
||||
let(:issuable) { create(:merge_request, source_project: project) }
|
||||
let(:issuables_path) { merge_requests_group_path(entity) }
|
||||
end
|
||||
end
|
|
@ -10,6 +10,7 @@ describe('Dropdown User', () => {
|
|||
beforeEach(() => {
|
||||
spyOn(gl.DropdownUser.prototype, 'bindEvents').and.callFake(() => {});
|
||||
spyOn(gl.DropdownUser.prototype, 'getProjectId').and.callFake(() => {});
|
||||
spyOn(gl.DropdownUser.prototype, 'getGroupId').and.callFake(() => {});
|
||||
spyOn(gl.DropdownUtils, 'getSearchInput').and.callFake(() => {});
|
||||
|
||||
dropdownUser = new gl.DropdownUser({
|
||||
|
@ -38,6 +39,7 @@ describe('Dropdown User', () => {
|
|||
beforeEach(() => {
|
||||
spyOn(gl.DropdownUser.prototype, 'bindEvents').and.callFake(() => {});
|
||||
spyOn(gl.DropdownUser.prototype, 'getProjectId').and.callFake(() => {});
|
||||
spyOn(gl.DropdownUser.prototype, 'getGroupId').and.callFake(() => {});
|
||||
});
|
||||
|
||||
it('should return endpoint', () => {
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
shared_examples 'issuable user dropdown behaviors' do
|
||||
include FilteredSearchHelpers
|
||||
|
||||
before do
|
||||
issuable # ensure we have at least one issuable
|
||||
sign_in(user_in_dropdown)
|
||||
end
|
||||
|
||||
%w[author assignee].each do |dropdown|
|
||||
describe "#{dropdown} dropdown", :js do
|
||||
it 'only includes members of the project/group' do
|
||||
visit issuables_path
|
||||
|
||||
filtered_search.set("#{dropdown}:")
|
||||
|
||||
expect(find("#js-dropdown-#{dropdown} .filter-dropdown")).to have_content(user_in_dropdown.name)
|
||||
expect(find("#js-dropdown-#{dropdown} .filter-dropdown")).not_to have_content(user_not_in_dropdown.name)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue