|
3 | 3 | class Card::SearchableTest < ActiveSupport::TestCase |
4 | 4 | include SearchTestHelper |
5 | 5 |
|
| 6 | + test "searchable? returns true for published cards" do |
| 7 | + card = @board.cards.create!(title: "Published Card", status: "published", creator: @user) |
| 8 | + assert card.searchable? |
| 9 | + end |
| 10 | + |
| 11 | + test "searchable? returns false for draft cards" do |
| 12 | + card = @board.cards.create!(title: "Draft Card", status: "drafted", creator: @user) |
| 13 | + assert_not card.searchable? |
| 14 | + end |
| 15 | + |
6 | 16 | test "card search" do |
7 | 17 | # Searching by title |
8 | 18 | card = @board.cards.create!(title: "layout is broken", status: "published", creator: @user) |
@@ -78,4 +88,46 @@ class Card::SearchableTest < ActiveSupport::TestCase |
78 | 88 | assert_equal 0, fts_count, "FTS entry should be deleted" |
79 | 89 | end |
80 | 90 | end |
| 91 | + |
| 92 | + test "updating a draft card does not index it" do |
| 93 | + search_record_class = Search::Record.for(@user.account_id) |
| 94 | + |
| 95 | + card = @board.cards.create!(title: "Draft card", creator: @user, status: "drafted") |
| 96 | + assert_nil search_record_class.find_by(searchable_type: "Card", searchable_id: card.id) |
| 97 | + |
| 98 | + card.update!(title: "Updated draft card") |
| 99 | + assert_nil search_record_class.find_by(searchable_type: "Card", searchable_id: card.id), |
| 100 | + "Draft card should not be indexed after update" |
| 101 | + |
| 102 | + results = Card.mentioning("Updated", user: @user) |
| 103 | + assert_not_includes results, card |
| 104 | + end |
| 105 | + |
| 106 | + test "publishing a draft card indexes it" do |
| 107 | + search_record_class = Search::Record.for(@user.account_id) |
| 108 | + |
| 109 | + card = @board.cards.create!(title: "Draft to publish", creator: @user, status: "drafted") |
| 110 | + assert_nil search_record_class.find_by(searchable_type: "Card", searchable_id: card.id) |
| 111 | + |
| 112 | + card.publish |
| 113 | + search_record = search_record_class.find_by(searchable_type: "Card", searchable_id: card.id) |
| 114 | + assert_not_nil search_record, "Published card should be indexed" |
| 115 | + assert_equal card.id, search_record.card_id |
| 116 | + |
| 117 | + results = Card.mentioning("publish", user: @user) |
| 118 | + assert_includes results, card |
| 119 | + end |
| 120 | + |
| 121 | + test "unpublishing a draft card removes it from the search index" do |
| 122 | + search_record_class = Search::Record.for(@user.account_id) |
| 123 | + |
| 124 | + card = @board.cards.create!(title: "Draft to publish", creator: @user, status: "published") |
| 125 | + assert_not_nil search_record_class.find_by(searchable_type: "Card", searchable_id: card.id) |
| 126 | + |
| 127 | + card.update!(status: "drafted") |
| 128 | + |
| 129 | + assert_nil search_record_class.find_by(searchable_type: "Card", searchable_id: card.id) |
| 130 | + results = Card.mentioning("publish", user: @user) |
| 131 | + assert_not_includes results, card |
| 132 | + end |
81 | 133 | end |
0 commit comments