70 lines
1.8 KiB
Ruby
70 lines
1.8 KiB
Ruby
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
|