From bc0666b3c906c990c1a10efc4b0acc73281ea533 Mon Sep 17 00:00:00 2001
From: Phil Hughes <me@iamphill.com>
Date: Tue, 19 Apr 2016 15:58:20 +0100
Subject: [PATCH] Filter issuables by any user

Closes #2836
---
 app/assets/javascripts/users_select.js.coffee | 12 ++++---
 app/helpers/issuables_helper.rb               |  8 ++---
 app/views/shared/issuable/_filter.html.haml   |  2 +-
 spec/features/issues/filter_issues_spec.rb    | 36 +++++++++++++++++++
 4 files changed, 46 insertions(+), 12 deletions(-)

diff --git a/app/assets/javascripts/users_select.js.coffee b/app/assets/javascripts/users_select.js.coffee
index b80b1b861cc..49d0320701e 100644
--- a/app/assets/javascripts/users_select.js.coffee
+++ b/app/assets/javascripts/users_select.js.coffee
@@ -93,7 +93,9 @@ class @UsersSelect
 
       $dropdown.glDropdown(
         data: (term, callback) =>
-          @users term, (users) =>
+          isAuthorFilter = $('.js-author-search')
+
+          @users term, term is '' and isAuthorFilter, (users) =>
             if term.length is 0
               showDivider = 0
 
@@ -138,7 +140,7 @@ class @UsersSelect
 
         toggleLabel: (selected) ->
           if selected && 'id' of selected
-            selected.name
+            if selected.text then selected.text else selected.name
           else
             defaultLabel
 
@@ -219,7 +221,7 @@ class @UsersSelect
         multiple: $(select).hasClass('multiselect')
         minimumInputLength: 0
         query: (query) =>
-          @users query.term, (users) =>
+          @users query.term, false, (users) =>
             data = { results: users }
 
             if query.term.length == 0
@@ -302,7 +304,7 @@ class @UsersSelect
 
   # Return users list. Filtered by query
   # Only active users retrieved
-  users: (query, callback) =>
+  users: (query, fromProject, callback) =>
     url = @buildUrl(@usersPath)
 
     $.ajax(
@@ -311,7 +313,7 @@ class @UsersSelect
         search: query
         per_page: 20
         active: true
-        project_id: @projectId
+        project_id: @projectId if fromProject
         group_id: @groupId
         current_user: @showCurrentUser
         author_id: @authorId
diff --git a/app/helpers/issuables_helper.rb b/app/helpers/issuables_helper.rb
index 39474217286..a7a6657b948 100644
--- a/app/helpers/issuables_helper.rb
+++ b/app/helpers/issuables_helper.rb
@@ -50,14 +50,10 @@ module IssuablesHelper
   end
 
   def user_dropdown_label(user_id, default_label)
+    return default_label if user_id.nil?
     return "Unassigned" if user_id == "0"
 
-    if @project
-      member = @project.team.find_member(user_id)
-      user = member.user if member
-    else
-      user = User.find_by(id: user_id)
-    end
+    user = User.find_by(id: user_id)
 
     if user
       user.name
diff --git a/app/views/shared/issuable/_filter.html.haml b/app/views/shared/issuable/_filter.html.haml
index 323d563cd4a..cedff4af2e0 100644
--- a/app/views/shared/issuable/_filter.html.haml
+++ b/app/views/shared/issuable/_filter.html.haml
@@ -12,7 +12,7 @@
           - 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.username if current_user), current_user: true, project_id: (@project.id if @project), selected: params[:author_id], field_name: "author_id", default_label: "Author" } })
+            placeholder: "Search authors", data: { any_user: "Any Author", first_user: (current_user.username if current_user), current_user: true, project_id: (@project.id if @project), selected: params[:author], field_name: "author_id", default_label: "Author" } })
 
         .filter-item.inline
           - if params[:assignee_id].present?
diff --git a/spec/features/issues/filter_issues_spec.rb b/spec/features/issues/filter_issues_spec.rb
index 1f0594e6b02..7efbaaa048c 100644
--- a/spec/features/issues/filter_issues_spec.rb
+++ b/spec/features/issues/filter_issues_spec.rb
@@ -294,4 +294,40 @@ describe 'Filter issues', feature: true do
       end
     end
   end
+
+  describe 'filter by any author', js: true do
+    before do
+      user2 = create(:user, name: "tester")
+      create(:issue, project: project, author: user)
+      create(:issue, project: project, author: user2)
+
+      visit namespace_project_issues_path(project.namespace, project)
+    end
+
+    it 'should show filter by any author link' do
+      click_button "Author"
+      fill_in "Search authors", with: "tester"
+
+      page.within ".dropdown-menu-author" do
+        expect(page).to have_content "tester"
+      end
+    end
+
+    it 'should show filter issues by any author' do
+      page.within '.issues-list' do
+        expect(page).to have_selector ".issue", count: 2
+      end
+
+      click_button "Author"
+      fill_in "Search authors", with: "tester"
+
+      page.within ".dropdown-menu-author" do
+        click_link "tester"
+      end
+
+      page.within '.issues-list' do
+        expect(page).to have_selector ".issue", count: 1
+      end
+    end
+  end
 end
-- 
GitLab