Merge pull request #8442 from Flaburgan/mark-like-on-comment-notifications-as-read

Mark Likes on comment notifications as read when visiting a post
This commit is contained in:
Benjamin Neff 2024-06-05 01:00:37 +02:00
commit 80beedfe63
No known key found for this signature in database
GPG key ID: 971464C3F1A90194
3 changed files with 52 additions and 1 deletions

View file

@ -81,7 +81,7 @@ We recommend setting up new pods using Ruby 3.3, and updating existing pods to t
* Tell users that there is no help in mobile version, allow to switch to desktop [#8407](https://github.com/diaspora/diaspora/pull/8407)
* Add Smart App Banner on iOS devices [#8409](https://github.com/diaspora/diaspora/pull/8409)
* Add a more detailed modal when reporting a post or a comment [#8035](https://github.com/diaspora/diaspora/pull/8035)
* Re-introduce likes on comments [#8203](https://github.com/diaspora/diaspora/pull/8203)
* Re-introduce likes on comments [#8203](https://github.com/diaspora/diaspora/pull/8203) [#8442](https://github.com/diaspora/diaspora/pull/8442)
* New redesigned registration page [#8285](https://github.com/diaspora/diaspora/pull/8285)
* Allow comments to be fetched [#8441](https://github.com/diaspora/diaspora/pull/8441)

View file

@ -33,6 +33,7 @@ class PostService
return unless user
mark_comment_reshare_like_notifications_read(post_id)
mark_mention_notifications_read(post_id)
mark_like_on_comment_notifications_read(post_id)
end
def destroy(post_id, private_allowed=true)
@ -101,4 +102,10 @@ class PostService
.joins("INNER JOIN comments ON mentions_container_id = comments.id AND mentions_container_type = 'Comment'")
.where(comments: {commentable_id: post_id, commentable_type: "Post"})
end
def mark_like_on_comment_notifications_read(post_id)
Notification.where(recipient_id: user.id, target_type: "Comment",
target_id: Comment.where(commentable_id: post_id, author_id: user.person.id),
unread: true).update_all(unread: false) # rubocop:disable Rails/SkipsModelValidations
end
end

View file

@ -168,6 +168,50 @@ describe PostService do
expect_any_instance_of(PostService).not_to receive(:mark_mention_notifications_read).with(post.id)
PostService.new.mark_user_notifications(post.id)
end
context "for comments" do
let(:comment) { post.comments.create(author: alice.person, text: "comment") }
it "marks a corresponding notifications as read" do
FactoryBot.create(:notification, recipient: alice, target: comment, unread: true)
FactoryBot.create(:notification, recipient: alice, target: comment, unread: true)
expect {
PostService.new(alice).mark_user_notifications(post.id)
}.to change(Notification.where(unread: true), :count).by(-2)
end
it "does not change the update_at date/time for comment notifications" do
notification = Timecop.travel(1.minute.ago) do
FactoryBot.create(:notification, recipient: alice, target: comment, unread: true)
end
expect {
PostService.new(alice).mark_user_notifications(post.id)
}.not_to(change { Notification.where(id: notification.id).pluck(:updated_at) })
end
it "does not change other users notifications" do
alice_notification = FactoryBot.create(:notification, recipient: alice, target: comment, unread: true)
bob_notification = FactoryBot.create(:notification, recipient: bob, target: comment, unread: true)
PostService.new(alice).mark_user_notifications(post.id)
expect(Notification.find(alice_notification.id).unread).to be_falsey
expect(Notification.find(bob_notification.id).unread).to be_truthy
end
it "marks notifications for all comments on a post as read" do
comment2 = post.comments.create(author: alice.person, text: "comment2")
FactoryBot.create(:notification, recipient: alice, target: comment, unread: true)
FactoryBot.create(:notification, recipient: alice, target: comment2, unread: true)
expect {
PostService.new(alice).mark_user_notifications(post.id)
}.to change(Notification.where(unread: true), :count).by(-2)
end
end
end
describe "#destroy" do