diff --git a/app/controllers/admin/runners_controller.rb b/app/controllers/admin/runners_controller.rb index dd6b3c98496..8a00408001e 100644 --- a/app/controllers/admin/runners_controller.rb +++ b/app/controllers/admin/runners_controller.rb @@ -49,7 +49,7 @@ class Admin::RunnersController < Admin::ApplicationController end def tag_list - tags = Autocomplete::ActsAsTaggableOn::TagsFinder.new(taggable_type: Ci::Runner, params: params).execute + tags = Autocomplete::ActsAsTaggableOn::TagsFinder.new(params: params).execute render json: ActsAsTaggableOn::TagSerializer.new.represent(tags) end diff --git a/app/finders/autocomplete/acts_as_taggable_on/tags_finder.rb b/app/finders/autocomplete/acts_as_taggable_on/tags_finder.rb index 81e22c85d34..71dffb72dce 100644 --- a/app/finders/autocomplete/acts_as_taggable_on/tags_finder.rb +++ b/app/finders/autocomplete/acts_as_taggable_on/tags_finder.rb @@ -5,30 +5,19 @@ module Autocomplete class TagsFinder LIMIT = 20 - def initialize(taggable_type:, params:) - @taggable_type = taggable_type + def initialize(params:) @params = params end def execute @tags = ::ActsAsTaggableOn::Tag.all - filter_by_taggable_type! search! limit! @tags end - def filter_by_taggable_type! - # rubocop: disable CodeReuse/ActiveRecord - @tags = @tags - .joins(:taggings) - .where(taggings: { taggable_type: @taggable_type.name }) - .distinct - # rubocop: enable CodeReuse/ActiveRecord - end - def search! search = @params[:search] diff --git a/spec/finders/autocomplete/acts_as_taggable_on/tags_finder_spec.rb b/spec/finders/autocomplete/acts_as_taggable_on/tags_finder_spec.rb index 9d1fac20362..857f6bba7e6 100644 --- a/spec/finders/autocomplete/acts_as_taggable_on/tags_finder_spec.rb +++ b/spec/finders/autocomplete/acts_as_taggable_on/tags_finder_spec.rb @@ -6,10 +6,10 @@ describe Autocomplete::ActsAsTaggableOn::TagsFinder do describe '#execute' do context 'with empty params' do it 'returns all tags' do - create :ci_runner, tag_list: ['tag1'] - create :ci_runner, tag_list: ['tag2'] + ActsAsTaggableOn::Tag.create!(name: 'tag1') + ActsAsTaggableOn::Tag.create!(name: 'tag2') - tags = described_class.new(taggable_type: Ci::Runner, params: {}).execute.map(&:name) + tags = described_class.new(params: {}).execute.map(&:name) expect(tags).to match_array %w(tag1 tag2) end @@ -18,10 +18,10 @@ describe Autocomplete::ActsAsTaggableOn::TagsFinder do context 'filter by search' do context 'with an empty search term' do it 'returns an empty collection' do - create :ci_runner, tag_list: ['tag1'] - create :ci_runner, tag_list: ['tag2'] + ActsAsTaggableOn::Tag.create!(name: 'tag1') + ActsAsTaggableOn::Tag.create!(name: 'tag2') - tags = described_class.new(taggable_type: Ci::Runner, params: { search: '' }).execute.map(&:name) + tags = described_class.new(params: { search: '' }).execute.map(&:name) expect(tags).to be_empty end @@ -29,10 +29,10 @@ describe Autocomplete::ActsAsTaggableOn::TagsFinder do context 'with a search containing 2 characters' do it 'returns the tag that strictly matches the search term' do - create :ci_runner, tag_list: ['t1'] - create :ci_runner, tag_list: ['t11'] + ActsAsTaggableOn::Tag.create!(name: 't1') + ActsAsTaggableOn::Tag.create!(name: 't11') - tags = described_class.new(taggable_type: Ci::Runner, params: { search: 't1' }).execute.map(&:name) + tags = described_class.new(params: { search: 't1' }).execute.map(&:name) expect(tags).to match_array ['t1'] end @@ -40,10 +40,10 @@ describe Autocomplete::ActsAsTaggableOn::TagsFinder do context 'with a search containing 3 characters' do it 'returns the tag that partially matches the search term' do - create :ci_runner, tag_list: ['tag1'] - create :ci_runner, tag_list: ['tag11'] + ActsAsTaggableOn::Tag.create!(name: 'tag1') + ActsAsTaggableOn::Tag.create!(name: 'tag11') - tags = described_class.new(taggable_type: Ci::Runner, params: { search: 'ag1' }).execute.map(&:name) + tags = described_class.new(params: { search: 'ag1' }).execute.map(&:name) expect(tags).to match_array %w(tag1 tag11) end @@ -54,10 +54,10 @@ describe Autocomplete::ActsAsTaggableOn::TagsFinder do it 'limits the result set by the limit constant' do stub_const("#{described_class}::LIMIT", 1) - create :ci_runner, tag_list: ['tag1'] - create :ci_runner, tag_list: ['tag2'] + ActsAsTaggableOn::Tag.create!(name: 'tag1') + ActsAsTaggableOn::Tag.create!(name: 'tag2') - tags = described_class.new(taggable_type: Ci::Runner, params: { search: 'tag' }).execute + tags = described_class.new(params: { search: 'tag' }).execute expect(tags.count).to eq 1 end