logo

mastofe

My custom branche(s) on git.pleroma.social/pleroma/mastofe
commit: bba537a7bebe11be4b1e4a7e126a34cd27b73678
parent: 0291b73de7e2fca7f5c137de4427800c02d7a233
Author: Matt Jankowski <mjankowski@thoughtbot.com>
Date:   Sun,  7 May 2017 21:32:52 -0400

Improve allowed language handling (#2897)

* Dont allow empty value in user allowed languages

* Sanitize language input to reject blank values in array

Diffstat:

Mapp/models/user.rb8++++++++
Mspec/controllers/settings/preferences_controller_spec.rb2+-
Mspec/models/status_spec.rb12++++++++++++
Mspec/models/user_spec.rb6++++++
4 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/app/models/user.rb b/app/models/user.rb @@ -52,6 +52,8 @@ class User < ApplicationRecord scope :admins, -> { where(admin: true) } scope :confirmed, -> { where.not(confirmed_at: nil) } + before_validation :sanitize_languages + def confirmed? confirmed_at.present? end @@ -77,4 +79,10 @@ class User < ApplicationRecord def setting_auto_play_gif settings.auto_play_gif end + + private + + def sanitize_languages + allowed_languages.reject!(&:blank?) + end end diff --git a/spec/controllers/settings/preferences_controller_spec.rb b/spec/controllers/settings/preferences_controller_spec.rb @@ -18,7 +18,7 @@ describe Settings::PreferencesController do describe 'PUT #update' do it 'updates the user record' do - put :update, params: { user: { locale: 'en', allowed_languages: ['es', 'fr'] } } + put :update, params: { user: { locale: 'en', allowed_languages: ['es', 'fr', ''] } } expect(response).to redirect_to(settings_preferences_path) user.reload diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb @@ -265,6 +265,18 @@ RSpec.describe Status, type: :model do expect(results).not_to include(fr_status) end + it 'includes all languages when user does not have a setting' do + user = Fabricate(:user, allowed_languages: []) + @account.update(user: user) + + en_status = Fabricate(:status, language: 'en') + es_status = Fabricate(:status, language: 'es') + + results = Status.as_public_timeline(@account) + expect(results).to include(en_status) + expect(results).to include(es_status) + end + it 'includes all languages when account does not have a user' do expect(@account.user).to be_nil en_status = Fabricate(:status, language: 'en') diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb @@ -22,6 +22,12 @@ RSpec.describe User, type: :model do user.valid? expect(user).to model_have_error_on_field(:email) end + + it 'cleans out empty string from languages' do + user = Fabricate.build(:user, allowed_languages: ['']) + user.valid? + expect(user.allowed_languages).to eq [] + end end describe 'settings' do