From 9d08d127724f77663430a03f2ea53a3668721f8a Mon Sep 17 00:00:00 2001
From: Eugen Rochko <eugen@zeonfederated.com>
Date: Wed, 26 Oct 2022 22:21:39 +0200
Subject: [PATCH] Change `POST /api/v1/admin/domain_blocks` to be consistent
 with other APIs

---
 app/controllers/admin/domain_blocks_controller.rb     |  8 ++------
 .../api/v1/admin/domain_blocks_controller.rb          | 11 ++++-------
 .../api/v1/admin/domain_blocks_controller_spec.rb     |  7 +------
 3 files changed, 7 insertions(+), 19 deletions(-)

diff --git a/app/controllers/admin/domain_blocks_controller.rb b/app/controllers/admin/domain_blocks_controller.rb
index 16defc1ea87..8550bb01557 100644
--- a/app/controllers/admin/domain_blocks_controller.rb
+++ b/app/controllers/admin/domain_blocks_controller.rb
@@ -43,12 +43,8 @@ module Admin
     def update
       authorize :domain_block, :update?
 
-      @domain_block.update(update_params)
-
-      severity_changed = @domain_block.severity_changed?
-
-      if @domain_block.save
-        DomainBlockWorker.perform_async(@domain_block.id, severity_changed)
+      if @domain_block.update(update_params)
+        DomainBlockWorker.perform_async(@domain_block.id, @domain_block.severity_previously_changed?)
         log_action :update, @domain_block
         redirect_to admin_instances_path(limited: '1'), notice: I18n.t('admin.domain_blocks.created_msg')
       else
diff --git a/app/controllers/api/v1/admin/domain_blocks_controller.rb b/app/controllers/api/v1/admin/domain_blocks_controller.rb
index de8fd9d089e..f8de482e4f9 100644
--- a/app/controllers/api/v1/admin/domain_blocks_controller.rb
+++ b/app/controllers/api/v1/admin/domain_blocks_controller.rb
@@ -19,12 +19,10 @@ class Api::V1::Admin::DomainBlocksController < Api::BaseController
   def create
     authorize :domain_block, :create?
 
-    existing_domain_block = resource_params[:domain].present? ? DomainBlock.rule_for(resource_params[:domain]) : nil
-    return render json: existing_domain_block, serializer: REST::Admin::ExistingDomainBlockErrorSerializer, status: 422 if existing_domain_block.present?
-
     @domain_block = DomainBlock.create!(resource_params)
     DomainBlockWorker.perform_async(@domain_block.id)
     log_action :create, @domain_block
+
     render json: @domain_block, serializer: REST::Admin::DomainBlockSerializer
   end
 
@@ -41,11 +39,10 @@ class Api::V1::Admin::DomainBlocksController < Api::BaseController
   def update
     authorize @domain_block, :update?
 
-    @domain_block.update(domain_block_params)
-    severity_changed = @domain_block.severity_changed?
-    @domain_block.save!
-    DomainBlockWorker.perform_async(@domain_block.id, severity_changed)
+    @domain_block.update!(domain_block_params)
+    DomainBlockWorker.perform_async(@domain_block.id, @domain_block.severity_previously_changed?)
     log_action :update, @domain_block
+
     render json: @domain_block, serializer: REST::Admin::DomainBlockSerializer
   end
 
diff --git a/spec/controllers/api/v1/admin/domain_blocks_controller_spec.rb b/spec/controllers/api/v1/admin/domain_blocks_controller_spec.rb
index f12285b2a62..4fddaa4f1ad 100644
--- a/spec/controllers/api/v1/admin/domain_blocks_controller_spec.rb
+++ b/spec/controllers/api/v1/admin/domain_blocks_controller_spec.rb
@@ -117,16 +117,11 @@ RSpec.describe Api::V1::Admin::DomainBlocksController, type: :controller do
     end
 
     context 'when a stricter domain block already exists' do
-      let(:existing_block_domain) { 'bar.com' }
+      let(:existing_block_domain) { 'foo.bar.com' }
 
       it 'returns http unprocessable entity' do
         expect(response).to have_http_status(422)
       end
-
-      it 'renders existing domain block in error' do
-        json = body_as_json
-        expect(json[:existing_domain_block][:domain]).to eq existing_block_domain
-      end
     end
   end
 end
-- 
GitLab