mirror of
https://github.com/discourse/discourse.git
synced 2024-11-30 19:30:42 +08:00
22208836c5
We don't need no stinkin' denormalization! This commit ignores the topic_id column on bookmarks, to be deleted at a later date. We don't really need this column and it's better to rely on the post.topic_id as the canonical topic_id for bookmarks, then we don't need to remember to update both columns if the bookmarked post moves to another topic.
98 lines
3.1 KiB
Ruby
98 lines
3.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe BookmarkReminderNotificationHandler do
|
|
subject { described_class }
|
|
|
|
fab!(:user) { Fabricate(:user) }
|
|
|
|
before do
|
|
Discourse.redis.flushdb
|
|
end
|
|
|
|
describe "#send_notification" do
|
|
fab!(:bookmark) do
|
|
Fabricate(:bookmark_next_business_day_reminder, user: user)
|
|
end
|
|
|
|
it "creates a bookmark reminder notification with the correct details" do
|
|
subject.send_notification(bookmark)
|
|
notif = bookmark.user.notifications.last
|
|
expect(notif.notification_type).to eq(Notification.types[:bookmark_reminder])
|
|
expect(notif.topic_id).to eq(bookmark.topic_id)
|
|
expect(notif.post_number).to eq(bookmark.post.post_number)
|
|
data = JSON.parse(notif.data)
|
|
expect(data["topic_title"]).to eq(bookmark.topic.title)
|
|
expect(data["display_username"]).to eq(bookmark.user.username)
|
|
expect(data["bookmark_name"]).to eq(bookmark.name)
|
|
end
|
|
|
|
it "clears the reminder" do
|
|
subject.send_notification(bookmark)
|
|
expect(bookmark.reload.no_reminder?).to eq(true)
|
|
end
|
|
|
|
context "when the topic is deleted" do
|
|
before do
|
|
bookmark.topic.trash!
|
|
bookmark.reload
|
|
end
|
|
|
|
it "does not send a notification and clears the reminder" do
|
|
expect { subject.send_notification(bookmark) }.not_to change { Notification.count }
|
|
expect(bookmark.reload.no_reminder?).to eq(true)
|
|
end
|
|
end
|
|
|
|
context "when the post is deleted" do
|
|
before do
|
|
bookmark.post.trash!
|
|
bookmark.reload
|
|
end
|
|
|
|
it "does not send a notification and clears the reminder" do
|
|
expect { subject.send_notification(bookmark) }.not_to change { Notification.count }
|
|
expect(bookmark.reload.no_reminder?).to eq(true)
|
|
end
|
|
end
|
|
|
|
context "when the auto_delete_preference is when_reminder_sent" do
|
|
before do
|
|
TopicUser.create!(topic: bookmark.topic, user: user, bookmarked: true)
|
|
bookmark.update(auto_delete_preference: Bookmark.auto_delete_preferences[:when_reminder_sent])
|
|
end
|
|
|
|
it "deletes the bookmark after the reminder gets sent" do
|
|
subject.send_notification(bookmark)
|
|
expect(Bookmark.find_by(id: bookmark.id)).to eq(nil)
|
|
end
|
|
|
|
it "changes the TopicUser bookmarked column to false" do
|
|
subject.send_notification(bookmark)
|
|
expect(TopicUser.find_by(topic: bookmark.topic, user: user).bookmarked).to eq(false)
|
|
end
|
|
|
|
context "if there are still other bookmarks in the topic" do
|
|
before do
|
|
Fabricate(:bookmark, post: Fabricate(:post, topic: bookmark.topic), user: user)
|
|
end
|
|
|
|
it "does not change the TopicUser bookmarked column to false" do
|
|
subject.send_notification(bookmark)
|
|
expect(TopicUser.find_by(topic: bookmark.topic, user: user).bookmarked).to eq(true)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when the post has been deleted" do
|
|
it "clears the reminder and does not send a notification" do
|
|
bookmark.post.trash!
|
|
bookmark.reload
|
|
subject.send_notification(bookmark)
|
|
expect(bookmark.reload.no_reminder?).to eq(true)
|
|
end
|
|
end
|
|
end
|
|
end
|