This is a continuation of Rspec. Is 302 a success? Why 302?
https://groups.google.com/forum/#!topic/rubyonrails-talk/Merk1uUyhyc
Setting up the relevant code
In config/routes.rb I have Rails.application.routes.draw do resources :sql_statements resources :articles
devise_for :users root ‘static_pages#root’ resources :users
root to: “articles#index”
byebug
end
``
In spec/controllers/sql_statements_controller_spec.rb I have describe “GET #new” do it “returns a success response” do get :new, params: {}, session: valid_session puts; p_here2(response.status) byebug expect(response).to be_success end end
``
In app/controllers/sql_statements_controller.rb I have
GET /sql_statements/new
def new @sql_statement = SqlStatement.new authorize @sql_statement # I think this causes a 302 end
``
In app/policies/sql_statement_policy.rb
See Authorization With Pundit
#app/policies/sql_statement_policy.rb
class SqlStatementPolicy < ApplicationPolicy def index? true end
def create? user.present? end
def update? return true if user.present? && user == sql_statement.user end
def destroy? return true if user.present? && user == sql_statement.user end
private
def sql_statement
record
end
end
``
p_here2 is debugging code I find extremely useful def p_here2(*args)
byebug
caller_text = caller[0] puts caller_text
args.each_with_index do |value, index| printf("%d: ", index) pp value end
``
Analysis
Let’s focus on app/controllers/sql_statements_controller.rb. The line to focus on is
authorize @sql_statement # I think this causes a 302
``
With the line above in, I see this when I run rspec /home/real-estate-data-mining/spec/controllers/sql_statements_controller_spec.rb:63:in `block (3 levels) in <top (required)>’ 0: 302
[60, 69] in /home/real-estate-data-mining/spec/controllers/sql_statements_controller_spec.rb 60: describe “GET #new” do 61: it “returns a success response” do 62: get :new, params: {}, session: valid_session 63: puts; p_here2(response.status) 64: byebug => 65: expect(response).to be_success 66: end 67: end 68: 69: describe “GET #edit” do (byebug)
``
If I comment out
```` # authorize @sql_statement # I think this causes a 302
``
I see this: /home/real-estate-data-mining/spec/controllers/sql_statements_controller_spec.rb:63:in `block (3 levels) in <top (required)>’ 0: 200
[60, 69] in /home/real-estate-data-mining/spec/controllers/sql_statements_controller_spec.rb 60: describe “GET #new” do 61: it “returns a success response” do 62: get :new, params: {}, session: valid_session 63: puts; p_here2(response.status) 64: byebug => 65: expect(response).to be_success 66: end 67: end 68: 69: describe “GET #edit” do (byebug)
``
So, I think it is fairly clear Pundit is causing the 302.
Questions
I am a novice in both Pundit and Rspec
Question 1: Why is Pundit causing this “problem”?
Question 2: What is the preferred way to have Rspec go green on the test in spec/controllers/sql_statements_controller_spec.rb ?