diff --git a/app/models/debate.rb b/app/models/debate.rb index ed0fc17b8..8471be20d 100644 --- a/app/models/debate.rb +++ b/app/models/debate.rb @@ -128,6 +128,10 @@ class Debate < ActiveRecord::Base self.hot_score = (age_in_units**3 + weighted_score * 1000).round end + def self.search(terms) + terms.present? ? where("title ILIKE ? OR description ILIKE ?", "%#{terms}%", "%#{terms}%") : none + end + protected def sanitize_description diff --git a/spec/models/debate_spec.rb b/spec/models/debate_spec.rb index 537cc303c..25e878d18 100644 --- a/spec/models/debate_spec.rb +++ b/spec/models/debate_spec.rb @@ -239,6 +239,33 @@ describe Debate do end + describe "self.search" do + it "find debates by title" do + debate1 = create(:debate, title: "Karpov vs Kasparov") + create(:debate, title: "Bird vs Magic") + search = Debate.search("Kasparov") + expect(search.size).to eq(1) + expect(search.first).to eq(debate1) + end + it "find debates by description" do + debate1 = create(:debate, description: "...chess masters...") + create(:debate, description: "...basket masters...") + search = Debate.search("chess") + expect(search.size).to eq(1) + expect(search.first).to eq(debate1) + end -end + it "find debates by title and description" do + create(:debate, title: "Karpov vs Kasparov", description: "...played like Gauss...") + create(:debate, title: "Euler vs Gauss", description: "...math masters...") + search = Debate.search("Gauss") + expect(search.size).to eq(2) + end + + it "returns no results if no search term provided" do + expect(Debate.search(" ").size).to eq(0) + end + end + +end \ No newline at end of file diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 87d0994bb..282d8d615 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -249,7 +249,7 @@ describe User do expect(search.first).to eq(user1) end - it "returns no results if no email provided" do + it "returns no results if no search term provided" do expect(User.search(" ").size).to eq(0) end end