diff options
| author | Robert Speicher <rspeicher@gmail.com> | 2019-02-20 00:20:23 +0000 |
|---|---|---|
| committer | Robert Speicher <rspeicher@gmail.com> | 2019-02-20 00:20:23 +0000 |
| commit | c7787f44ffbcae4e98281202417daf5f29b9a38e (patch) | |
| tree | cf7522dffcf9bb466bcc77fdf8598441958b8575 | |
| parent | 3928328c43a2031d6a83c2de16d66521a3ff38f6 (diff) | |
| parent | aa464800b80b86b79a43b3b8a7398c5e631d40f2 (diff) | |
| download | gitlab-ce-c7787f44ffbcae4e98281202417daf5f29b9a38e.tar.gz | |
Merge branch 'ce-return-entity-type-for-project-autocomplete-sources-members' into 'master'
Add a type property to project autocomplete members
Closes #57771
See merge request gitlab-org/gitlab-ce!25296
| -rw-r--r-- | app/services/concerns/users/participable_service.rb | 15 | ||||
| -rw-r--r-- | spec/controllers/projects/autocomplete_sources_controller_spec.rb | 38 |
2 files changed, 47 insertions, 6 deletions
diff --git a/app/services/concerns/users/participable_service.rb b/app/services/concerns/users/participable_service.rb index 5b408bd96c7..6713b6617ae 100644 --- a/app/services/concerns/users/participable_service.rb +++ b/app/services/concerns/users/participable_service.rb @@ -11,7 +11,7 @@ module Users def noteable_owner return [] unless noteable && noteable.author.present? - [as_hash(noteable.author)] + [user_as_hash(noteable.author)] end def participants_in_noteable @@ -23,21 +23,24 @@ module Users def sorted(users) users.uniq.to_a.compact.sort_by(&:username).map do |user| - as_hash(user) + user_as_hash(user) end end def groups current_user.authorized_groups.sort_by(&:path).map do |group| - count = group.users.count - { username: group.full_path, name: group.full_name, count: count, avatar_url: group.avatar_url } + group_as_hash(group) end end private - def as_hash(user) - { username: user.username, name: user.name, avatar_url: user.avatar_url } + def user_as_hash(user) + { type: user.class.name, username: user.username, name: user.name, avatar_url: user.avatar_url } + end + + def group_as_hash(group) + { type: group.class.name, username: group.full_path, name: group.full_name, avatar_url: group.avatar_url, count: group.users.count } end end end diff --git a/spec/controllers/projects/autocomplete_sources_controller_spec.rb b/spec/controllers/projects/autocomplete_sources_controller_spec.rb new file mode 100644 index 00000000000..4bc72042710 --- /dev/null +++ b/spec/controllers/projects/autocomplete_sources_controller_spec.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Projects::AutocompleteSourcesController do + set(:group) { create(:group) } + set(:project) { create(:project, namespace: group) } + set(:issue) { create(:issue, project: project) } + set(:user) { create(:user) } + + describe 'GET members' do + before do + group.add_owner(user) + sign_in(user) + end + + it 'returns an array of member object' do + get :members, format: :json, params: { namespace_id: group.path, project_id: project.path, type: issue.class.name, type_id: issue.id } + + all = json_response.find {|member| member["username"] == 'all'} + the_group = json_response.find {|member| member["username"] == group.full_path} + the_user = json_response.find {|member| member["username"] == user.username} + + expect(all.symbolize_keys).to include(username: 'all', + name: 'All Project and Group Members', + count: 1) + + expect(the_group.symbolize_keys).to include(type: group.class.name, + name: group.full_name, + avatar_url: group.avatar_url, + count: 1) + + expect(the_user.symbolize_keys).to include(type: user.class.name, + name: user.name, + avatar_url: user.avatar_url) + end + end +end |
