From 4fea926057aa291b25a9739dcd33d344f9d1de3a Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Thu, 25 Aug 2016 01:29:29 +0200 Subject: [PATCH] Only update interacted_at on new comments I got feedback from many users, that they don't understand how the "my activity" stream is sorted, because they have posts on the top, but don't see why. The user doesn't see if a like was added, and it is also not imported for the user to see the post again then. And we have notifications if someone likes a users own posts, so no need to move it on top of the "my activity" stream here too. closes #7030 --- Changelog.md | 1 + app/models/comment.rb | 5 +++-- lib/diaspora/relayable.rb | 4 ---- spec/lib/evil_query_spec.rb | 4 ++-- spec/models/comment_spec.rb | 10 ++++++++++ spec/models/like_spec.rb | 10 ++++++++++ spec/shared_behaviors/relayable.rb | 11 ----------- 7 files changed, 26 insertions(+), 19 deletions(-) diff --git a/Changelog.md b/Changelog.md index 4ea3f51e7..388087832 100644 --- a/Changelog.md +++ b/Changelog.md @@ -5,6 +5,7 @@ * Remove text color from notification mails and fix sender avatar [#7054](https://github.com/diaspora/diaspora/pull/7054) * Make the session cookies HttpOnly again [#7041](https://github.com/diaspora/diaspora/pull/7041) * Invalidate sessions with invalid CSRF tokens [#7050](https://github.com/diaspora/diaspora/pull/7050) +* Liking a post will no longer update its interacted timestamp [#7030](https://github.com/diaspora/diaspora/pull/7030) ## Bug fixes * Post comments no longer get collapsed when interacting with a post [#7040](https://github.com/diaspora/diaspora/pull/7040) diff --git a/app/models/comment.rb b/app/models/comment.rb index 1fac00c8d..8d98e52ec 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -38,8 +38,9 @@ class Comment < ActiveRecord::Base self.text.strip! unless self.text.nil? end - after_commit :on => :create do - self.parent.update_comments_counter + after_commit on: :create do + parent.update_comments_counter + parent.touch(:interacted_at) if parent.respond_to?(:interacted_at) end after_destroy do diff --git a/lib/diaspora/relayable.rb b/lib/diaspora/relayable.rb index 8db901f4a..c471636db 100644 --- a/lib/diaspora/relayable.rb +++ b/lib/diaspora/relayable.rb @@ -11,10 +11,6 @@ module Diaspora delegate :public?, to: :parent delegate :author, :diaspora_handle, to: :parent, prefix: true - - after_commit :on => :create do - parent.touch(:interacted_at) if parent.respond_to?(:interacted_at) - end end end diff --git a/spec/lib/evil_query_spec.rb b/spec/lib/evil_query_spec.rb index 744877034..d263fbc68 100644 --- a/spec/lib/evil_query_spec.rb +++ b/spec/lib/evil_query_spec.rb @@ -83,8 +83,8 @@ describe EvilQuery::Participation do expect(posts.map(&:id)).to match_array([@status_messageA.id, @status_messageB.id, @status_messageE.id]) end - it "returns the posts that the user has commented on or liked with the most recently acted on ones first" do - expect(posts.map(&:id)).to eq([@status_messageE.id, @status_messageA.id, @status_messageB.id]) + it "returns the posts that the user has commented on most recently first" do + expect(posts.map(&:id)).to eq([@status_messageE.id, @status_messageB.id, @status_messageA.id]) end end diff --git a/spec/models/comment_spec.rb b/spec/models/comment_spec.rb index 135e0174b..276df3761 100644 --- a/spec/models/comment_spec.rb +++ b/spec/models/comment_spec.rb @@ -66,6 +66,16 @@ describe Comment, type: :model do end end + describe "interacted_at" do + it "sets the interacted at of the parent to the created at of the comment" do + Timecop.travel(Time.zone.now + 1.minute) + + comment = Comment::Generator.new(alice, status_bob, "why so formal?").build + comment.save + expect(status_bob.reload.interacted_at.to_i).to eq(comment.created_at.to_i) + end + end + it_behaves_like "it is relayable" do let(:remote_parent) { FactoryGirl.create(:status_message, author: remote_raphael) } let(:local_parent) { local_luke.post(:status_message, text: "hi", to: local_luke.aspects.first) } diff --git a/spec/models/like_spec.rb b/spec/models/like_spec.rb index 64f3d79db..bec11931d 100644 --- a/spec/models/like_spec.rb +++ b/spec/models/like_spec.rb @@ -43,6 +43,16 @@ describe Like, type: :model do end end + describe "interacted_at" do + it "doesn't change the interacted at timestamp of the parent" do + interacted_at = status.reload.interacted_at.to_i + + Timecop.travel(Time.zone.now + 1.minute) + Like::Generator.new(alice, status).build.save + expect(status.reload.interacted_at.to_i).to eq(interacted_at) + end + end + it_behaves_like "it is relayable" do let(:remote_parent) { FactoryGirl.create(:status_message, author: remote_raphael) } let(:local_parent) { local_luke.post(:status_message, text: "hi", to: local_luke.aspects.first) } diff --git a/spec/shared_behaviors/relayable.rb b/spec/shared_behaviors/relayable.rb index 2fd48d904..a1e18e7f2 100644 --- a/spec/shared_behaviors/relayable.rb +++ b/spec/shared_behaviors/relayable.rb @@ -5,17 +5,6 @@ require "spec_helper" shared_examples_for "it is relayable" do - describe "interacted_at" do - it "sets the interacted at of the parent to the created at of the relayable post" do - Timecop.freeze Time.now do - relayable.save - if relayable.parent.respond_to?(:interacted_at) #I'm sorry. - expect(relayable.parent.interacted_at.to_i).to eq(relayable.created_at.to_i) - end - end - end - end - describe "validations" do context "author ignored by parent author" do context "the author is on the parent object author's ignore list when object is created" do