Merge pull request #319 from glitch-soc/317-attempt-to-switch-flavors-raises-actioncontroller-parametermissing

Fix #317: Attempting to switch flavors raises ActionController::ParameterMissing
This commit is contained in:
David Yip 2018-01-10 12:49:43 -06:00 committed by GitHub
commit 26f054253c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 8 deletions

View File

@ -1,13 +1,12 @@
# frozen_string_literal: true
class Settings::FlavoursController < Settings::BaseController
def index
redirect_to action: 'show', flavour: current_flavour
end
def show
unless Themes.instance.flavours.include?(params[:flavour]) or params[:flavour] == current_flavour
unless Themes.instance.flavours.include?(params[:flavour]) || (params[:flavour] == current_flavour)
redirect_to action: 'show', flavour: current_flavour
end
@ -16,7 +15,7 @@ class Settings::FlavoursController < Settings::BaseController
end
def update
user_settings.update(user_settings_params(params[:flavour]).to_h)
user_settings.update(user_settings_params)
redirect_to action: 'show', flavour: params[:flavour]
end
@ -26,10 +25,8 @@ class Settings::FlavoursController < Settings::BaseController
UserSettingsDecorator.new(current_user)
end
def user_settings_params(flavour)
params.require(:user).merge({ setting_flavour: flavour }).permit(
:setting_flavour,
:setting_skin
)
def user_settings_params
{ setting_flavour: params.require(:flavour),
setting_skin: params.dig(:user, :setting_skin) }.with_indifferent_access
end
end

View File

@ -0,0 +1,38 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Settings::FlavoursController, type: :controller do
let(:user) { Fabricate(:user) }
before do
sign_in user, scope: :user
end
describe 'PUT #update' do
describe 'without a user[setting_skin] parameter' do
it 'sets the selected flavour' do
put :update, params: { flavour: 'schnozzberry' }
user.reload
expect(user.setting_flavour).to eq 'schnozzberry'
end
end
describe 'with a user[setting_skin] parameter' do
before do
put :update, params: { flavour: 'schnozzberry', user: { setting_skin: 'wallpaper' } }
user.reload
end
it 'sets the selected flavour' do
expect(user.setting_flavour).to eq 'schnozzberry'
end
it 'sets the selected skin' do
expect(user.setting_skin).to eq 'wallpaper'
end
end
end
end