belongs_to :reference_account, class_name: 'Account'
- validates :canonical_email_hash, presence: true
+ validates :canonical_email_hash, presence: true, uniqueness: true
def email=(email)
self.canonical_email_hash = email_to_canonical_email_hash(email)
let(:bob) { Fabricate(:account, username: 'bob') }
subject { Fabricate(:account) }
+ describe '#suspend!' do
+ it 'marks the account as suspended' do
+ subject.suspend!
+ expect(subject.suspended?).to be true
+ end
+
+ it 'creates a deletion request' do
+ subject.suspend!
+ expect(AccountDeletionRequest.where(account: subject).exists?).to be true
+ end
+
+ context 'when the account is of a local user' do
+ let!(:subject) { Fabricate(:account, user: Fabricate(:user, email: 'foo+bar@domain.org')) }
+
+ it 'creates a canonical domain block' do
+ subject.suspend!
+ expect(CanonicalEmailBlock.block?(subject.user_email)).to be true
+ end
+
+ context 'when a canonical domain block already exists for that email' do
+ before do
+ Fabricate(:canonical_email_block, email: subject.user_email)
+ end
+
+ it 'does not raise an error' do
+ expect { subject.suspend! }.not_to raise_error
+ end
+ end
+ end
+ end
+
describe '#follow!' do
it 'creates a follow' do
follow = subject.follow!(bob)