diff --git a/app/models/debate.rb b/app/models/debate.rb index dab92986b..eacd4e55b 100644 --- a/app/models/debate.rb +++ b/app/models/debate.rb @@ -65,13 +65,17 @@ class Debate < ApplicationRecord .where("author_id != ?", user.id) end + def searchable_translations_definitions + { title => "A", + description => "D" } + end + def searchable_values - { title => "A", + { author.username => "B", tag_list.join(" ") => "B", geozone.try(:name) => "B", - description => "D" - } + }.merge!(searchable_globalized_values) end def self.search(terms) @@ -161,4 +165,16 @@ class Debate < ApplicationRecord orders << "recommendations" if Setting["feature.user.recommendations_on_debates"] && user&.recommended_debates return orders end + + private + + def searchable_globalized_values + values = {} + translations.each do |translation| + Globalize.with_locale(translation.locale) do + values.merge! searchable_translations_definitions + end + end + values + end end diff --git a/spec/models/debate_spec.rb b/spec/models/debate_spec.rb index 0699d646e..7d6e22763 100644 --- a/spec/models/debate_spec.rb +++ b/spec/models/debate_spec.rb @@ -465,18 +465,35 @@ describe Debate do context "attributes" do + let(:attributes) { { title: "save the world", + description: "in order to save the world one must think about...", + title_es: "para salvar el mundo uno debe pensar en...", + description_es: "uno debe pensar" } } + it "searches by title" do - debate = create(:debate, title: "save the world") + debate = create(:debate, attributes) results = described_class.search("save the world") expect(results).to eq([debate]) end + it "searches by title across all languages translations" do + debate = create(:debate, attributes) + results = described_class.search("salvar el mundo") + expect(results).to eq([debate]) + end + it "searches by description" do - debate = create(:debate, description: "in order to save the world one must think about...") + debate = create(:debate, attributes) results = described_class.search("one must think") expect(results).to eq([debate]) end + it "searches by description across all languages translations" do + debate = create(:debate, attributes) + results = described_class.search("uno debe pensar") + expect(results).to eq([debate]) + end + it "searches by author name" do author = create(:user, username: "Danny Trejo") debate = create(:debate, author: author)