discourse/spec/lib/bookmark_reminder_notification_handler_spec.rb
Bianca Nenciu 6d422a8033
FEATURE: Highlight expired bookmark reminders (#15317)
The user can select what happens with a bookamrk after it expires. New
option allow bookmark's reminder to be kept even after it has expired.
After a bookmark's reminder notification is created, the reminder date
will be highlighted in red until the user resets the reminder date.
User can do that using the new Clear Reminder button from the dropdown.
2022-03-08 19:44:18 +02:00

103 lines
3.5 KiB
Ruby

# frozen_string_literal: true
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
context "when the topic is deleted" do
before do
bookmark.topic.trash!
bookmark.reload
end
it "does not send a notification and updates last notification attempt time" do
expect { subject.send_notification(bookmark) }.not_to change { Notification.count }
expect(bookmark.reload.reminder_last_sent_at).not_to be_blank
end
end
context "when the post is deleted" do
before do
bookmark.post.trash!
bookmark.reload
end
it "does not send a notification and updates last notification attempt time" do
expect { subject.send_notification(bookmark) }.not_to change { Notification.count }
expect(bookmark.reload.reminder_last_sent_at).not_to be_blank
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 auto_delete_preference is clear_reminder" do
before do
TopicUser.create!(topic: bookmark.topic, user: user, bookmarked: true)
bookmark.update(auto_delete_preference: Bookmark.auto_delete_preferences[:clear_reminder])
end
it "resets reminder_at after the reminder gets sent" do
subject.send_notification(bookmark)
expect(Bookmark.find_by(id: bookmark.id).reminder_at).to eq(nil)
end
end
context "when the post has been deleted" do
it "does not send a notification" do
bookmark.post.trash!
bookmark.reload
expect { subject.send_notification(bookmark) }.not_to change { Notification.count }
expect(bookmark.reload.reminder_last_sent_at).not_to be_blank
end
end
end
end