Add can_merge option to autocomplete response
It's used only if merge_request_iid param is provided
This commit is contained in:
parent
5b38fced90
commit
f74b33cf6e
4 changed files with 62 additions and 1 deletions
|
@ -16,7 +16,7 @@ class AutocompleteController < ApplicationController
|
|||
.new(params: params, current_user: current_user, project: project, group: group)
|
||||
.execute
|
||||
|
||||
render json: UserSerializer.new.represent(users)
|
||||
render json: UserSerializer.new(params).represent(users, project: project)
|
||||
end
|
||||
|
||||
def user
|
||||
|
|
|
@ -2,4 +2,21 @@
|
|||
|
||||
class UserSerializer < BaseSerializer
|
||||
entity UserEntity
|
||||
|
||||
def represent(resource, opts = {}, entity = nil)
|
||||
if params[:merge_request_iid]
|
||||
merge_request = opts[:project].merge_requests.find_by_iid!(params[:merge_request_iid])
|
||||
preload_max_member_access(merge_request.project, Array(resource))
|
||||
|
||||
super(resource, opts.merge(merge_request: merge_request), MergeRequestAssigneeEntity)
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def preload_max_member_access(project, users)
|
||||
project.team.max_member_access_for_user_ids(users.map(&:id))
|
||||
end
|
||||
end
|
||||
|
|
|
@ -222,6 +222,20 @@ describe AutocompleteController do
|
|||
expect(response_user_ids).to contain_exactly(non_member.id)
|
||||
end
|
||||
end
|
||||
|
||||
context 'merge_request_iid parameter included' do
|
||||
before do
|
||||
sign_in(user)
|
||||
end
|
||||
|
||||
it 'includes can_merge option to users' do
|
||||
merge_request = create(:merge_request, source_project: project)
|
||||
|
||||
get(:users, params: { merge_request_iid: merge_request.iid, project_id: project.id })
|
||||
|
||||
expect(json_response.first).to have_key('can_merge')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'GET projects' do
|
||||
|
|
30
spec/serializers/user_serializer_spec.rb
Normal file
30
spec/serializers/user_serializer_spec.rb
Normal file
|
@ -0,0 +1,30 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe UserSerializer do
|
||||
let(:user1) { create(:user) }
|
||||
let(:user2) { create(:user) }
|
||||
|
||||
context 'serializer with merge request context' do
|
||||
let(:merge_request) { create(:merge_request) }
|
||||
let(:project) { merge_request.project }
|
||||
let(:serializer) { described_class.new(merge_request_iid: merge_request.iid) }
|
||||
|
||||
before do
|
||||
allow(project).to(
|
||||
receive_message_chain(:merge_requests, :find_by_iid!)
|
||||
.with(merge_request.iid).and_return(merge_request)
|
||||
)
|
||||
|
||||
project.add_maintainer(user1)
|
||||
end
|
||||
|
||||
it 'returns a user with can_merge option' do
|
||||
serialized_user1, serialized_user2 = serializer.represent([user1, user2], project: project).as_json
|
||||
|
||||
expect(serialized_user1).to include("id" => user1.id, "can_merge" => true)
|
||||
expect(serialized_user2).to include("id" => user2.id, "can_merge" => false)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue