This commit is contained in:
Matt Jankowski 2025-09-03 20:07:43 +00:00 committed by GitHub
commit f2f58c3e0d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 155 additions and 49 deletions

View File

@ -0,0 +1,24 @@
# frozen_string_literal: true
module Admin
class Accounts::AvatarsController < BaseController
before_action :set_account
def destroy
authorize @account, :remove_avatar?
@account.avatar = nil
@account.save!
log_action :remove_avatar, @account.user
redirect_to admin_account_path(@account.id), notice: t('admin.accounts.removed_avatar_msg', username: @account.acct)
end
private
def set_account
@account = Account.find(params[:account_id])
end
end
end

View File

@ -0,0 +1,24 @@
# frozen_string_literal: true
module Admin
class Accounts::HeadersController < BaseController
before_action :set_account
def destroy
authorize @account, :remove_header?
@account.header = nil
@account.save!
log_action :remove_header, @account.user
redirect_to admin_account_path(@account.id), notice: t('admin.accounts.removed_header_msg', username: @account.acct)
end
private
def set_account
@account = Account.find(params[:account_id])
end
end
end

View File

@ -106,28 +106,6 @@ module Admin
redirect_to admin_account_path(@account.id), notice: I18n.t('admin.accounts.redownloaded_msg', username: @account.acct)
end
def remove_avatar
authorize @account, :remove_avatar?
@account.avatar = nil
@account.save!
log_action :remove_avatar, @account.user
redirect_to admin_account_path(@account.id), notice: I18n.t('admin.accounts.removed_avatar_msg', username: @account.acct)
end
def remove_header
authorize @account, :remove_header?
@account.header = nil
@account.save!
log_action :remove_header, @account.user
redirect_to admin_account_path(@account.id), notice: I18n.t('admin.accounts.removed_header_msg', username: @account.acct)
end
def unblock_email
authorize @account, :unblock_email?

View File

@ -1,12 +1,12 @@
- if account.avatar?
%tr
%th= t('admin.accounts.avatar')
%td= table_link_to 'delete', t('admin.accounts.remove_avatar'), remove_avatar_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_avatar, account)
%td= table_link_to 'delete', t('admin.accounts.remove_avatar'), admin_account_avatar_path(account.id), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_avatar, account)
%td
- if account.header?
%tr
%th= t('admin.accounts.header')
%td= table_link_to 'delete', t('admin.accounts.remove_header'), remove_header_admin_account_path(account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_header, account)
%td= table_link_to 'delete', t('admin.accounts.remove_header'), admin_account_header_path(account.id), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_header, account)
%td
%tr
%th= t('admin.accounts.role')

View File

@ -131,14 +131,17 @@ namespace :admin do
resources :report_notes, only: [:create, :destroy]
resources :accounts, only: [:index, :show, :destroy] do
scope module: :accounts do
resource :header, only: :destroy
resource :avatar, only: :destroy
end
member do
post :enable
post :unsensitive
post :unsilence
post :unsuspend
post :redownload
post :remove_avatar
post :remove_header
post :memorialize
post :approve
post :reject

View File

@ -280,29 +280,6 @@ RSpec.describe Admin::AccountsController do
end
end
describe 'POST #remove_avatar' do
subject { post :remove_avatar, params: { id: account.id } }
let(:current_user) { Fabricate(:user, role: role) }
let(:account) { Fabricate(:account) }
context 'when user is admin' do
let(:role) { UserRole.find_by(name: 'Admin') }
it 'succeeds in removing avatar' do
expect(subject).to redirect_to admin_account_path(account.id)
end
end
context 'when user is not admin' do
let(:role) { UserRole.everyone }
it 'fails to remove avatar' do
expect(subject).to have_http_status 403
end
end
end
describe 'POST #unblock_email' do
subject { post :unblock_email, params: { id: account.id } }

View File

@ -0,0 +1,23 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Admin Accounts Avatar' do
before { sign_in user }
describe 'DELETE #destroy' do
let(:user) { Fabricate(:user, role: role) }
let(:account) { Fabricate(:account, avatar: fixture_file_upload('avatar.gif', 'image/gif')) }
context 'when user is not admin' do
let(:role) { UserRole.everyone }
it 'fails to remove avatar' do
delete "/admin/accounts/#{account.id}/avatar"
expect(response)
.to have_http_status 403
end
end
end
end

View File

@ -0,0 +1,23 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Admin Accounts Header' do
before { sign_in user }
describe 'DELETE #destroy' do
let(:user) { Fabricate(:user, role: role) }
let(:account) { Fabricate(:account, header: fixture_file_upload('attachment.jpg', 'image/jpeg')) }
context 'when user is not admin' do
let(:role) { UserRole.everyone }
it 'fails to remove header' do
delete "/admin/accounts/#{account.id}/header"
expect(response)
.to have_http_status 403
end
end
end
end

View File

@ -0,0 +1,27 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Admin Accounts Avatar' do
before { sign_in user }
let(:user) { Fabricate(:admin_user) }
describe 'Deleting an account avatar' do
let(:account) { Fabricate(:account, avatar: fixture_file_upload('avatar.gif', 'image/gif')) }
it 'succeeds in removing avatar' do
visit admin_account_path(account.id)
expect { submit_delete }
.to change { account.reload.avatar_file_name }.to(be_blank)
.and change(Admin::ActionLog, :count).by(1)
expect(page)
.to have_content I18n.t('admin.accounts.removed_avatar_msg', username: account.acct)
end
def submit_delete
click_on I18n.t('admin.accounts.remove_avatar')
end
end
end

View File

@ -0,0 +1,27 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Admin Accounts Header' do
before { sign_in user }
let(:user) { Fabricate(:admin_user) }
describe 'Deleting an account header' do
let(:account) { Fabricate(:account, header: fixture_file_upload('attachment.jpg', 'image/jpeg')) }
it 'succeeds in removing header' do
visit admin_account_path(account.id)
expect { submit_delete }
.to change { account.reload.header_file_name }.to(be_blank)
.and change(Admin::ActionLog, :count).by(1)
expect(page)
.to have_content I18n.t('admin.accounts.removed_header_msg', username: account.acct)
end
def submit_delete
click_on I18n.t('admin.accounts.remove_header')
end
end
end