catstodon/spec/services/notify_service_spec.rb
Eugen Rochko f1ab70649b Add buttons to block and unblock domain (#3127)
* Add buttons to block and unblock domain

* Relationship API now returns "domain_blocking" status for accounts,
rename "block entire domain" to "hide entire domain", fix unblocking domain,
do not block notifications from domain-blocked-but-followed people, do
not send Salmons to domain blocked users

* Add test

* Personal domain blocks shouldn't affect Salmon after all, since in this
direction of communication the control is very thin when it comes to
public stuff. Best stay consistent and not affect federation in this way

* Ignore followers and follow request from domain blocked folks,
ensure account domain blocks are not created for empty domain,
and avoid duplicates in validation

* Purge followers when blocking domain (without soft-blocks, since they
are useless here)

* Add tests, fix local timeline being empty when having any domain blocks
2017-05-19 21:05:32 +02:00

89 lines
2.6 KiB
Ruby

require 'rails_helper'
RSpec.describe NotifyService do
subject do
-> { described_class.new.call(recipient, activity) }
end
let(:user) { Fabricate(:user) }
let(:recipient) { user.account }
let(:sender) { Fabricate(:account, domain: 'example.com') }
let(:activity) { Fabricate(:follow, account: sender, target_account: recipient) }
it { is_expected.to change(Notification, :count).by(1) }
it 'does not notify when sender is blocked' do
recipient.block!(sender)
is_expected.to_not change(Notification, :count)
end
it 'does not notify when sender\'s domain is blocked' do
recipient.block_domain!(sender.domain)
is_expected.to_not change(Notification, :count)
end
it 'does still notify when sender\'s domain is blocked but sender is followed' do
recipient.block_domain!(sender.domain)
recipient.follow!(sender)
is_expected.to change(Notification, :count)
end
it 'does not notify when sender is silenced and not followed' do
sender.update(silenced: true)
is_expected.to_not change(Notification, :count)
end
it 'does not notify when recipient is suspended' do
recipient.update(suspended: true)
is_expected.to_not change(Notification, :count)
end
context do
let(:asshole) { Fabricate(:account, username: 'asshole') }
let(:reply_to) { Fabricate(:status, account: asshole) }
let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, thread: reply_to)) }
it 'does not notify when conversation is muted' do
recipient.mute_conversation!(activity.status.conversation)
is_expected.to_not change(Notification, :count)
end
it 'does not notify when it is a reply to a blocked user' do
recipient.block!(asshole)
is_expected.to_not change(Notification, :count)
end
end
context do
let(:sender) { recipient }
it 'does not notify when recipient is the sender' do
is_expected.to_not change(Notification, :count)
end
end
describe 'email' do
before do
ActionMailer::Base.deliveries.clear
notification_emails = user.settings.notification_emails
user.settings.notification_emails = notification_emails.merge('follow' => enabled)
end
context 'when email notification is enabled' do
let(:enabled) { true }
it 'sends email' do
is_expected.to change(ActionMailer::Base.deliveries, :count).by(1)
end
end
context 'when email notification is disabled' do
let(:enabled) { false }
it "doesn't send email" do
is_expected.to_not change(ActionMailer::Base.deliveries, :count).from(0)
end
end
end
end