# frozen_string_literal: true RSpec.describe Jobs::SyncTopicUserBookmarked do subject(:job) { described_class.new } fab!(:topic) fab!(:post1) { Fabricate(:post, topic: topic) } fab!(:post2) { Fabricate(:post, topic: topic) } fab!(:post3) { Fabricate(:post, topic: topic) } fab!(:tu1) { Fabricate(:topic_user, topic: topic, bookmarked: false) } fab!(:tu2) { Fabricate(:topic_user, topic: topic, bookmarked: false) } fab!(:tu3) { Fabricate(:topic_user, topic: topic, bookmarked: true) } fab!(:tu4) { Fabricate(:topic_user, topic: topic, bookmarked: true) } fab!(:tu5) { Fabricate(:topic_user, topic: topic, bookmarked: true) } it "corrects all topic_users.bookmarked records for the topic" do Fabricate(:bookmark, user: tu1.user, bookmarkable: topic.posts.sample) Fabricate(:bookmark, user: tu4.user, bookmarkable: topic.posts.sample) job.execute(topic_id: topic.id) expect(tu1.reload.bookmarked).to eq(true) expect(tu2.reload.bookmarked).to eq(false) expect(tu3.reload.bookmarked).to eq(false) expect(tu4.reload.bookmarked).to eq(true) expect(tu5.reload.bookmarked).to eq(false) end it "does not consider topic as bookmarked if the bookmarked post is deleted" do Fabricate(:bookmark, user: tu1.user, bookmarkable: post1) Fabricate(:bookmark, user: tu2.user, bookmarkable: post1) post1.trash! job.execute(topic_id: topic.id) expect(tu1.reload.bookmarked).to eq(false) expect(tu2.reload.bookmarked).to eq(false) end it "still considers the topic bookmarked if it has a Topic bookmarkable" do expect(tu1.reload.bookmarked).to eq(false) Fabricate(:bookmark, user: tu1.user, bookmarkable: topic) job.execute(topic_id: topic.id) expect(tu1.reload.bookmarked).to eq(true) end end