Add can_merge option to autocomplete response

It's used only if merge_request_iid param is provided
This commit is contained in:
Igor 2019-08-01 16:51:14 +00:00 committed by Robert Speicher
parent 5b38fced90
commit f74b33cf6e
4 changed files with 62 additions and 1 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View 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