Hola a todos,
Tengo un filtro para una autenticación básica, la del Agile, que
redirige en caso de que no envÃen el id del usuario como variable de
sesión. Este es:
def authorize
@p=Person.find_by_id(session[:person_id])
unless @p
flash[:notice] = “Please log in”
redirect_to(:controller => “login” , :action => “login” )
end
end
El problema es que en el test funcional me redirige aún cuando le paso
la variable adecuadamente (¿no?):
p = Person.find(:first)
assert p!=nil
get :index, {}, { :person_id => p.id }
assert_response :success
El primer assert confirma que p existe, pero aún asà el assert_response
falla porque redirige. Da el siguiente error:
- Failure:
test_index_with_user(HomeControllerTest)
[/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.2/lib/action_controller/assertions/response_assertions.rb:26:in
`assert_response’
/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.2/lib/action_controller/assertions/response_assertions.rb:18:in
`assert_response’
test/functional/home_controller_test.rb:27:in
`test_index_with_user’]:
Expected response to be a <:success>, but was <302>
Y en log/test.log aparece:
Processing HomeController#index (for 0.0.0.0 at 2007-05-06 14:13:15)
[GET]
Session ID:
Parameters: {“action”=>“index”, “controller”=>“home”}
Person Load (0.000317) SELECT * FROM people WHERE (people.id
IS
NULL) LIMIT 1
Redirected to http://test.host/login/login
¿Alguna idea? Gracias.
On 5/6/07, Héctor [email protected] wrote:
flash[:notice] = "Please log in"
assert_response :success
test/functional/home_controller_test.rb:27:in
Person Load (0.000317) SELECT * FROM people WHERE (people.id
IS
NULL) LIMIT 1
Redirected to http://test.host/login/login
¿Alguna idea? Gracias.
El tercer parámetro de get son los headers, no los valores de la
sesión. Para meter datos en la sesión deberías utilizar una línea como
@request.session[:person_id] = p.id
antes de utilizar get.
On 5/7/07, Héctor [email protected] wrote:
Gracias por tu respuesta Daniel.
Me sigue dando el mismo error. ¿Cómo podría asegurarme que envío los
datos de la sesión?
@request.session[:person_id] = p.id
assert @request.session[:person_id]==p.id
get :index, {}, { :person_id => p.id } # ó get :index, {}, {} ; el
resultado es el mismo
assert_response :success
Prueba poniendo en tu controlador antes de la línea del find:
log.debug session.inspect
Y mira el test.log a ver que aparece. Debería aparecer el valor de
:person_id, si no aparece… pues no tengo más idea de lo que puede
ser.
log.debug session.inspect
no me iba; he tenido que poner:
logger.debug session.inspect
Definitivamente no guarda el valor en la sesión. En log/test.log
aparece:
#<ActionController::TestSession:0xb755a55c @attributes={“flash”=>{}},
@session_id="", @saved_attributes=nil>
Bueno, ya miraré (dejo de testear por ahora
De todas formas, gracias
por tu ayuda.
Saludos,
Héctor.
Gracias por tu respuesta Daniel.
Me sigue dando el mismo error. ¿Cómo podrÃa asegurarme que envÃo los
datos de la sesión?
@request.session[:person_id] = p.id
assert @request.session[:person_id]==p.id
get :index, {}, { :person_id => p.id } # ó get :index, {}, {} ; el
resultado es el mismo
assert_response :success