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 # frozen_string_literal: true
class Projects::AutocompleteSourcesController < Projects::ApplicationController class Projects::AutocompleteSourcesController < Projects::ApplicationController
before_action :load_autocomplete_service, except: [:members] prepend EE::Projects::AutocompleteSourcesController
def members def members
render json: ::Projects::ParticipantsService.new(@project, current_user).execute(target) render json: ::Projects::ParticipantsService.new(@project, current_user).execute(target)
end end
def issues def issues
render json: @autocomplete_service.issues render json: autocomplete_service.issues
end end
def merge_requests def merge_requests
render json: @autocomplete_service.merge_requests render json: autocomplete_service.merge_requests
end end
def labels def labels
render json: @autocomplete_service.labels_as_hash(target) render json: autocomplete_service.labels_as_hash(target)
end end
def milestones def milestones
render json: @autocomplete_service.milestones render json: autocomplete_service.milestones
end end
def commands def commands
render json: @autocomplete_service.commands(target, params[:type]) render json: autocomplete_service.commands(target, params[:type])
end end
def snippets def snippets
render json: @autocomplete_service.snippets render json: autocomplete_service.snippets
end end
private private
def load_autocomplete_service def autocomplete_service
@autocomplete_service = ::Projects::AutocompleteService.new(@project, current_user) @autocomplete_service ||= ::Projects::AutocompleteService.new(@project, current_user)
end end
def target def target
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
module Projects module Projects
class AutocompleteService < BaseService class AutocompleteService < BaseService
prepend EE::Projects::AutocompleteService
include LabelsAsHash include LabelsAsHash
def issues def issues
IssuesFinder.new(current_user, project_id: project.id, state: 'opened').execute.select([:iid, :title]) 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 ...@@ -69,14 +69,18 @@ module EE
def autocomplete_data_sources(object, noteable_type) def autocomplete_data_sources(object, noteable_type)
return {} unless 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]), members: members_group_autocomplete_sources_path(object, type: noteable_type, type_id: params[:id]),
labels: labels_group_autocomplete_sources_path(object), labels: labels_group_autocomplete_sources_path(object),
epics: epics_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]) 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 end
def instance_review_permitted? 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' require 'spec_helper'
describe Groups::AutocompleteSourcesController do describe Groups::AutocompleteSourcesController do
......
...@@ -70,11 +70,29 @@ describe ApplicationHelper do ...@@ -70,11 +70,29 @@ describe ApplicationHelper do
let(:object) { create(:project) } let(:object) { create(:project) }
let(:noteable_type) { Issue } 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 it 'returns paths for autocomplete_sources_controller' do
expect_autocomplete_data_sources(object, noteable_type, [:members, :issues, :mergeRequests, :labels, :milestones, :commands, :snippets]) expect_autocomplete_data_sources(object, noteable_type, [:members, :issues, :mergeRequests, :labels, :milestones, :commands, :snippets])
end end
end end
end end
end
context 'when both CE and EE has partials with the same name' do context 'when both CE and EE has partials with the same name' do
let(:partial) { 'shared/issuable/form/default_templates' } 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