Merge pull request #3782 from consul/title_or_id_integer
Fix investments search with numbers in their title
This commit is contained in:
@@ -151,8 +151,8 @@ class Budget
|
||||
results = results.by_valuator(params[:valuator_id]) if params[:valuator_id].present?
|
||||
results = results.by_valuator_group(params[:valuator_group_id]) if params[:valuator_group_id].present?
|
||||
results = results.by_admin(params[:administrator_id]) if params[:administrator_id].present?
|
||||
results = results.search_by_title_or_id(params[:title_or_id].strip) if params[:title_or_id]
|
||||
results = advanced_filters(params, results) if params[:advanced_filters].present?
|
||||
results = search_by_title_or_id(params[:title_or_id].strip, results) if params[:title_or_id]
|
||||
|
||||
results = results.send(current_filter) if current_filter.present?
|
||||
results.includes(:heading, :group, :budget, administrator: :user, valuators: :user)
|
||||
@@ -200,11 +200,11 @@ class Budget
|
||||
results.where("budget_investments.id IN (?)", ids)
|
||||
end
|
||||
|
||||
def self.search_by_title_or_id(title_or_id, results)
|
||||
return results.where(id: title_or_id) if title_or_id =~ /^[0-9]+$/
|
||||
def self.search_by_title_or_id(title_or_id)
|
||||
with_joins = with_translations(Globalize.fallbacks(I18n.locale))
|
||||
|
||||
results.with_translations(Globalize.fallbacks(I18n.locale)).
|
||||
where("budget_investment_translations.title ILIKE ?", "%#{title_or_id}%")
|
||||
with_joins.where(id: title_or_id).
|
||||
or(with_joins.where("budget_investment_translations.title ILIKE ?", "%#{title_or_id}%"))
|
||||
end
|
||||
|
||||
def searchable_values
|
||||
|
||||
@@ -648,26 +648,28 @@ describe Budget::Investment do
|
||||
end
|
||||
|
||||
describe "search_by_title_or_id" do
|
||||
before { create(:budget_investment) }
|
||||
it "does not return investments by description" do
|
||||
create(:budget_investment, title: "Something", description: "Awesome")
|
||||
|
||||
let!(:investment) do
|
||||
I18n.with_locale(:es) do
|
||||
create(:budget_investment,
|
||||
title_es: "Título del proyecto de inversión",
|
||||
description_es: "Descripción del proyecto de inversión")
|
||||
end
|
||||
expect(Budget::Investment.search_by_title_or_id("Awesome")).to be_empty
|
||||
end
|
||||
|
||||
let(:all_investments) { Budget::Investment.all }
|
||||
it "returns investment by given id" do
|
||||
investment = create(:budget_investment)
|
||||
|
||||
it "return investment by given id" do
|
||||
expect(Budget::Investment.search_by_title_or_id(investment.id.to_s, all_investments)).
|
||||
to eq([investment])
|
||||
expect(Budget::Investment.search_by_title_or_id(investment.id.to_s)).to eq([investment])
|
||||
end
|
||||
|
||||
it "return investments by given title" do
|
||||
expect(Budget::Investment.search_by_title_or_id("Título del proyecto de inversión", all_investments)).
|
||||
to eq([investment])
|
||||
it "returns investments by given title" do
|
||||
investment = create(:budget_investment, title: "Investment title")
|
||||
|
||||
expect(Budget::Investment.search_by_title_or_id("Investment title")).to eq([investment])
|
||||
end
|
||||
|
||||
it "finds investments with numbers in their title" do
|
||||
investment = create(:budget_investment, title: "99 red balloons")
|
||||
|
||||
expect(Budget::Investment.search_by_title_or_id("99")).to eq([investment])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user