0
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2026-08-14 13:58:53 +08:00
discourse/spec/system/page_objects/components/bookmark_list.rb
Alan Guo Xiang Tan 7ce1992ec1
FIX: Serialize only a bookmark target's active assignment (#41397)
This PR makes a bookmark's "Assigned to …" badge reflect only the
current, active assignment of the exact item that was bookmarked.

In discourse-assign, a topic or an individual post can be assigned to a
user or group, and bookmark lists show a badge for it. Previously,
`BookmarkQuery.on_preload` loaded every assignment belonging to a
bookmarked topic — without filtering on `active`, and keyed by
`topic_id` regardless of `target_type`. Bookmarks kept showing "Assigned
to …" after an assignment was deactivated (for example by
`unassign_on_close`), and when a topic carried both a direct assignment
and post-level assignments, whichever row loaded last won, so a bookmark
could show an assignee that was never assigned the bookmarked item at
all. Post bookmarks had a second problem: the
`UserBookmarkBaseSerializer` extension read the topic's assignment for
them, so a bookmark on an assigned post never showed that post's own
assignee.
2026-07-06 06:34:22 +08:00

23 lines
538 B
Ruby
Vendored

# frozen_string_literal: true
module PageObjects
module Components
class BookmarkList < PageObjects::Components::Base
SELECTOR = ".bookmark-list"
def has_assignee?(topic, assignee)
bookmark_row(topic).has_css?(".assigned-to", text: assignee.username)
end
def has_no_assignment?(topic)
bookmark_row(topic).has_no_css?(".assigned-to")
end
private
def bookmark_row(topic)
page.find("#{SELECTOR} .bookmark-list-item", text: topic.title)
end
end
end
end