Files
fizzy/test/models/notifier/event_notifier_test.rb
T
Mike Dalessio 71103400d6 Make sure the schema and schema cache are consistent with reality
There has been a bit of drift between actual schemas in production and
what's implied by the migrations.

And fixed some tests that were relying on everyone always watching.

ref: https://fizzy.37signals.com/5986089/cards/2322
2025-10-14 17:38:08 -04:00

95 lines
3.1 KiB
Ruby

require "test_helper"
class Notifier::EventNotifierTest < ActiveSupport::TestCase
test "for returns the matching notifier class for the event" do
assert_kind_of Notifier::CardEventNotifier, Notifier.for(events(:logo_published))
end
test "generate does not create notifications if the event was system-generated" do
cards(:logo).drafted!
events(:logo_published).update!(creator: User.system)
assert_no_difference -> { Notification.count } do
Notifier.for(events(:logo_published)).notify
end
end
test "creates a notification for each watcher, other than the event creator (events)" do
notifications = Notifier.for(events(:layout_commented)).notify
assert_equal [ users(:kevin) ], notifications.map(&:user)
end
test "creates a notification for each watcher (mentions)" do
notifications = Notifier.for(events(:layout_commented)).notify
assert_equal [ users(:kevin) ], notifications.map(&:user)
end
test "does not create a notification for access-only users" do
collections(:writebook).access_for(users(:kevin)).access_only!
notifications = Notifier.for(events(:layout_commented)).notify
assert_equal [ users(:kevin) ], notifications.map(&:user)
end
test "links to the card" do
collections(:writebook).access_for(users(:kevin)).watching!
Notifier.for(events(:logo_published)).notify
assert_equal cards(:logo), Notification.last.source.eventable
end
test "assignment events only create a notification for the assignee" do
collections(:writebook).access_for(users(:jz)).watching!
collections(:writebook).access_for(users(:kevin)).watching!
notifications = Notifier.for(events(:logo_assignment_jz)).notify
assert_equal [ users(:jz) ], notifications.map(&:user)
end
test "assignment events do not notify users who are access-only for the collection" do
collections(:writebook).access_for(users(:jz)).watching!
events(:logo_assignment_jz).update! creator: users(:jz)
notifications = Notifier.for(events(:logo_assignment_jz)).notify
assert_empty notifications
end
test "assignment events do not notify you if you assigned yourself" do
collections(:writebook).access_for(users(:david)).watching!
notifications = Notifier.for(events(:logo_assignment_david)).notify
assert_empty notifications
end
test "don't create notifications on publish for mentionees" do
users(:kevin).mentioned_by(users(:david), at: cards(:logo))
assert_no_difference -> { users(:kevin).notifications.count } do
Notifier.for(events(:logo_published)).notify
end
end
test "don't create notifications on comment for mentionees" do
users(:david).mentioned_by(users(:kevin), at: cards(:layout))
assert_no_difference -> { users(:david).notifications.count } do
Notifier.for(events(:layout_commented)).notify
end
end
test "assignment events notify assignees regardless of involvement level" do
collections(:writebook).access_for(users(:jz)).access_only!
notifications = Notifier.for(events(:logo_assignment_jz)).notify
assert_equal [ users(:jz) ], notifications.map(&:user)
end
end