Restore DisplayAd search (#18511)

* Restore DisplayAd search

* Add tests for search behavior
This commit is contained in:
Joshua Wehner 2022-09-29 10:27:09 +02:00 committed by GitHub
parent f11726c749
commit ed2bfe59c1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 3 deletions

View file

@ -10,9 +10,7 @@ module Admin
return if params[:search].blank?
@display_ads = @display_ads
.where("processed_html ILIKE :search OR placement_area ILIKE :search OR organizations.name ILIKE :search",
search: "%#{params[:search]}%")
@display_ads = @display_ads.search_ads(params[:search])
end
def new

View file

@ -23,6 +23,11 @@ class DisplayAd < ApplicationRecord
scope :approved_and_published, -> { where(approved: true, published: true) }
scope :search_ads, lambda { |term|
where "name ILIKE :search OR processed_html ILIKE :search OR placement_area ILIKE :search",
search: "%#{term}%"
}
def self.for_display(area, user_signed_in)
relation = approved_and_published.where(placement_area: area).order(success_rate: :desc)

View file

@ -113,4 +113,28 @@ RSpec.describe DisplayAd, type: :model do
end
end
end
describe ".search_ads" do
let!(:ad) { create(:display_ad, name: "This is an Ad", body_markdown: "Ad Body", placement_area: "post_comments") }
it "finds via name" do
expect(described_class.search_ads("this").ids).to contain_exactly(ad.id)
end
it "finds via body" do
expect(described_class.search_ads("body").ids).to contain_exactly(ad.id)
end
it "finds via placement_area" do
expect(described_class.search_ads("comment").ids).to contain_exactly(ad.id)
end
it "finds just one result via multiple criteria" do
expect(described_class.search_ads("ad").ids).to contain_exactly(ad.id)
end
it "returns empty when no match" do
expect(described_class.search_ads("foo")).to eq([])
end
end
end