Skip to content

Commit 5eeda24

Browse files
authored
Merge pull request #216 from TreinaDev/feat/admin-deletes-reported-profile
Feat/Admin remove conta de usuário denunciado
2 parents 1770864 + ebef818 commit 5eeda24

File tree

10 files changed

+118
-14
lines changed

10 files changed

+118
-14
lines changed

app/controllers/reports_controller.rb

+9-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ class ReportsController < ApplicationController
33
before_action :set_reportable_for_new, only: :new
44
before_action :set_reportable_for_create, only: :create
55
before_action :redirect_unless_published_post
6-
before_action :authorize!, only: %i[index show]
76
before_action :redirect_if_self_report, only: :create
8-
before_action :set_report, only: %i[reject show remove_content]
7+
before_action :authorize!, only: %i[index show reject remove_content remove_profile]
8+
before_action :set_report, only: %i[reject show remove_content remove_profile]
99

1010
def new
1111
set_offences
@@ -37,6 +37,13 @@ def remove_content
3737
redirect_to @report, notice: t('.success')
3838
end
3939

40+
def remove_profile
41+
@report.reportable.update removed: true
42+
@report.reportable.inactive!
43+
@report.granted!
44+
redirect_to @report, notice: t('.success')
45+
end
46+
4047
private
4148

4249
def set_reportable_for_new

app/models/user.rb

+8
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,14 @@ def delete_user_data
7676
destroy
7777
end
7878

79+
def active_for_authentication?
80+
super && !profile.removed?
81+
end
82+
83+
def inactive_message
84+
I18n.t('reports.removed_account')
85+
end
86+
7987
private
8088

8189
def subscribe_likes_mailer_job

app/views/reports/show.html.erb

+17-5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
<div class="container">
2+
<%= link_to t('return_btn'), reports_path, class: 'btn btn-secondary' %>
3+
</div>
14
<div class="d-flex">
25
<div class="container d-flex flex-column w-50">
36
<div class="mt-3">
@@ -35,22 +38,31 @@
3538
<p class="card-text"><%= @report.message %></p>
3639

3740
<p class="card-subtitle mb-2 text-muted">
38-
<%= I18n.t('.reporting_profile') %>: <%= link_to @report.profile.full_name, profile_path(@report.profile) %>
41+
<%= t('.reporting_profile') %>: <%= link_to @report.profile.full_name, profile_path(@report.profile) %>
3942
</p>
4043
<% if @report.pending? %>
4144
<div class="d-flex flex-row justify-content-center mt-5 gap-5">
42-
<% unless @report.reportable.is_a? Profile %>
43-
<%= button_to t('.remove_content_btn'), remove_content_report_path(@report), class:'card-btn flex-column btn btn-danger btn-lg' %>
45+
<% if @report.reportable.is_a? Profile %>
46+
<%= button_to t('.remove_profile_btn'), remove_profile_report_path(@report),
47+
class:'card-btn flex-column btn btn-danger btn-lg',
48+
data: { turbo_confirm: t('.remove_profile_warning') } %>
49+
<% else %>
50+
<%= button_to t('.remove_content_btn'), remove_content_report_path(@report),
51+
class:'card-btn flex-column btn btn-danger btn-lg',
52+
data: { turbo_confirm: t('.remove_content_warning') } %>
4453
<% end %>
4554
<%= button_to t('.reject_btn'), reject_report_path(@report), class:'card-btn flex-column btn btn-secondary btn-lg ml-2' %>
4655
</div>
4756
<% else %>
4857
<div class="d-flex flex-row justify-content-center mt-5">
4958
<h4 class= "card-subtitle mb-2 text-dark">
50-
<%= I18n.t('reports.index.rejected') if @report.rejected? %>
59+
<%= t('reports.index.rejected') if @report.rejected? %>
5160
</h4>
5261
<h4 class= "card-subtitle mb-2 text-danger">
53-
<%= I18n.t('reports.index.granted') if @report.granted? %>
62+
<% if @report.granted? %>
63+
<%= t('.profile_removed') if @report.reportable.is_a? Profile %>
64+
<%= t('.content_removed') unless @report.reportable.is_a? Profile %>
65+
<% end %>
5466
</h4>
5567
</div>
5668
<% end %>

app/views/settings/index.html.erb

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
<%= form_with(url: deactivate_profile_path, method: :patch) do |form| %>
2929
<%= form.submit t('.arquive_btn'),
3030
class: "btn btn-danger",
31-
data: { turbo_confirm: I18n.t('.turbo_arquive_warning') }
31+
data: { turbo_confirm: I18n.t('settings.index.turbo_arquive_warning') }
3232
%>
3333
<% end %>
3434
</div>
@@ -37,7 +37,7 @@
3737
<%= form_with(url: delete_account_path, method: :delete) do |form| %>
3838
<%= form.submit t('.delete_btn'),
3939
class: "btn btn-danger",
40-
data: { turbo_confirm: I18n.t('.turbo_delete_warning') }
40+
data: { turbo_confirm: I18n.t('settings.index.turbo_delete_warning') }
4141
%>
4242
<% end %>
4343
</div>

config/locales/models/reports.pt-BR.yml

+9
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ pt-BR:
1111
offence_type: Tipo de ofensa
1212
reports:
1313
report_btn: Denunciar
14+
removed_account: Sua conta foi removida pelos adminitradores
1415
create:
1516
self_report: Você não pode denunciar sí mesmo ou o próprio conteúdo.
1617
success: Sua denúncia foi registrada
@@ -21,12 +22,19 @@ pt-BR:
2122
success: Denúncia rejeitada com sucesso
2223
remove_content:
2324
success: Conteúdo removido com sucesso
25+
remove_profile:
26+
success: Perfil removido com sucesso
2427
comment:
2528
see_post: Ver publicação
2629
show:
2730
reporting_profile: Denunciado por
2831
reject_btn: Rejeitar denúncia
2932
remove_content_btn: Remover conteúdo
33+
remove_profile_btn: Remover perfil
34+
remove_profile_warning: O usuário perderá o acesso à conta dele permanentemente. Tem certeza que deseja continuar?
35+
remove_content_warning: Esse conteúdo será deletado. Tem certeza que deseja continuar?
36+
profile_removed: Perfil removido
37+
content_removed: Conteúdo removido
3038
index:
3139
pending: Pendente
3240
granted: Conteúdo removido
@@ -43,3 +51,4 @@ pt-BR:
4351
spam: Spam
4452
disturbin_content: Conteúdo pertubador
4553
harassment: Abuso/Perseguição
54+

config/routes.rb

+5-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@
2222
end
2323

2424
resources :reports, only: %i[index new create show] do
25-
post 'reject', 'remove_content', on: :member
25+
member do
26+
post 'reject'
27+
post 'remove_content'
28+
post 'remove_profile'
29+
end
2630
end
2731

2832
resources :posts, only: %i[] do
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class AddRemovedToProfile < ActiveRecord::Migration[7.1]
2+
def change
3+
add_column :profiles, :removed, :boolean, default: false
4+
end
5+
end

db/schema.rb

+3-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

spec/system/authentication/visitor_logs_in_spec.rb

+16
Original file line numberDiff line numberDiff line change
@@ -91,5 +91,21 @@
9191
end
9292
expect(page).to have_content 'E-mail ou senha inválidos'
9393
end
94+
95+
it 'e seu perfil foi removido pelos administradores' do
96+
user = create(:user)
97+
user.profile.inactive!
98+
user.profile.update removed: true
99+
100+
visit root_path
101+
click_on 'Entrar'
102+
within '#new_user' do
103+
fill_in 'E-mail', with: user.email
104+
fill_in 'Senha', with: user.password
105+
click_on 'Entrar'
106+
end
107+
108+
expect(page).to have_content 'Sua conta foi removida pelos adminitradores'
109+
end
94110
end
95111
end

spec/system/reports/admin_rules_report_spec.rb

+44-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
expect(page).to have_content 'Denúncia rejeitada com sucesso'
1717
end
1818

19-
it 'decidindo remover o conteúdo' do
19+
it 'decidindo remover o post' do
2020
admin = create(:user, :admin)
2121
post = create(:post, :published)
2222
create(:report, reportable: post)
@@ -25,10 +25,52 @@
2525
login_as admin
2626
visit reports_path
2727
page.all('.see_more').to_a.first.click
28-
click_on 'Remover conteúdo'
28+
accept_prompt do
29+
click_on 'Remover conteúdo'
30+
end
2931

3032
expect(Report.first).to be_granted
3133
expect(Report.second).to be_pending
34+
expect(post.reload).to be_removed
3235
expect(page).to have_content 'Conteúdo removido com sucesso'
3336
end
37+
38+
it 'decidindo remover o comentário' do
39+
admin = create(:user, :admin)
40+
comment = create(:comment)
41+
create(:report, :for_post)
42+
create(:report, reportable: comment)
43+
44+
login_as admin
45+
visit reports_path
46+
page.all('.see_more').to_a.second.click
47+
accept_prompt do
48+
click_on 'Remover conteúdo'
49+
end
50+
51+
expect(Report.first).to be_pending
52+
expect(Report.second).to be_granted
53+
expect(comment.reload).to be_removed
54+
expect(page).to have_content 'Conteúdo removido com sucesso'
55+
end
56+
57+
it 'decidindo remover o perfil' do
58+
admin = create(:user, :admin)
59+
user = create(:user)
60+
create(:report, :for_post)
61+
create(:report, reportable: user.profile)
62+
63+
login_as admin
64+
visit reports_path
65+
page.all('.see_more').to_a.second.click
66+
accept_prompt do
67+
click_on 'Remover perfil'
68+
end
69+
70+
expect(page).to have_content 'Perfil removido com sucesso'
71+
expect(Report.first).to be_pending
72+
expect(Report.second).to be_granted
73+
expect(user.reload.profile).to be_inactive
74+
expect(user.profile.removed).to be true
75+
end
3476
end

0 commit comments

Comments
 (0)