mirror of
https://github.com/discourse/discourse.git
synced 2025-06-06 03:06:53 +08:00
FIX: Admin search logs should filter by date instead of timestamp.
The client side filters by date so it is confusion when the data changes as each second passes.
This commit is contained in:
@ -3,6 +3,8 @@ require_dependency 'enum'
|
||||
class SearchLog < ActiveRecord::Base
|
||||
validates_presence_of :term
|
||||
|
||||
belongs_to :user
|
||||
|
||||
attr_reader :ctr
|
||||
|
||||
def ctr
|
||||
@ -146,16 +148,6 @@ class SearchLog < ActiveRecord::Base
|
||||
.limit(limit)
|
||||
end
|
||||
|
||||
def self.start_of(period)
|
||||
case period
|
||||
when :yearly then 1.year.ago
|
||||
when :monthly then 1.month.ago
|
||||
when :quarterly then 3.months.ago
|
||||
when :weekly then 1.week.ago
|
||||
when :daily then 1.day.ago
|
||||
else 1000.years.ago
|
||||
end
|
||||
end
|
||||
|
||||
def self.clean_up
|
||||
search_id = SearchLog.order(:id).offset(SiteSetting.search_query_log_max_size).limit(1).pluck(:id)
|
||||
@ -164,6 +156,21 @@ class SearchLog < ActiveRecord::Base
|
||||
end
|
||||
SearchLog.where('created_at < TIMESTAMP ?', SiteSetting.search_query_log_max_retention_days.days.ago).delete_all
|
||||
end
|
||||
|
||||
def self.start_of(period)
|
||||
period =
|
||||
case period
|
||||
when :yearly then 1.year.ago
|
||||
when :monthly then 1.month.ago
|
||||
when :quarterly then 3.months.ago
|
||||
when :weekly then 1.week.ago
|
||||
when :daily then Time.zone.now
|
||||
else 1000.years.ago
|
||||
end
|
||||
|
||||
period&.to_date
|
||||
end
|
||||
private_class_method :start_of
|
||||
end
|
||||
|
||||
# == Schema Information
|
||||
|
5
spec/fabricators/search_log_fabricator.rb
Normal file
5
spec/fabricators/search_log_fabricator.rb
Normal file
@ -0,0 +1,5 @@
|
||||
Fabricator(:search_log) do
|
||||
term "ruby"
|
||||
search_type SearchLog.search_types[:header]
|
||||
ip_address "127.0.0.1"
|
||||
end
|
@ -162,19 +162,29 @@ RSpec.describe SearchLog, type: :model do
|
||||
end
|
||||
|
||||
describe ".term_details" do
|
||||
before do
|
||||
SearchLog.log(term: "ruby", search_type: :header, ip_address: "127.0.0.1")
|
||||
SearchLog.log(term: 'rUby', search_type: :header, ip_address: '127.0.0.1', user_id: Fabricate(:user).id)
|
||||
SearchLog.log(term: "ruBy", search_type: :full_page, ip_address: "127.0.0.2")
|
||||
it "should only use the date for the period" do
|
||||
time = Time.new(2019, 5, 23, 18, 15, 30)
|
||||
freeze_time(time)
|
||||
|
||||
SearchLog.log(
|
||||
term: "ruby core",
|
||||
search_type: :header,
|
||||
ip_address: "127.0.0.3"
|
||||
)
|
||||
search_log = Fabricate(:search_log, created_at: time - 1.hour)
|
||||
search_log2 = Fabricate(:search_log, created_at: time + 1.hour)
|
||||
|
||||
details = SearchLog.term_details(search_log.term, :daily)
|
||||
|
||||
expect(details[:data].first[:y]).to eq(2)
|
||||
end
|
||||
|
||||
it "correctly returns term details" do
|
||||
Fabricate(:search_log, term: "ruby")
|
||||
Fabricate(:search_log, term: "ruBy", user: Fabricate(:user))
|
||||
Fabricate(:search_log, term: "ruby core", ip_address: "127.0.0.3")
|
||||
|
||||
Fabricate(:search_log,
|
||||
term: "ruBy",
|
||||
search_type: SearchLog.search_types[:full_page],
|
||||
ip_address: "127.0.0.2"
|
||||
)
|
||||
|
||||
term_details = SearchLog.term_details("ruby")
|
||||
expect(term_details[:data][0][:y]).to eq(3)
|
||||
|
||||
|
Reference in New Issue
Block a user