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: {
|
params: {
|
||||||
per_page: 20,
|
per_page: 20,
|
||||||
active: true,
|
active: true,
|
||||||
|
group_id: this.getGroupId(),
|
||||||
project_id: this.getProjectId(),
|
project_id: this.getProjectId(),
|
||||||
current_user: true,
|
current_user: true,
|
||||||
},
|
},
|
||||||
|
@ -47,6 +48,10 @@ class DropdownUser extends gl.FilteredSearchDropdown {
|
||||||
super.renderContent(forceShowList);
|
super.renderContent(forceShowList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getGroupId() {
|
||||||
|
return this.input.getAttribute('data-group-id');
|
||||||
|
}
|
||||||
|
|
||||||
getProjectId() {
|
getProjectId() {
|
||||||
return this.input.getAttribute('data-project-id');
|
return this.input.getAttribute('data-project-id');
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,13 +11,13 @@
|
||||||
- if params[:author_id].present?
|
- if params[:author_id].present?
|
||||||
= hidden_field_tag(:author_id, params[:author_id])
|
= 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",
|
= 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
|
.filter-item.inline
|
||||||
- if params[:assignee_id].present?
|
- if params[:assignee_id].present?
|
||||||
= hidden_field_tag(:assignee_id, params[:assignee_id])
|
= 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",
|
= 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
|
.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
|
= 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(() => {
|
beforeEach(() => {
|
||||||
spyOn(gl.DropdownUser.prototype, 'bindEvents').and.callFake(() => {});
|
spyOn(gl.DropdownUser.prototype, 'bindEvents').and.callFake(() => {});
|
||||||
spyOn(gl.DropdownUser.prototype, 'getProjectId').and.callFake(() => {});
|
spyOn(gl.DropdownUser.prototype, 'getProjectId').and.callFake(() => {});
|
||||||
|
spyOn(gl.DropdownUser.prototype, 'getGroupId').and.callFake(() => {});
|
||||||
spyOn(gl.DropdownUtils, 'getSearchInput').and.callFake(() => {});
|
spyOn(gl.DropdownUtils, 'getSearchInput').and.callFake(() => {});
|
||||||
|
|
||||||
dropdownUser = new gl.DropdownUser({
|
dropdownUser = new gl.DropdownUser({
|
||||||
|
@ -38,6 +39,7 @@ describe('Dropdown User', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
spyOn(gl.DropdownUser.prototype, 'bindEvents').and.callFake(() => {});
|
spyOn(gl.DropdownUser.prototype, 'bindEvents').and.callFake(() => {});
|
||||||
spyOn(gl.DropdownUser.prototype, 'getProjectId').and.callFake(() => {});
|
spyOn(gl.DropdownUser.prototype, 'getProjectId').and.callFake(() => {});
|
||||||
|
spyOn(gl.DropdownUser.prototype, 'getGroupId').and.callFake(() => {});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return endpoint', () => {
|
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