Fix blocking subdomains of an already-blocked domain (#26392)
This commit is contained in:
		@@ -40,7 +40,7 @@ module Admin
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      # Allow transparently upgrading a domain block
 | 
			
		||||
      if existing_domain_block.present?
 | 
			
		||||
      if existing_domain_block.present? && existing_domain_block.domain == TagManager.instance.normalize_domain(@domain_block.domain.strip)
 | 
			
		||||
        @domain_block = existing_domain_block
 | 
			
		||||
        @domain_block.assign_attributes(resource_params)
 | 
			
		||||
      end
 | 
			
		||||
 
 | 
			
		||||
@@ -57,6 +57,30 @@ describe 'blocking domains through the moderation interface' do
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  context 'when suspending a subdomain of an already-silenced domain' do
 | 
			
		||||
    it 'presents a confirmation screen before suspending the domain' do
 | 
			
		||||
      domain_block = Fabricate(:domain_block, domain: 'example.com', severity: 'silence')
 | 
			
		||||
 | 
			
		||||
      visit new_admin_domain_block_path
 | 
			
		||||
 | 
			
		||||
      fill_in 'domain_block_domain', with: 'subdomain.example.com'
 | 
			
		||||
      select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
 | 
			
		||||
      click_on I18n.t('admin.domain_blocks.new.create')
 | 
			
		||||
 | 
			
		||||
      # It presents a confirmation screen
 | 
			
		||||
      expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'subdomain.example.com'))
 | 
			
		||||
 | 
			
		||||
      # Confirming creates the block
 | 
			
		||||
      click_on I18n.t('admin.domain_blocks.confirm_suspension.confirm')
 | 
			
		||||
 | 
			
		||||
      expect(DomainBlock.where(domain: 'subdomain.example.com', severity: 'suspend')).to exist
 | 
			
		||||
 | 
			
		||||
      # And leaves the previous block alone
 | 
			
		||||
      expect(domain_block.reload.severity).to eq 'silence'
 | 
			
		||||
      expect(domain_block.reload.domain).to eq 'example.com'
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  context 'when editing a domain block' do
 | 
			
		||||
    it 'presents a confirmation screen before suspending the domain' do
 | 
			
		||||
      domain_block = Fabricate(:domain_block, domain: 'example.com', severity: 'silence')
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user