diff --git a/app/controllers/page_views_controller.rb b/app/controllers/page_views_controller.rb index 7acd2ac96..9f9185f35 100644 --- a/app/controllers/page_views_controller.rb +++ b/app/controllers/page_views_controller.rb @@ -18,8 +18,10 @@ class PageViewsController < ApplicationMetalController def update if session_current_user_id - page_view = PageView.find_or_create_by(article_id: params[:id], user_id: session_current_user_id) - page_view.update_column(:time_tracked_in_seconds, page_view.time_tracked_in_seconds + 15) + page_view = PageView.order("created_at DESC").find_or_create_by(article_id: params[:id], user_id: session_current_user_id) + unless page_view.new_record? + page_view.update_column(:time_tracked_in_seconds, page_view.time_tracked_in_seconds + 15) + end end head :ok diff --git a/spec/requests/page_views_spec.rb b/spec/requests/page_views_spec.rb index c98e62e79..15441db20 100644 --- a/spec/requests/page_views_spec.rb +++ b/spec/requests/page_views_spec.rb @@ -91,12 +91,15 @@ RSpec.describe "PageViews", type: :request do end it "updates a new page view time on page by 15" do - post "/page_views", params: { - article_id: article.id - } + post "/page_views", params: { article_id: article.id } put "/page_views/" + article.id.to_s expect(PageView.last.time_tracked_in_seconds).to eq(30) end + + it "does not update an invalid page view" do + invalid_id = article.id + 100 + expect { put "/page_views/" + invalid_id.to_s }.not_to raise_error + end end context "when user is not signed in" do