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:
parent
76157c6fb0
commit
d6534bdb11
|
@ -89,9 +89,25 @@ class Search
|
||||||
Regexp.compile("[-–—―.。・()()[]{}{}【】⟨⟩、、,,،…‥〽「」『』〜~!!::??\"'|__“”‘’;/⁄/«»]")
|
Regexp.compile("[-–—―.。・()()[]{}{}【】⟨⟩、、,,،…‥〽「」『』〜~!!::??\"'|__“”‘’;/⁄/«»]")
|
||||||
end
|
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)
|
def self.prepare_data(search_data, purpose = nil)
|
||||||
data = search_data.dup
|
data = search_data.dup
|
||||||
data.force_encoding("UTF-8")
|
data.force_encoding("UTF-8")
|
||||||
|
data = clean_term(data)
|
||||||
|
|
||||||
if purpose != :topic
|
if purpose != :topic
|
||||||
if segment_chinese?
|
if segment_chinese?
|
||||||
|
@ -214,12 +230,7 @@ class Search
|
||||||
@page = @opts[:page]
|
@page = @opts[:page]
|
||||||
@search_all_pms = false
|
@search_all_pms = false
|
||||||
|
|
||||||
term = term.to_s.dup
|
term = Search.clean_term(term)
|
||||||
|
|
||||||
# Removes any zero-width characters from search terms
|
|
||||||
term.gsub!(/[\u200B-\u200D\uFEFF]/, "")
|
|
||||||
# Replace curly quotes to regular quotes
|
|
||||||
term.gsub!(/[\u201c\u201d]/, '"')
|
|
||||||
|
|
||||||
@clean_term = term
|
@clean_term = term
|
||||||
@in_title = false
|
@in_title = false
|
||||||
|
@ -1284,12 +1295,6 @@ class Search
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.escape_string(term)
|
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('\\', '\\\\\\')
|
PG::Connection.escape_string(term).gsub('\\', '\\\\\\')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -139,33 +139,6 @@ RSpec.describe Search do
|
||||||
end
|
end
|
||||||
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("John’s").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("John’s").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
|
describe "custom_eager_load" do
|
||||||
fab!(:topic) { Fabricate(:topic) }
|
fab!(:topic) { Fabricate(:topic) }
|
||||||
fab!(:post) { Fabricate(:post, topic: topic) }
|
fab!(:post) { Fabricate(:post, topic: topic) }
|
||||||
|
@ -1359,7 +1332,10 @@ RSpec.describe Search do
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with non staff logged in" do
|
context "with non staff logged in" do
|
||||||
it "shows doesn’t 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
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue