From 69137f4a90874442cc5fefdf86dad7c4a4884bdc Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 7 Dec 2022 00:10:53 +0100 Subject: [PATCH] Fix irreversible and whole_word parameters handling in /api/v1/filters (#21988) Fixes #21965 --- app/controllers/api/v1/filters_controller.rb | 6 ++--- app/models/custom_filter.rb | 2 +- .../api/v1/filters_controller_spec.rb | 26 ++++++++++++++++--- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/app/controllers/api/v1/filters_controller.rb b/app/controllers/api/v1/filters_controller.rb index 149139b40..772791b25 100644 --- a/app/controllers/api/v1/filters_controller.rb +++ b/app/controllers/api/v1/filters_controller.rb @@ -13,7 +13,7 @@ class Api::V1::FiltersController < Api::BaseController def create ApplicationRecord.transaction do - filter_category = current_account.custom_filters.create!(resource_params) + filter_category = current_account.custom_filters.create!(filter_params) @filter = filter_category.keywords.create!(keyword_params) end @@ -52,11 +52,11 @@ class Api::V1::FiltersController < Api::BaseController end def resource_params - params.permit(:phrase, :expires_in, :irreversible, context: []) + params.permit(:phrase, :expires_in, :irreversible, :whole_word, context: []) end def filter_params - resource_params.slice(:expires_in, :irreversible, :context) + resource_params.slice(:phrase, :expires_in, :irreversible, :context) end def keyword_params diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb index da2a91493..5a4a974be 100644 --- a/app/models/custom_filter.rb +++ b/app/models/custom_filter.rb @@ -54,7 +54,7 @@ class CustomFilter < ApplicationRecord end def irreversible=(value) - self.action = value ? :hide : :warn + self.action = ActiveModel::Type::Boolean.new.cast(value) ? :hide : :warn end def irreversible? diff --git a/spec/controllers/api/v1/filters_controller_spec.rb b/spec/controllers/api/v1/filters_controller_spec.rb index af1951f0b..8acb46a00 100644 --- a/spec/controllers/api/v1/filters_controller_spec.rb +++ b/spec/controllers/api/v1/filters_controller_spec.rb @@ -22,9 +22,11 @@ RSpec.describe Api::V1::FiltersController, type: :controller do describe 'POST #create' do let(:scopes) { 'write:filters' } + let(:irreversible) { true } + let(:whole_word) { false } before do - post :create, params: { phrase: 'magic', context: %w(home), irreversible: true } + post :create, params: { phrase: 'magic', context: %w(home), irreversible: irreversible, whole_word: whole_word } end it 'returns http success' do @@ -34,11 +36,29 @@ RSpec.describe Api::V1::FiltersController, type: :controller do it 'creates a filter' do filter = user.account.custom_filters.first expect(filter).to_not be_nil - expect(filter.keywords.pluck(:keyword)).to eq ['magic'] + expect(filter.keywords.pluck(:keyword, :whole_word)).to eq [['magic', whole_word]] expect(filter.context).to eq %w(home) - expect(filter.irreversible?).to be true + expect(filter.irreversible?).to be irreversible expect(filter.expires_at).to be_nil end + + context 'with different parameters' do + let(:irreversible) { false } + let(:whole_word) { true } + + it 'returns http success' do + expect(response).to have_http_status(200) + end + + it 'creates a filter' do + filter = user.account.custom_filters.first + expect(filter).to_not be_nil + expect(filter.keywords.pluck(:keyword, :whole_word)).to eq [['magic', whole_word]] + expect(filter.context).to eq %w(home) + expect(filter.irreversible?).to be irreversible + expect(filter.expires_at).to be_nil + end + end end describe 'GET #show' do