Toggle sensitive from admin page (#3261)
This commit is contained in:
		
							parent
							
								
									4289ed1d13
								
							
						
					
					
						commit
						7ee5fc5d68
					
				
					 6 changed files with 79 additions and 10 deletions
				
			
		| 
						 | 
				
			
			@ -2,17 +2,31 @@
 | 
			
		|||
 | 
			
		||||
module Admin
 | 
			
		||||
  class ReportedStatusesController < BaseController
 | 
			
		||||
    def destroy
 | 
			
		||||
      status = Status.find params[:id]
 | 
			
		||||
    before_action :set_report
 | 
			
		||||
    before_action :set_status
 | 
			
		||||
 | 
			
		||||
      RemovalWorker.perform_async(status.id)
 | 
			
		||||
      redirect_to admin_report_path(report)
 | 
			
		||||
    def update
 | 
			
		||||
      @status.update(status_params)
 | 
			
		||||
      redirect_to admin_report_path(@report)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def destroy
 | 
			
		||||
      RemovalWorker.perform_async(@status.id)
 | 
			
		||||
      redirect_to admin_report_path(@report)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    private
 | 
			
		||||
 | 
			
		||||
    def report
 | 
			
		||||
      Report.find(params[:report_id])
 | 
			
		||||
    def status_params
 | 
			
		||||
      params.require(:status).permit(:sensitive)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def set_report
 | 
			
		||||
      @report = Report.find(params[:report_id])
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def set_status
 | 
			
		||||
      @status = @report.statuses.find(params[:id])
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -245,4 +245,19 @@
 | 
			
		|||
 | 
			
		||||
.report-status__actions {
 | 
			
		||||
  flex: 0 0 auto;
 | 
			
		||||
  position: relative;
 | 
			
		||||
 | 
			
		||||
  .nsfw-button {
 | 
			
		||||
    color: $white;
 | 
			
		||||
    font-size: 11px;
 | 
			
		||||
    width: 11px;
 | 
			
		||||
    display: block;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .trash-button {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    bottom: 10px;
 | 
			
		||||
    font-size: 24px;
 | 
			
		||||
    width: 24px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,7 +24,10 @@
 | 
			
		|||
      .activity-stream.activity-stream-headless
 | 
			
		||||
        .entry= render partial: 'stream_entries/simple_status', locals: { status: status }
 | 
			
		||||
      .report-status__actions
 | 
			
		||||
        = link_to admin_report_reported_status_path(@report, status), method: :delete, class: 'icon-button', style: 'font-size: 24px; width: 24px; height: 24px', title: t('admin.reports.delete') do
 | 
			
		||||
        - unless status.media_attachments.empty?
 | 
			
		||||
          = link_to admin_report_reported_status_path(@report, status, status: { sensitive: !status.sensitive }), method: :patch, class: 'nsfw-button', title: t("admin.reports.nsfw.#{!status.sensitive}") do
 | 
			
		||||
            = t("admin.reports.nsfw.#{!status.sensitive}")
 | 
			
		||||
        = link_to admin_report_reported_status_path(@report, status), method: :delete, class: 'icon-button trash-button', title: t('admin.reports.delete'), data: { confirm: t('admin.reports.are_you_sure') } do
 | 
			
		||||
          = fa_icon 'trash'
 | 
			
		||||
 | 
			
		||||
- if !@report.action_taken?
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -160,6 +160,10 @@ en:
 | 
			
		|||
      title: Reports
 | 
			
		||||
      unresolved: Unresolved
 | 
			
		||||
      view: View
 | 
			
		||||
      nsfw:
 | 
			
		||||
        'true': NSFW ON
 | 
			
		||||
        'false': NSFW OFF
 | 
			
		||||
      are_you_sure: Are you sure?
 | 
			
		||||
    settings:
 | 
			
		||||
      contact_information:
 | 
			
		||||
        email: Enter a public e-mail address
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -80,7 +80,7 @@ Rails.application.routes.draw do
 | 
			
		|||
    resources :instances, only: [:index]
 | 
			
		||||
 | 
			
		||||
    resources :reports, only: [:index, :show, :update] do
 | 
			
		||||
      resources :reported_statuses, only: :destroy
 | 
			
		||||
      resources :reported_statuses, only: [:update, :destroy]
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    resources :accounts, only: [:index, :show] do
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,14 +4,47 @@ describe Admin::ReportedStatusesController do
 | 
			
		|||
  render_views
 | 
			
		||||
 | 
			
		||||
  let(:user) { Fabricate(:user, admin: true) }
 | 
			
		||||
  let(:report) { Fabricate(:report, status_ids: [status.id]) }
 | 
			
		||||
  let(:status) { Fabricate(:status) }
 | 
			
		||||
 | 
			
		||||
  before do
 | 
			
		||||
    sign_in user, scope: :user
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'PATCH #update' do
 | 
			
		||||
    subject do
 | 
			
		||||
      -> { patch :update, params: { report_id: report, id: status, status: { sensitive: sensitive } } }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    let(:status) { Fabricate(:status, sensitive: !sensitive) }
 | 
			
		||||
    let(:sensitive) { true }
 | 
			
		||||
 | 
			
		||||
    context 'updates sensitive column to true' do
 | 
			
		||||
      it 'updates sensitive column' do
 | 
			
		||||
        is_expected.to change {
 | 
			
		||||
          status.reload.sensitive
 | 
			
		||||
        }.from(false).to(true)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'updates sensitive column to false' do
 | 
			
		||||
      let(:sensitive) { false }
 | 
			
		||||
 | 
			
		||||
      it 'updates sensitive column' do
 | 
			
		||||
        is_expected.to change {
 | 
			
		||||
          status.reload.sensitive
 | 
			
		||||
        }.from(true).to(false)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'redirects to report page' do
 | 
			
		||||
      subject.call
 | 
			
		||||
      expect(response).to redirect_to(admin_report_path(report))
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'DELETE #destroy' do
 | 
			
		||||
    it 'removes a status' do
 | 
			
		||||
      report = Fabricate(:report)
 | 
			
		||||
      status = Fabricate(:status)
 | 
			
		||||
      allow(RemovalWorker).to receive(:perform_async)
 | 
			
		||||
 | 
			
		||||
      delete :destroy, params: { report_id: report, id: status }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue