1
0
Fork 0
forked from fedi/mastodon

Fix irreversible and whole_word parameters handling in /api/v1/filters (#21988)

Fixes #21965
This commit is contained in:
Claire 2022-12-07 00:10:53 +01:00 committed by GitHub
parent f80c3d40e8
commit 69137f4a90
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 7 deletions

View file

@ -13,7 +13,7 @@ class Api::V1::FiltersController < Api::BaseController
def create def create
ApplicationRecord.transaction do 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) @filter = filter_category.keywords.create!(keyword_params)
end end
@ -52,11 +52,11 @@ class Api::V1::FiltersController < Api::BaseController
end end
def resource_params def resource_params
params.permit(:phrase, :expires_in, :irreversible, context: []) params.permit(:phrase, :expires_in, :irreversible, :whole_word, context: [])
end end
def filter_params def filter_params
resource_params.slice(:expires_in, :irreversible, :context) resource_params.slice(:phrase, :expires_in, :irreversible, :context)
end end
def keyword_params def keyword_params

View file

@ -54,7 +54,7 @@ class CustomFilter < ApplicationRecord
end end
def irreversible=(value) def irreversible=(value)
self.action = value ? :hide : :warn self.action = ActiveModel::Type::Boolean.new.cast(value) ? :hide : :warn
end end
def irreversible? def irreversible?

View file

@ -22,9 +22,11 @@ RSpec.describe Api::V1::FiltersController, type: :controller do
describe 'POST #create' do describe 'POST #create' do
let(:scopes) { 'write:filters' } let(:scopes) { 'write:filters' }
let(:irreversible) { true }
let(:whole_word) { false }
before do 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 end
it 'returns http success' do it 'returns http success' do
@ -34,11 +36,29 @@ RSpec.describe Api::V1::FiltersController, type: :controller do
it 'creates a filter' do it 'creates a filter' do
filter = user.account.custom_filters.first filter = user.account.custom_filters.first
expect(filter).to_not be_nil 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.context).to eq %w(home)
expect(filter.irreversible?).to be true expect(filter.irreversible?).to be irreversible
expect(filter.expires_at).to be_nil expect(filter.expires_at).to be_nil
end 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 end
describe 'GET #show' do describe 'GET #show' do