commit: b8ba719f73ec0a2ec7c11b96a740aad8132a5580
parent: ada8a6cb77af2a142a04319f9064609313f80028
Author: Matt Jankowski <mjankowski@thoughtbot.com>
Date: Sun, 7 May 2017 08:44:28 -0400
Unblock domain service specs/refactor (#2867)
* Add spec for unblock domain service
* Refactor UnblockDomainService
Diffstat:
2 files changed, 65 insertions(+), 9 deletions(-)
diff --git a/app/services/unblock_domain_service.rb b/app/services/unblock_domain_service.rb
@@ -1,17 +1,27 @@
# frozen_string_literal: true
class UnblockDomainService < BaseService
+ attr_accessor :domain_block
+
def call(domain_block, retroactive)
- if retroactive
- accounts = Account.where(domain: domain_block.domain).in_batches
+ @domain_block = domain_block
+ process_retroactive_updates if retroactive
+ domain_block.destroy
+ end
- if domain_block.silence?
- accounts.update_all(silenced: false)
- else
- accounts.update_all(suspended: false)
- end
- end
+ def process_retroactive_updates
+ blocked_accounts.in_batches.update_all(update_options)
+ end
- domain_block.destroy
+ def blocked_accounts
+ Account.where(domain: domain_block.domain)
+ end
+
+ def update_options
+ { domain_block_impact => false }
+ end
+
+ def domain_block_impact
+ domain_block.silence? ? :silenced : :suspended
end
end
diff --git a/spec/services/unblock_domain_service_spec.rb b/spec/services/unblock_domain_service_spec.rb
@@ -0,0 +1,46 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe UnblockDomainService do
+ subject { described_class.new }
+
+ describe 'call' do
+ before do
+ @silenced = Fabricate(:account, domain: 'example.com', silenced: true)
+ @suspended = Fabricate(:account, domain: 'example.com', suspended: true)
+ @domain_block = Fabricate(:domain_block, domain: 'example.com')
+ end
+
+ context 'without retroactive' do
+ it 'removes the domain block' do
+ subject.call(@domain_block, false)
+ expect_deleted_domain_block
+ end
+ end
+
+ context 'with retroactive' do
+ it 'unsilences accounts and removes block' do
+ @domain_block.update(severity: :silence)
+
+ subject.call(@domain_block, true)
+ expect_deleted_domain_block
+ expect(@silenced.reload.silenced).to be false
+ expect(@suspended.reload.suspended).to be true
+ end
+
+ it 'unsuspends accounts and removes block' do
+ @domain_block.update(severity: :suspend)
+
+ subject.call(@domain_block, true)
+ expect_deleted_domain_block
+ expect(@suspended.reload.suspended).to be false
+ expect(@silenced.reload.silenced).to be true
+ end
+ end
+ end
+
+ def expect_deleted_domain_block
+ expect { @domain_block.reload }.to raise_error(ActiveRecord::RecordNotFound)
+ end
+end