From 71a19c28f1875d5de973a02e5e4147bbd2a5bd2e Mon Sep 17 00:00:00 2001 From: evazion Date: Sat, 13 May 2017 13:50:20 -0500 Subject: [PATCH] forum topics: don't record a topic visit for api requests. --- app/controllers/forum_topics_controller.rb | 2 +- app/models/forum_topic.rb | 4 ++-- test/functional/forum_topics_controller_test.rb | 10 ++++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/controllers/forum_topics_controller.rb b/app/controllers/forum_topics_controller.rb index ac8643780..bda3d3bb4 100644 --- a/app/controllers/forum_topics_controller.rb +++ b/app/controllers/forum_topics_controller.rb @@ -33,7 +33,7 @@ class ForumTopicsController < ApplicationController end def show - unless CurrentUser.user.is_anonymous? + if request.format == Mime::HTML @forum_topic.mark_as_read!(CurrentUser.user) end @forum_posts = ForumPost.search(:topic_id => @forum_topic.id).order("forum_posts.id").paginate(params[:page]) diff --git a/app/models/forum_topic.rb b/app/models/forum_topic.rb index e912c7b7c..668e809b9 100644 --- a/app/models/forum_topic.rb +++ b/app/models/forum_topic.rb @@ -103,8 +103,8 @@ class ForumTopic < ActiveRecord::Base ForumTopicVisit.where("user_id = ? and forum_topic_id = ? and last_read_at >= ?", user.id, id, updated_at).exists? end - def mark_as_read!(user = nil) - user ||= CurrentUser.user + def mark_as_read!(user = CurrentUser.user) + return if user.is_anonymous? match = ForumTopicVisit.where(:user_id => user.id, :forum_topic_id => id).first if match diff --git a/test/functional/forum_topics_controller_test.rb b/test/functional/forum_topics_controller_test.rb index 586d548d1..a3fce8a99 100644 --- a/test/functional/forum_topics_controller_test.rb +++ b/test/functional/forum_topics_controller_test.rb @@ -56,6 +56,16 @@ class ForumTopicsControllerTest < ActionController::TestCase get :show, {:id => @forum_topic.id} assert_response :success end + + should "record a topic visit for html requests" do + get :show, {id: @forum_topic.id}, {user_id: @user.id} + assert_not_nil(@user.reload.last_forum_read_at) + end + + should "not record a topic visit for non-html requests" do + get :show, {id: @forum_topic.id, format: :json}, {user_id: @user.id} + assert_nil(@user.reload.last_forum_read_at) + end end context "index action" do