diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index 146a0aecb..e5e12066e 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -16,6 +16,7 @@ module Admin @user = User.find(params[:id]) @notes = @user.notes.order(created_at: :desc).limit(10).load set_feedback_messages + set_related_reactions end def show @@ -136,6 +137,17 @@ module Admin .order(created_at: :desc).limit(15) end + def set_related_reactions + user_article_ids = @user.articles.ids + user_comment_ids = @user.comments.ids + @related_vomit_reactions = Reaction.where(reactable_type: "Comment", reactable_id: user_comment_ids, + category: "vomit") + .or(Reaction.where(reactable_type: "Article", reactable_id: user_article_ids, category: "vomit")) + .or(Reaction.where(reactable_type: "User", user_id: @user.id, category: "vomit")) + .includes(:reactable) + .order(created_at: :desc).limit(15) + end + def user_params allowed_params = %i[ new_note note_for_current_role user_status diff --git a/app/views/admin/users/_reports.html.erb b/app/views/admin/users/_reports.html.erb index 327d6c1c6..ecc271e3c 100644 --- a/app/views/admin/users/_reports.html.erb +++ b/app/views/admin/users/_reports.html.erb @@ -1,9 +1,9 @@

Recent Reports

- +
-
+ <%= render "notes" %> +<%= render "negative_reactions" %> <%= render "reports" %>
diff --git a/spec/requests/admin/users_spec.rb b/spec/requests/admin/users_spec.rb index 514eec964..0d79fc746 100644 --- a/spec/requests/admin/users_spec.rb +++ b/spec/requests/admin/users_spec.rb @@ -40,6 +40,38 @@ RSpec.describe "admin/users", type: :request do sign_out(admin) expect { get "/admin/users/#{user.id}/edit" }.to raise_error(Pundit::NotAuthorizedError) end + + it "displays the 'Recent Reactions' section" do + get "/admin/users/#{user.id}/edit" + expect(response.body).to include("Recent Reactions") + end + + it "displays a message when there are no related vomit reactions for a user" do + get "/admin/users/#{user.id}/edit" + expect(response.body).to include("Nothing negative to see here! 👀") + end + + it "displays a list of recent related vomit reactions for a user if any exist" do + vomit = build(:reaction, category: "vomit", user_id: user.id, reactable_type: "Article", status: "valid") + get "/admin/users/#{user.id}/edit" + expect(response.body).to include(vomit.reactable_type) + end + + it "displays the 'Recent Reports' section" do + get "/admin/users/#{user.id}/edit" + expect(response.body).to include("Recent Reports") + end + + it "displays a message when there are no related reports for a user" do + get "/admin/users/#{user.id}/edit" + expect(response.body).to include("Nothing to report here! 👀") + end + + it "displays a list of recent reports for a user if any exist" do + report = build(:feedback_message, category: "spam", affected_id: user.id, feedback_type: "spam", status: "Open") + get "/admin/users/#{user.id}/edit" + expect(response.body).to include(report.feedback_type) + end end describe "POST /admin/users/:id/banish" do