Commit 77709ad6 authored by Grzegorz Bizon's avatar Grzegorz Bizon

Merge branch '7472-epics-autocomplete' into 'master'

Support epics autocomplete for project objects

Closes #7472

See merge request gitlab-org/gitlab-ee!8180
parents 05e8e4fc 3e8e1c5a
# frozen_string_literal: true
class Projects::AutocompleteSourcesController < Projects::ApplicationController
before_action :load_autocomplete_service, except: [:members]
prepend EE::Projects::AutocompleteSourcesController
def members
render json: ::Projects::ParticipantsService.new(@project, current_user).execute(target)
end
def issues
render json: @autocomplete_service.issues
render json: autocomplete_service.issues
end
def merge_requests
render json: @autocomplete_service.merge_requests
render json: autocomplete_service.merge_requests
end
def labels
render json: @autocomplete_service.labels_as_hash(target)
render json: autocomplete_service.labels_as_hash(target)
end
def milestones
render json: @autocomplete_service.milestones
render json: autocomplete_service.milestones
end
def commands
render json: @autocomplete_service.commands(target, params[:type])
render json: autocomplete_service.commands(target, params[:type])
end
def snippets
render json: @autocomplete_service.snippets
render json: autocomplete_service.snippets
end
private
def load_autocomplete_service
@autocomplete_service = ::Projects::AutocompleteService.new(@project, current_user)
def autocomplete_service
@autocomplete_service ||= ::Projects::AutocompleteService.new(@project, current_user)
end
def target
......
......@@ -2,6 +2,8 @@
module Projects
class AutocompleteService < BaseService
prepend EE::Projects::AutocompleteService
include LabelsAsHash
def issues
IssuesFinder.new(current_user, project_id: project.id, state: 'opened').execute.select([:iid, :title])
......
# frozen_string_literal: true
module EE
module Projects
module AutocompleteSourcesController
extend ActiveSupport::Concern
def epics
return render_404 unless project.group.feature_available?(:epics)
render json: autocomplete_service.epics
end
end
end
end
......@@ -69,14 +69,18 @@ module EE
def autocomplete_data_sources(object, noteable_type)
return {} unless object && noteable_type
return super unless object.is_a?(Group)
if object.is_a?(Group)
{
members: members_group_autocomplete_sources_path(object, type: noteable_type, type_id: params[:id]),
labels: labels_group_autocomplete_sources_path(object),
epics: epics_group_autocomplete_sources_path(object),
commands: commands_group_autocomplete_sources_path(object, type: noteable_type, type_id: params[:id])
}
elsif object.group&.feature_available?(:epics)
{ epics: epics_project_autocomplete_sources_path(object) }.merge(super)
else
super
end
end
def instance_review_permitted?
......
# frozen_string_literal: true
module EE
module Projects
module AutocompleteService
def epics
EpicsFinder
.new(current_user, group_id: project.group&.id, state: 'opened')
.execute.select([:iid, :title])
end
end
end
end
---
title: Support epics autocomplete for project objects
merge_request: 8180
author:
type: added
# frozen_string_literal: true
constraints(::Constraints::ProjectUrlConstrainer.new) do
scope(path: '*namespace_id',
as: :namespace,
namespace_id: Gitlab::PathRegex.full_namespace_route_regex) do
scope(path: ':project_id',
constraints: { project_id: Gitlab::PathRegex.project_route_regex },
module: :projects,
as: :project) do
resources :autocomplete_sources, only: [] do
collection do
get 'epics'
end
end
end
end
end
# frozen_string_literal: true
require 'spec_helper'
describe Projects::AutocompleteSourcesController do
set(:user) { create(:user) }
set(:group) { create(:group) }
set(:group2) { create(:group) }
set(:project) { create(:project, :public, group: group) }
set(:epic) { create(:epic, group: group) }
set(:epic2) { create(:epic, group: group2) }
before do
sign_in(user)
end
context 'when epics feture is disabled' do
it 'returns 404 status' do
get :epics, namespace_id: project.namespace, project_id: project
expect(response).to have_gitlab_http_status(404)
end
end
context 'when epics feture is enabled' do
before do
stub_licensed_features(epics: true)
end
context '#epics' do
it 'returns the correct response' do
get :epics, namespace_id: project.namespace, project_id: project
expect(response).to have_gitlab_http_status(200)
expect(json_response).to be_an(Array)
expect(json_response.count).to eq(1)
expect(json_response.first).to include(
'iid' => epic.iid, 'title' => epic.title
)
end
end
end
end
# frozen_string_literal: tru
# frozen_string_literal: true
require 'spec_helper'
describe Groups::AutocompleteSourcesController do
......
......@@ -70,11 +70,29 @@ describe ApplicationHelper do
let(:object) { create(:project) }
let(:noteable_type) { Issue }
context 'when epics are enabled' do
before do
stub_licensed_features(epics: true)
end
it 'returns paths for autocomplete_sources_controller for personal projects' do
expect_autocomplete_data_sources(object, noteable_type, [:members, :issues, :mergeRequests, :labels, :milestones, :commands, :snippets])
end
it 'returns paths for autocomplete_sources_controller including epics for group projects' do
object.update(group: create(:group))
expect_autocomplete_data_sources(object, noteable_type, [:members, :issues, :mergeRequests, :labels, :milestones, :commands, :snippets, :epics])
end
end
context 'when epics are disabled' do
it 'returns paths for autocomplete_sources_controller' do
expect_autocomplete_data_sources(object, noteable_type, [:members, :issues, :mergeRequests, :labels, :milestones, :commands, :snippets])
end
end
end
end
context 'when both CE and EE has partials with the same name' do
let(:partial) { 'shared/issuable/form/default_templates' }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment