#1469 more intelligent updating of last_forum_read_at
This commit is contained in:
@@ -128,9 +128,25 @@ class ForumTopic < ActiveRecord::Base
|
|||||||
ids = result.scan(/\S+/)
|
ids = result.scan(/\S+/)
|
||||||
result = ids[(ids.size / 2)..-1].join(" ")
|
result = ids[(ids.size / 2)..-1].join(" ")
|
||||||
end
|
end
|
||||||
|
update_last_forum_read_at(hash.keys)
|
||||||
result
|
result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def update_last_forum_read_at(read_forum_topic_ids)
|
||||||
|
query = ForumTopic.scoped
|
||||||
|
if CurrentUser.user.last_forum_read_at.present?
|
||||||
|
query = query.where("updated_at > ?", CurrentUser.last_forum_read_at)
|
||||||
|
end
|
||||||
|
if read_forum_topic_ids.any?
|
||||||
|
query = query.where("id not in (?)", read_forum_topic_ids)
|
||||||
|
end
|
||||||
|
query = query.order("updated_at asc")
|
||||||
|
topic = query.first
|
||||||
|
if topic
|
||||||
|
CurrentUser.user.update_attribute(:last_forum_read_at, topic.updated_at)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def merge(topic)
|
def merge(topic)
|
||||||
ForumPost.update_all({:topic_id => id}, :id => topic.posts.map(&:id))
|
ForumPost.update_all({:topic_id => id}, :id => topic.posts.map(&:id))
|
||||||
update_attribute(:is_deleted, true)
|
update_attribute(:is_deleted, true)
|
||||||
|
|||||||
@@ -14,6 +14,45 @@ class ForumTopicTest < ActiveSupport::TestCase
|
|||||||
CurrentUser.ip_addr = nil
|
CurrentUser.ip_addr = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "#update_last_forum_read_at" do
|
||||||
|
setup do
|
||||||
|
@topics = [@topic]
|
||||||
|
1.upto(6) do |i|
|
||||||
|
Timecop.travel(i.days.from_now) do
|
||||||
|
@topics << FactoryGirl.create(:forum_topic, :title => "xxx")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@read_forum_topic_ids = []
|
||||||
|
@read_forum_topic_ids << @topics[0]
|
||||||
|
@read_forum_topic_ids << @topics[2]
|
||||||
|
@read_forum_topic_ids << @topics[4]
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when the user's last_forum_read_at is null" do
|
||||||
|
setup do
|
||||||
|
@user.update_attribute(:last_forum_read_at, nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "return the oldest unread topic" do
|
||||||
|
@topic.update_last_forum_read_at(@read_forum_topic_ids)
|
||||||
|
@user.reload
|
||||||
|
assert_equal(@topics[1].updated_at.to_i, @user.last_forum_read_at.to_i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when the user's last_forum_read_at is 2 days from now" do
|
||||||
|
setup do
|
||||||
|
@user.update_attribute(:last_forum_read_at, 2.days.from_now)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "return the oldest unread topic" do
|
||||||
|
@topic.update_last_forum_read_at(@read_forum_topic_ids)
|
||||||
|
@user.reload
|
||||||
|
assert_equal(@topics[3].updated_at.to_i, @user.last_forum_read_at.to_i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "#merge" do
|
context "#merge" do
|
||||||
setup do
|
setup do
|
||||||
@topic2 = FactoryGirl.create(:forum_topic, :title => "yyy")
|
@topic2 = FactoryGirl.create(:forum_topic, :title => "yyy")
|
||||||
|
|||||||
Reference in New Issue
Block a user