Pundit работает правильно, но для неавторизованных пользователей возвращается 200 вместо 401

У меня есть спецификации, как это:

it "should let a user destroy their own picture" do
  expect do
    delete :destroy, { id: p1.id }
    puts "\n\nOK resp\n#{response.status}\n\n\n"
  end.to change { Picture.count }.by(-1)
end

it "should not let a user delete another user's picture" do
  sign_in(user2)
  expect do
    delete :destroy, { id: p1.id }
    puts "\n\nNOT OK resp\n#{response.status}\n\n\n"
  end.to change { Picture.count }.by(0)
end

Первый правильно возвращает 302 (Я перенаправляю после уничтожения). Второй правильно проходит, то есть пользователь не может уничтожить, но возвращает 200 код состояния, вместо 401 как и должно вернуться.

В моем ApplicationController:

class ApplicationController < ActionController::Base
  include Pundit
  rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized

  def user_not_authorized
    render file: "public/401.html", status: :unauthorized
  end
  ...
end

С или без rescue from линия, я все еще получаю 200, Кажется, что пока pundit правильно ловит true или же false в authorize(@obj) метод и остановка выполнения, но это не поднимает, когда он получает false,

Как я могу это исправить?

0 ответов

Другие вопросы по тегам