notify_service_spec.rb 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. require 'rails_helper'
  2. RSpec.describe NotifyService do
  3. subject do
  4. -> { described_class.new.call(recipient, activity) }
  5. end
  6. let(:user) { Fabricate(:user) }
  7. let(:recipient) { user.account }
  8. let(:sender) { Fabricate(:account, domain: 'example.com') }
  9. let(:activity) { Fabricate(:follow, account: sender, target_account: recipient) }
  10. it { is_expected.to change(Notification, :count).by(1) }
  11. it 'does not notify when sender is blocked' do
  12. recipient.block!(sender)
  13. is_expected.to_not change(Notification, :count)
  14. end
  15. it 'does not notify when sender\'s domain is blocked' do
  16. recipient.block_domain!(sender.domain)
  17. is_expected.to_not change(Notification, :count)
  18. end
  19. it 'does still notify when sender\'s domain is blocked but sender is followed' do
  20. recipient.block_domain!(sender.domain)
  21. recipient.follow!(sender)
  22. is_expected.to change(Notification, :count)
  23. end
  24. it 'does not notify when sender is silenced and not followed' do
  25. sender.update(silenced: true)
  26. is_expected.to_not change(Notification, :count)
  27. end
  28. it 'does not notify when recipient is suspended' do
  29. recipient.update(suspended: true)
  30. is_expected.to_not change(Notification, :count)
  31. end
  32. context do
  33. let(:asshole) { Fabricate(:account, username: 'asshole') }
  34. let(:reply_to) { Fabricate(:status, account: asshole) }
  35. let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, thread: reply_to)) }
  36. it 'does not notify when conversation is muted' do
  37. recipient.mute_conversation!(activity.status.conversation)
  38. is_expected.to_not change(Notification, :count)
  39. end
  40. it 'does not notify when it is a reply to a blocked user' do
  41. recipient.block!(asshole)
  42. is_expected.to_not change(Notification, :count)
  43. end
  44. end
  45. context do
  46. let(:sender) { recipient }
  47. it 'does not notify when recipient is the sender' do
  48. is_expected.to_not change(Notification, :count)
  49. end
  50. end
  51. describe 'email' do
  52. before do
  53. ActionMailer::Base.deliveries.clear
  54. notification_emails = user.settings.notification_emails
  55. user.settings.notification_emails = notification_emails.merge('follow' => enabled)
  56. end
  57. context 'when email notification is enabled' do
  58. let(:enabled) { true }
  59. it 'sends email' do
  60. is_expected.to change(ActionMailer::Base.deliveries, :count).by(1)
  61. end
  62. end
  63. context 'when email notification is disabled' do
  64. let(:enabled) { false }
  65. it "doesn't send email" do
  66. is_expected.to_not change(ActionMailer::Base.deliveries, :count).from(0)
  67. end
  68. end
  69. end
  70. end