From f025cc67827a5b1b1faf10dec9d5a1e14e67fa5f Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 1 May 2017 11:42:13 -0400 Subject: Filter on allowed user language preferences (#2361) * Naive approached to timeline filtering * Convert allowed_languages into a db column * Allow users to choose languages to see statuses in * Style list items as two columns * Add a hint to explain language filtering preference --- .../settings/preferences_controller_spec.rb | 8 ++++--- spec/models/status_spec.rb | 25 ++++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) (limited to 'spec') diff --git a/spec/controllers/settings/preferences_controller_spec.rb b/spec/controllers/settings/preferences_controller_spec.rb index 92b626d2d..432e35cd4 100644 --- a/spec/controllers/settings/preferences_controller_spec.rb +++ b/spec/controllers/settings/preferences_controller_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' describe Settings::PreferencesController do render_views - let(:user) { Fabricate(:user) } + let(:user) { Fabricate(:user, allowed_languages: []) } before do sign_in user, scope: :user @@ -18,10 +18,12 @@ describe Settings::PreferencesController do describe 'PUT #update' do it 'updates the user record' do - put :update, params: { user: { locale: 'en' } } + put :update, params: { user: { locale: 'en', allowed_languages: ['es', 'fr'] } } expect(response).to redirect_to(settings_preferences_path) - expect(user.reload.locale).to eq 'en' + user.reload + expect(user.locale).to eq 'en' + expect(user.allowed_languages).to eq ['es', 'fr'] end it 'updates user settings' do diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index c553b052e..0c0b16829 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -251,6 +251,31 @@ RSpec.describe Status, type: :model do expect(results).not_to include(muted_status) end + context 'with language preferences' do + it 'excludes statuses in languages not allowed by the account user' do + user = Fabricate(:user, allowed_languages: [:en, :es]) + @account.update(user: user) + en_status = Fabricate(:status, language: 'en') + es_status = Fabricate(:status, language: 'es') + fr_status = Fabricate(:status, language: 'fr') + + results = Status.as_public_timeline(@account) + expect(results).to include(en_status) + expect(results).to include(es_status) + expect(results).not_to include(fr_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') + 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 + end + context 'where that account is silenced' do it 'includes statuses from other accounts that are silenced' do @account.update(silenced: true) -- cgit