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)
|
.new(params: params, current_user: current_user, project: project, group: group)
|
||||||
.execute
|
.execute
|
||||||
|
|
||||||
render json: UserSerializer.new.represent(users)
|
render json: UserSerializer.new(params).represent(users, project: project)
|
||||||
end
|
end
|
||||||
|
|
||||||
def user
|
def user
|
||||||
|
|
|
@ -2,4 +2,21 @@
|
||||||
|
|
||||||
class UserSerializer < BaseSerializer
|
class UserSerializer < BaseSerializer
|
||||||
entity UserEntity
|
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
|
end
|
||||||
|
|
|
@ -222,6 +222,20 @@ describe AutocompleteController do
|
||||||
expect(response_user_ids).to contain_exactly(non_member.id)
|
expect(response_user_ids).to contain_exactly(non_member.id)
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
||||||
context 'GET projects' do
|
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