From f6161780d93ac63a8b15697b98547b7fee17c87a Mon Sep 17 00:00:00 2001 From: Philip How Date: Wed, 27 Mar 2024 17:30:32 +0000 Subject: [PATCH] Add test to mark profile as spam (#20800) * add test to mark profile as spam * rubocop * move test --- app/controllers/users_controller.rb | 6 +- .../admin_user_marks_user_as_spam_spec.rb | 70 +++++++++++++++++++ 2 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 spec/requests/admin_user_marks_user_as_spam_spec.rb diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index b5de6f048..22b5ad19b 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -267,11 +267,11 @@ class UsersController < ApplicationController end def toggle_spam - @target_user = User.find_by(id: params[:id]) - render json, status: :not_found unless @target_user - authorize @current_user + @target_user = User.find_by(id: params[:id]) + error_not_found and return unless @target_user + begin case request.method_symbol when :put diff --git a/spec/requests/admin_user_marks_user_as_spam_spec.rb b/spec/requests/admin_user_marks_user_as_spam_spec.rb new file mode 100644 index 000000000..79de93136 --- /dev/null +++ b/spec/requests/admin_user_marks_user_as_spam_spec.rb @@ -0,0 +1,70 @@ +require "rails_helper" + +RSpec.describe "Spam Toggling for User", type: :request do + let!(:user) { create(:user) } + let!(:admin) { create(:user, :admin) } + let!(:non_admin) { create(:user) } + let!(:spam_user) { create(:user, :spam) } + + describe "PUT /users/:id/spam" do + context "when user exists" do + before do + sign_in admin + put spam_user_path(user) + end + + it "marks user as spam" do + expect(response).to have_http_status(:no_content) + expect(user.reload).to be_spam + end + end + + context "when user does not exist" do + before { sign_in admin } + + it "returns a not found status" do + put spam_user_path(id: -1) + expect(response).to have_http_status(:not_found) + end + end + + context "when unauthorized" do + before { sign_in non_admin } + + it "prevents non-admins from marking a user as spam" do + expect { put spam_user_path(user) }.to raise_error(Pundit::NotAuthorizedError) + end + end + end + + describe "DELETE /users/:id/spam" do + context "when user exists and is marked as spam" do + before do + sign_in admin + delete spam_user_path(spam_user) + end + + it "removes user from spam" do + expect(response).to have_http_status(:no_content) + expect(spam_user.reload).not_to be_spam + end + end + + context "when user does not exist" do + before { sign_in admin } + + it "returns a not found status" do + delete spam_user_path(id: -1) # Changed to a likely non-existent ID + expect(response).to have_http_status(:not_found) + end + end + + context "when unauthorized" do + before { sign_in non_admin } + + it "prevents non-admins from removing a user from spam" do + expect { delete spam_user_path(user) }.to raise_error(Pundit::NotAuthorizedError) + end + end + end +end