* Enable updating additional account information from user preferences via rest api
Resolves #6553
* Pacify rubocop
* Decoerce incoming settings in UserSettingsDecorator
* Create user preferences hash directly from incoming credentials instead of going through ActionController::Parameters
* Clean up user preferences update
* Use ActiveModel::Type::Boolean instead of manually checking stringified number equivalence
def update
@account = current_account
UpdateAccountService.new.call(@account, account_params, raise_error: true)
+ UserSettingsDecorator.new(current_user).update(user_settings_params) if user_settings_params
ActivityPub::UpdateDistributionWorker.perform_async(@account.id)
render json: @account, serializer: REST::CredentialAccountSerializer
end
def account_params
params.permit(:display_name, :note, :avatar, :header, :locked)
end
+
+ def user_settings_params
+ return nil unless params.key?(:source)
+
+ source_params = params.require(:source)
+
+ {
+ 'setting_default_privacy' => source_params.fetch(:privacy, @account.user.setting_default_privacy),
+ 'setting_default_sensitive' => source_params.fetch(:sensitive, @account.user.setting_default_sensitive),
+ }
+ end
end
end
def boolean_cast_setting(key)
- settings[key] == '1'
+ ActiveModel::Type::Boolean.new.cast(settings[key])
end
def coerced_settings(key)
end
def coerce_values(params_hash)
- params_hash.transform_values { |x| x == '1' }
+ params_hash.transform_values { |x| ActiveModel::Type::Boolean.new.cast(x) }
end
def change?(key)
note: "Hi!\n\nToot toot!",
avatar: fixture_file_upload('files/avatar.gif', 'image/gif'),
header: fixture_file_upload('files/attachment.jpg', 'image/jpeg'),
+ source: {
+ privacy: 'unlisted',
+ sensitive: true,
+ }
}
end
expect(user.account.note).to eq("Hi!\n\nToot toot!")
expect(user.account.avatar).to exist
expect(user.account.header).to exist
+ expect(user.setting_default_privacy).to eq('unlisted')
+ expect(user.setting_default_sensitive).to eq(true)
end
it 'queues up an account update distribution' do
settings.update(values)
expect(user.settings['system_font_ui']).to eq false
end
+
+ it 'decoerces setting values before applying' do
+ values = {
+ 'setting_delete_modal' => 'false',
+ 'setting_boost_modal' => 'true',
+ }
+
+ settings.update(values)
+ expect(user.settings['delete_modal']).to eq false
+ expect(user.settings['boost_modal']).to eq true
+ end
end
end