Merge pull request #3782 from consul/title_or_id_integer

Fix investments search with numbers in their title
This commit is contained in:
Javier Martín
2019-10-21 20:17:39 +02:00
committed by GitHub
2 changed files with 21 additions and 19 deletions

View File

@@ -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

View File

@@ -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