DEV: Fix test (#21283)

Apostrophe-like characters (for example, ’ and ') are transformed to the
ASCII apostrophe (') regardless of search_ignore_accents.
This commit is contained in:
Bianca Nenciu 2023-05-04 16:04:26 +02:00 committed by GitHub
parent 76157c6fb0
commit d6534bdb11
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 40 deletions

View File

@ -89,9 +89,25 @@ class Search
Regexp.compile("[-–—―.。・()(){}【】⟨⟩、、,,،…‥〽「」『』〜~!:?\"'|__“”;/⁄/«»]")
end
def self.clean_term(term)
term = term.to_s.dup
# Removes any zero-width characters from search terms
term.gsub!(/[\u200B-\u200D\uFEFF]/, "")
# Replace curly quotes to regular quotes
term.gsub!(/[\u201c\u201d]/, '"')
# Replace fancy apostophes to regular apostophes
term.gsub!(/[\u02b9\u02bb\u02bc\u02bd\u02c8\u2018\u2019\u201b\u2032\uff07]/, "'")
term
end
def self.prepare_data(search_data, purpose = nil)
data = search_data.dup
data.force_encoding("UTF-8")
data = clean_term(data)
if purpose != :topic
if segment_chinese?
@ -214,12 +230,7 @@ class Search
@page = @opts[:page]
@search_all_pms = false
term = term.to_s.dup
# Removes any zero-width characters from search terms
term.gsub!(/[\u200B-\u200D\uFEFF]/, "")
# Replace curly quotes to regular quotes
term.gsub!(/[\u201c\u201d]/, '"')
term = Search.clean_term(term)
@clean_term = term
@in_title = false
@ -1284,12 +1295,6 @@ class Search
end
def self.escape_string(term)
# HACK: The and other similar characters have to be "unaccented" before
# it is escaped or the resulting tsqueries will be invalid
if SiteSetting.search_ignore_accents
term = term.gsub(/[\u02b9\u02bb\u02bc\u02bd\u02c8\u2018\u2019\u201b\u2032\uff07]/, "'")
end
PG::Connection.escape_string(term).gsub('\\', '\\\\\\')
end

View File

@ -139,33 +139,6 @@ RSpec.describe Search do
end
end
context "with apostrophes" do
fab!(:post_1) { Fabricate(:post, raw: "searching for: John's") }
fab!(:post_2) { Fabricate(:post, raw: "searching for: Johns") }
before { SearchIndexer.enable }
after { SearchIndexer.disable }
it "returns correct results" do
SiteSetting.search_ignore_accents = false
[post_1, post_2].each { |post| SearchIndexer.index(post.topic, force: true) }
expect(Search.execute("John's").posts).to contain_exactly(post_1, post_2)
expect(Search.execute("Johns").posts).to contain_exactly(post_1, post_2)
expect(Search.execute("Johns").posts).to contain_exactly(post_1, post_2)
end
it "returns correct results with accents" do
SiteSetting.search_ignore_accents = true
[post_1, post_2].each { |post| SearchIndexer.index(post.topic, force: true) }
expect(Search.execute("John's").posts).to contain_exactly(post_1, post_2)
expect(Search.execute("Johns").posts).to contain_exactly(post_1, post_2)
expect(Search.execute("Johns").posts).to contain_exactly(post_1, post_2)
end
end
describe "custom_eager_load" do
fab!(:topic) { Fabricate(:topic) }
fab!(:post) { Fabricate(:post, topic: topic) }
@ -1359,7 +1332,10 @@ RSpec.describe Search do
end
context "with non staff logged in" do
it "shows doesnt show group" do
fab!(:user) { Fabricate(:user) }
it "shows doesn't show group" do
expect(search(user).groups.map(&:name)).to eq([])
end
end
end