Merge pull request #3005 from evazion/fix-ss-query-normalization
Fix #2995: Saved searches’ tags are getting reordered
This commit is contained in:
@@ -74,14 +74,18 @@ class SavedSearch < ActiveRecord::Base
|
||||
|
||||
def self.queries_for(user_id, label = nil, options = {})
|
||||
if label
|
||||
SavedSearch.where(user_id: user_id).labeled(label).pluck("distinct query")
|
||||
SavedSearch.where(user_id: user_id).labeled(label).map(&:normalized_query).sort.uniq
|
||||
else
|
||||
SavedSearch.where(user_id: user_id).pluck("distinct query")
|
||||
SavedSearch.where(user_id: user_id).map(&:normalized_query).sort.uniq
|
||||
end
|
||||
end
|
||||
|
||||
def normalized_query
|
||||
Tag.normalize_query(query, sort: true)
|
||||
end
|
||||
|
||||
def normalize
|
||||
self.query = query_array.sort.join(" ")
|
||||
self.query = Tag.normalize_query(query, sort: false)
|
||||
self.labels = labels.map {|x| SavedSearch.normalize_label(x)}.reject {|x| x.blank?}
|
||||
end
|
||||
|
||||
@@ -103,10 +107,6 @@ class SavedSearch < ActiveRecord::Base
|
||||
end
|
||||
end
|
||||
|
||||
def query_array
|
||||
Tag.scan_tags(query)
|
||||
end
|
||||
|
||||
def label_string
|
||||
labels.join(" ")
|
||||
end
|
||||
|
||||
@@ -236,6 +236,15 @@ class Tag < ActiveRecord::Base
|
||||
query.to_s.gsub(/\u3000/, " ").strip
|
||||
end
|
||||
|
||||
def normalize_query(query, sort: true)
|
||||
tags = Tag.scan_query(query.to_s)
|
||||
tags = tags.map { |t| Tag.normalize_name(t) }
|
||||
tags = TagAlias.to_aliased(tags)
|
||||
tags = tags.sort if sort
|
||||
tags = tags.uniq
|
||||
tags.join(" ")
|
||||
end
|
||||
|
||||
def scan_query(query)
|
||||
tagstr = normalize(query)
|
||||
list = tagstr.scan(/-?source:".*?"/) || []
|
||||
|
||||
@@ -186,8 +186,8 @@ class TagAlias < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def initialize_creator
|
||||
self.creator_id = CurrentUser.user.id
|
||||
self.creator_ip_addr = CurrentUser.ip_addr
|
||||
self.creator_id ||= CurrentUser.user.id
|
||||
self.creator_ip_addr ||= CurrentUser.ip_addr
|
||||
end
|
||||
|
||||
def antecedent_tag
|
||||
|
||||
@@ -4,6 +4,7 @@ FactoryGirl.define do
|
||||
consequent_name "bbb"
|
||||
status "active"
|
||||
skip_secondary_validations true
|
||||
creator_ip_addr { FFaker::Internet.ip_v4_address }
|
||||
|
||||
after(:create) do |tag_alias|
|
||||
unless tag_alias.status == "pending"
|
||||
|
||||
@@ -30,13 +30,18 @@ class SavedSearchTest < ActiveSupport::TestCase
|
||||
context ".queries_for" do
|
||||
setup do
|
||||
@user = FactoryGirl.create(:user)
|
||||
FactoryGirl.create(:tag_alias, antecedent_name: "bbb", consequent_name: "ccc", creator: @user)
|
||||
FactoryGirl.create(:saved_search, user: @user, label_string: "blah", query: "aaa")
|
||||
FactoryGirl.create(:saved_search, user: @user, label_string: "zah", query: "bbb")
|
||||
FactoryGirl.create(:saved_search, user: @user, label_string: "zah", query: "CCC BBB AAA")
|
||||
FactoryGirl.create(:saved_search, user: @user, label_string: "qux", query: " aaa bbb ccc ")
|
||||
end
|
||||
|
||||
should "fetch the queries used by a user for a label" do
|
||||
assert_equal(%w(aaa), SavedSearch.queries_for(@user.id, "blah"))
|
||||
assert_equal(%w(aaa bbb), SavedSearch.queries_for(@user.id))
|
||||
end
|
||||
|
||||
should "return fully normalized queries" do
|
||||
assert_equal(["aaa", "aaa ccc"], SavedSearch.queries_for(@user.id))
|
||||
end
|
||||
end
|
||||
|
||||
@@ -84,7 +89,8 @@ class SavedSearchTest < ActiveSupport::TestCase
|
||||
context "Creating a saved search" do
|
||||
setup do
|
||||
@user = FactoryGirl.create(:gold_user)
|
||||
@saved_search = @user.saved_searches.create(:query => " xxx ")
|
||||
FactoryGirl.create(:tag_alias, antecedent_name: "zzz", consequent_name: "yyy", creator: @user)
|
||||
@saved_search = @user.saved_searches.create(:query => " ZZZ xxx ")
|
||||
end
|
||||
|
||||
should "update the bitpref on the user" do
|
||||
@@ -92,8 +98,8 @@ class SavedSearchTest < ActiveSupport::TestCase
|
||||
assert(@user.has_saved_searches?, "should have saved_searches bitpref set")
|
||||
end
|
||||
|
||||
should "normalize whitespace" do
|
||||
assert_equal("xxx", @saved_search.query)
|
||||
should "normalize the query aside from the order" do
|
||||
assert_equal("yyy xxx", @saved_search.query)
|
||||
end
|
||||
|
||||
should "normalize the label string" do
|
||||
|
||||
Reference in New Issue
Block a user