FIX: Consistency about our response for invalid user id in `Admin::UsersController`.

This commit is contained in:
Guo Xiang Tan 2018-12-15 08:01:35 +08:00
parent ef0e84e3d9
commit e9ea0102a5
2 changed files with 22 additions and 17 deletions

View File

@ -26,7 +26,8 @@ class Admin::UsersController < Admin::AdminController
:revoke_api_key, :revoke_api_key,
:anonymize, :anonymize,
:reset_bounce_score, :reset_bounce_score,
:disable_second_factor] :disable_second_factor,
:delete_posts_batch]
def index def index
users = ::AdminUserIndexQuery.new(params).find_users users = ::AdminUserIndexQuery.new(params).find_users
@ -46,8 +47,7 @@ class Admin::UsersController < Admin::AdminController
end end
def delete_posts_batch def delete_posts_batch
user = User.find_by(id: params[:user_id]) deleted_posts = @user.delete_posts_in_batches(guardian)
deleted_posts = user.delete_posts_in_batches(guardian)
# staff action logs will have an entry for each post # staff action logs will have an entry for each post
render json: { posts_deleted: deleted_posts.length } render json: { posts_deleted: deleted_posts.length }
@ -563,6 +563,7 @@ class Admin::UsersController < Admin::AdminController
def fetch_user def fetch_user
@user = User.find_by(id: params[:user_id]) @user = User.find_by(id: params[:user_id])
raise Discourse::NotFound unless @user
end end
def refresh_browser(user) def refresh_browser(user)

View File

@ -241,9 +241,9 @@ RSpec.describe Admin::UsersController do
expect(AdminConfirmation.exists_for?(another_user.id)).to eq(false) expect(AdminConfirmation.exists_for?(another_user.id)).to eq(false)
end end
it "returns a 403 if the username doesn't exist" do it "returns a 404 if the username doesn't exist" do
put "/admin/users/123123/grant_admin.json" put "/admin/users/123123/grant_admin.json"
expect(response.status).to eq(403) expect(response.status).to eq(404)
end end
it 'updates the admin flag' do it 'updates the admin flag' do
@ -300,9 +300,9 @@ RSpec.describe Admin::UsersController do
expect(response.status).to eq(404) expect(response.status).to eq(404)
end end
it "returns a 422 if the username doesn't exist" do it "returns a 404 if the username doesn't exist" do
put "/admin/users/123123/trust_level.json" put "/admin/users/123123/trust_level.json"
expect(response.status).to eq(422) expect(response.status).to eq(404)
end end
it "upgrades the user's trust level" do it "upgrades the user's trust level" do
@ -347,9 +347,9 @@ RSpec.describe Admin::UsersController do
expect(response.status).to eq(404) expect(response.status).to eq(404)
end end
it "returns a 403 if the username doesn't exist" do it "returns a 404 if the username doesn't exist" do
put "/admin/users/123123/grant_moderation.json" put "/admin/users/123123/grant_moderation.json"
expect(response.status).to eq(403) expect(response.status).to eq(404)
end end
it 'updates the moderator flag' do it 'updates the moderator flag' do
@ -394,7 +394,7 @@ RSpec.describe Admin::UsersController do
it "returns a 404 if the user doesn't exist" do it "returns a 404 if the user doesn't exist" do
put "/admin/users/123123/primary_group.json" put "/admin/users/123123/primary_group.json"
expect(response.status).to eq(403) expect(response.status).to eq(404)
end end
it "changes the user's primary group" do it "changes the user's primary group" do
@ -554,9 +554,9 @@ RSpec.describe Admin::UsersController do
expect(reg_user).not_to be_silenced expect(reg_user).not_to be_silenced
end end
it "returns a 403 if the user doesn't exist" do it "returns a 404 if the user doesn't exist" do
put "/admin/users/123123/silence.json" put "/admin/users/123123/silence.json"
expect(response.status).to eq(403) expect(response.status).to eq(404)
end end
it "punishes the user for spamming" do it "punishes the user for spamming" do
@ -626,7 +626,7 @@ RSpec.describe Admin::UsersController do
it "returns a 403 if the user doesn't exist" do it "returns a 403 if the user doesn't exist" do
put "/admin/users/123123/unsilence.json" put "/admin/users/123123/unsilence.json"
expect(response.status).to eq(403) expect(response.status).to eq(404)
end end
it "unsilences the user" do it "unsilences the user" do
@ -943,6 +943,14 @@ RSpec.describe Admin::UsersController do
end end
describe "#delete_posts_batch" do describe "#delete_posts_batch" do
describe 'when user is is invalid' do
it 'should return the right response' do
put "/admin/users/nothing/delete_posts_batch.json"
expect(response.status).to eq(404)
end
end
context "when there are user posts" do context "when there are user posts" do
before do before do
post = Fabricate(:post, user: user) post = Fabricate(:post, user: user)
@ -951,8 +959,6 @@ RSpec.describe Admin::UsersController do
end end
it 'returns how many posts were deleted' do it 'returns how many posts were deleted' do
sign_in(admin)
put "/admin/users/#{user.id}/delete_posts_batch.json" put "/admin/users/#{user.id}/delete_posts_batch.json"
expect(response.status).to eq(200) expect(response.status).to eq(200)
expect(JSON.parse(response.body)["posts_deleted"]).to eq(3) expect(JSON.parse(response.body)["posts_deleted"]).to eq(3)
@ -961,8 +967,6 @@ RSpec.describe Admin::UsersController do
context "when there are no posts left to be deleted" do context "when there are no posts left to be deleted" do
it "returns correct json" do it "returns correct json" do
sign_in(admin)
put "/admin/users/#{user.id}/delete_posts_batch.json" put "/admin/users/#{user.id}/delete_posts_batch.json"
expect(response.status).to eq(200) expect(response.status).to eq(200)
expect(JSON.parse(response.body)["posts_deleted"]).to eq(0) expect(JSON.parse(response.body)["posts_deleted"]).to eq(0)