Pundit работает правильно, но возвращает не вместо 401 200 вместо 401 - PullRequest
0 голосов
/ 04 июля 2018

У меня есть такие характеристики:

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.

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

...