Files
fizzy/test/models/concerns/mentions_test.rb
T
Mike Dalessio 9aa15e9fb2 Forbid comments on draft cards
- Add Card#commentable? method that returns true only for published cards.
- CardsController#create ensures that the card is commentable.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 11:28:26 -05:00

97 lines
3.4 KiB
Ruby

require "test_helper"
class MentionsTest < ActiveSupport::TestCase
setup do
Current.session = sessions(:david)
end
test "don't create mentions when creating or updating drafts" do
assert_no_difference -> { Mention.count } do
perform_enqueued_jobs only: Mention::CreateJob do
card = boards(:writebook).cards.create title: "Cleanup", description: "Did you finish up with the cleanup, #{mention_html_for(users(:david))}?"
card.update description: "Any thoughts here #{mention_html_for(users(:jz))}"
end
end
end
test "create mentions from plain text mentions when publishing cards" do
perform_enqueued_jobs only: Mention::CreateJob do
card = assert_no_difference -> { Mention.count } do
boards(:writebook).cards.create title: "Cleanup", description: "Did you finish up with the cleanup, #{mention_html_for(users(:david))}?"
end
card = Card.find(card.id)
assert_difference -> { Mention.count }, +1 do
card.publish
end
end
end
test "create mentions from rich text mentions when publishing cards" do
perform_enqueued_jobs only: Mention::CreateJob do
card = assert_no_difference -> { Mention.count } do
boards(:writebook).cards.create title: "Cleanup", description: "Did you finish up with the cleanup, #{mention_html_for(users(:david))}?"
end
card = Card.find(card.id)
assert_difference -> { Mention.count }, +1 do
card.published!
end
end
end
test "don't create repeated mentions when updating cards" do
perform_enqueued_jobs only: Mention::CreateJob do
card = boards(:writebook).cards.create title: "Cleanup", description: "Did you finish up with the cleanup, #{mention_html_for(users(:david))}?"
assert_difference -> { Mention.count }, +1 do
card.published!
end
assert_no_difference -> { Mention.count } do
card.update description: "Any thoughts here #{mention_html_for(users(:david))}"
end
assert_difference -> { Mention.count }, +1 do
card.update description: "Any thoughts here #{mention_html_for(users(:jz))}"
end
end
end
test "create mentions from plain text mentions when posting comments" do
perform_enqueued_jobs only: Mention::CreateJob do
card = boards(:writebook).cards.create title: "Cleanup", description: "Some initial content", status: :published
assert_difference -> { Mention.count }, +1 do
card.comments.create!(body: "Great work on this #{mention_html_for(users(:david))}!")
end
end
end
test "can't mention users that don't have access to the board" do
boards(:writebook).update! all_access: false
boards(:writebook).accesses.revoke_from(users(:david))
assert_no_difference -> { Mention.count }, +1 do
perform_enqueued_jobs only: Mention::CreateJob do
boards(:writebook).cards.create title: "Cleanup", description: "Did you finish up with the cleanup, #{mention_html_for(users(:david))}?"
end
end
end
test "mentionees are added as watchers of the card" do
perform_enqueued_jobs only: Mention::CreateJob do
card = boards(:writebook).cards.create title: "Cleanup", description: "Did you finish up with the cleanup #{mention_html_for(users(:kevin))}?"
card.published!
assert card.watchers.include?(users(:kevin))
end
end
private
def mention_html_for(user)
ActionText::Attachment.from_attachable(user).to_html
end
end