diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index b5d1f2e0796..4fb554769dd 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -21,7 +21,7 @@ class DomainBlock < ApplicationRecord include DomainNormalizable include DomainMaterializable - enum :severity, { silence: 0, suspend: 1, noop: 2 } + enum :severity, { silence: 0, suspend: 1, noop: 2 }, validate: true validates :domain, presence: true, uniqueness: true, domain: true diff --git a/db/migrate/20240220082519_fix_invalid_domain_block_severities.rb b/db/migrate/20240220082519_fix_invalid_domain_block_severities.rb new file mode 100644 index 00000000000..ff0caac2ceb --- /dev/null +++ b/db/migrate/20240220082519_fix_invalid_domain_block_severities.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class FixInvalidDomainBlockSeverities < ActiveRecord::Migration[7.1] + disable_ddl_transaction! + + def up + safety_assured do + execute <<~SQL.squish + UPDATE domain_blocks + SET severity = CASE WHEN severity > 2 THEN 2 WHEN severity < 0 THEN 0 END + WHERE severity > 2 OR severity < 0 RETURNING id; + SQL + end + end + + def down; end +end diff --git a/spec/requests/api/v1/admin/domain_blocks_spec.rb b/spec/requests/api/v1/admin/domain_blocks_spec.rb index 415281a9327..a6f3c17ea3b 100644 --- a/spec/requests/api/v1/admin/domain_blocks_spec.rb +++ b/spec/requests/api/v1/admin/domain_blocks_spec.rb @@ -205,6 +205,17 @@ RSpec.describe 'Domain Blocks' do expect(response).to have_http_status(422) end end + + context 'when severity is invalid' do + let(:params) { { domain: 'bar.com', severity: :bar } } + + it 'returns http unprocessable entity' do + subject + + expect(response).to have_http_status(422) + expect(body_as_json[:error]).to eq('Validation failed: Severity is not included in the list') + end + end end describe 'PUT /api/v1/admin/domain_blocks/:id' do