domain_blocks_controller_spec.rb 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. # frozen_string_literal: true
  2. require 'rails_helper'
  3. RSpec.describe Admin::DomainBlocksController, type: :controller do
  4. render_views
  5. before do
  6. sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')), scope: :user
  7. end
  8. describe 'GET #new' do
  9. it 'assigns a new domain block' do
  10. get :new
  11. expect(assigns(:domain_block)).to be_instance_of(DomainBlock)
  12. expect(response).to have_http_status(200)
  13. end
  14. end
  15. describe 'POST #batch' do
  16. it 'blocks the domains when succeeded to save' do
  17. allow(DomainBlockWorker).to receive(:perform_async).and_return(true)
  18. post :batch, params: {
  19. save: '',
  20. form_domain_block_batch: {
  21. domain_blocks_attributes: {
  22. '0' => { enabled: '1', domain: 'example.com', severity: 'silence' },
  23. '1' => { enabled: '0', domain: 'mastodon.social', severity: 'suspend' },
  24. '2' => { enabled: '1', domain: 'mastodon.online', severity: 'suspend' },
  25. },
  26. },
  27. }
  28. expect(DomainBlockWorker).to have_received(:perform_async).exactly(2).times
  29. expect(flash[:notice]).to eq I18n.t('admin.domain_blocks.created_msg')
  30. expect(response).to redirect_to(admin_instances_path(limited: '1'))
  31. end
  32. end
  33. describe 'POST #create' do
  34. it 'blocks the domain when succeeded to save' do
  35. allow(DomainBlockWorker).to receive(:perform_async).and_return(true)
  36. post :create, params: { domain_block: { domain: 'example.com', severity: 'silence' } }
  37. expect(DomainBlockWorker).to have_received(:perform_async)
  38. expect(flash[:notice]).to eq I18n.t('admin.domain_blocks.created_msg')
  39. expect(response).to redirect_to(admin_instances_path(limited: '1'))
  40. end
  41. it 'renders new when failed to save' do
  42. Fabricate(:domain_block, domain: 'example.com', severity: 'suspend')
  43. allow(DomainBlockWorker).to receive(:perform_async).and_return(true)
  44. post :create, params: { domain_block: { domain: 'example.com', severity: 'silence' } }
  45. expect(DomainBlockWorker).to_not have_received(:perform_async)
  46. expect(response).to render_template :new
  47. end
  48. it 'allows upgrading a block' do
  49. Fabricate(:domain_block, domain: 'example.com', severity: 'silence')
  50. allow(DomainBlockWorker).to receive(:perform_async).and_return(true)
  51. post :create, params: { domain_block: { domain: 'example.com', severity: 'silence', reject_media: true, reject_reports: true } }
  52. expect(DomainBlockWorker).to have_received(:perform_async)
  53. expect(flash[:notice]).to eq I18n.t('admin.domain_blocks.created_msg')
  54. expect(response).to redirect_to(admin_instances_path(limited: '1'))
  55. end
  56. end
  57. describe 'PUT #update' do
  58. let!(:remote_account) { Fabricate(:account, domain: 'example.com') }
  59. let(:subject) do
  60. post :update, params: { id: domain_block.id, domain_block: { domain: 'example.com', severity: new_severity } }
  61. end
  62. let(:domain_block) { Fabricate(:domain_block, domain: 'example.com', severity: original_severity) }
  63. before do
  64. BlockDomainService.new.call(domain_block)
  65. end
  66. context 'downgrading a domain suspension to silence' do
  67. let(:original_severity) { 'suspend' }
  68. let(:new_severity) { 'silence' }
  69. it 'changes the block severity' do
  70. expect { subject }.to change { domain_block.reload.severity }.from('suspend').to('silence')
  71. end
  72. it 'undoes individual suspensions' do
  73. expect { subject }.to change { remote_account.reload.suspended? }.from(true).to(false)
  74. end
  75. it 'performs individual silences' do
  76. expect { subject }.to change { remote_account.reload.silenced? }.from(false).to(true)
  77. end
  78. end
  79. context 'upgrading a domain silence to suspend' do
  80. let(:original_severity) { 'silence' }
  81. let(:new_severity) { 'suspend' }
  82. it 'changes the block severity' do
  83. expect { subject }.to change { domain_block.reload.severity }.from('silence').to('suspend')
  84. end
  85. it 'undoes individual silences' do
  86. expect { subject }.to change { remote_account.reload.silenced? }.from(true).to(false)
  87. end
  88. it 'performs individual suspends' do
  89. expect { subject }.to change { remote_account.reload.suspended? }.from(false).to(true)
  90. end
  91. end
  92. end
  93. describe 'DELETE #destroy' do
  94. it 'unblocks the domain' do
  95. service = double(call: true)
  96. allow(UnblockDomainService).to receive(:new).and_return(service)
  97. domain_block = Fabricate(:domain_block)
  98. delete :destroy, params: { id: domain_block.id }
  99. expect(service).to have_received(:call).with(domain_block)
  100. expect(flash[:notice]).to eq I18n.t('admin.domain_blocks.destroyed_msg')
  101. expect(response).to redirect_to(admin_instances_path(limited: '1'))
  102. end
  103. end
  104. end