Skip to content
Extraits de code Groupes Projets
Valider cd0eaa34 rédigé par Levi Bard's avatar Levi Bard Validation de Eugen Rochko
Parcourir les fichiers

Enable updating additional account information from user preferences via rest api (#6789)

* 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
parent 1364e9e4
Branches
Étiquettes
Aucune requête de fusion associée trouvée
......@@ -13,6 +13,7 @@ class Api::V1::Accounts::CredentialsController < Api::BaseController
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
......@@ -22,4 +23,15 @@ class Api::V1::Accounts::CredentialsController < Api::BaseController
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
......@@ -83,7 +83,7 @@ class UserSettingsDecorator
end
def boolean_cast_setting(key)
settings[key] == '1'
ActiveModel::Type::Boolean.new.cast(settings[key])
end
def coerced_settings(key)
......@@ -91,7 +91,7 @@ class UserSettingsDecorator
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)
......
......@@ -28,6 +28,10 @@ describe Api::V1::Accounts::CredentialsController do
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
......@@ -42,6 +46,8 @@ describe Api::V1::Accounts::CredentialsController do
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
......
......@@ -69,5 +69,16 @@ describe UserSettingsDecorator 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
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter